16 進データを取得するための Java 解析 DICOM 図の分析例

黄舟
リリース: 2017-10-18 09:51:16
オリジナル
1800 人が閲覧しました

DICOM は、医療用デジタル画像および通信に関する国際規格 (ISO 12052) です。次の記事では、Java で DICOM 図を解析して 16 進数データを取得する方法について主に説明します。サンプルコードが詳しく紹介されているので、困っている友達は参考にしてください。

はじめに

最近のプロジェクトでは、DICOM 画像を解析するために JAVA が必要でした。DICOM は放射線医学、心臓血管画像診断、放射線診断および治療機器 (X 線、CT、MRI、超音波、など)、眼科や歯科などの他の医療分野でもますます広く使用されています。実装中に発生したいくつかの問題を以下に記録します。

まず *.dcm ファイルを見つけます。エディターで開くと、次のインターフェイスが表示されます。私が使用しているエディターは UltraEdit です

赤い文字はバイトコードの注釈です コードの最初の 8 行はファイルのヘッダー情報であり、通常は役に立ちません。 9行目から始まる4つの16進数「44,49,43,4D」が重要です。 ASCll コードの説明は DICM です。これら 4 つの 16 進数が失われたり破損したりすると、DICOM 画像を開くことができなくなります。

以下では、Java を使用してこれらの 16 進数を読み取ります


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class My_DICOM {

 static FileInputStream input;
 static byte[] b;
 public static void main(String[] args) {
  try {
   File file = new File("G:/zzz.dcm");
   input = new FileInputStream(file);
   b = new byte[(int) file.length()];
   input.read(b);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  init();
 }
 public static void init(){
  System.out.println("b.length="+b.length);
  for (int i =0;i<10000;i++) {
    System.out.print(Integer.toHexString(b[i]));  
   if (i%16==15) {
    System.out.println();
   }else{
    System.out.print(", ");
   }
  }
 }
}
ログイン後にコピー

(ファイルが大きすぎて 130,000 バイトあるため、表示のために 10,000 回だけループされています。最初の部分を読んでください) 10,000 バイト)

上記のコードは非常に一般的で、ファイル ストリームをバイト配列に読み取るものです。 Integer.toHexString(b[i]) を使用して 16 進数に変換します。 Integer.toHexString(b[i])将其转化成十六进制。

问题出现了。

运行后:

对照上面的编辑器打开的十六进制列表红字处本该是a6可是却打印出了ffffffa6。

查找问题

笔算出错字节所在的位置是140。打印system.out.pritln(b[140]);

問題が発生します。


実行後:

コントロール上 エディタで開いた16進数リストの赤字はa6のはずですが、ffffffa6と出力されます。

問題を見つけてください

間違ったバイトの位置は 140 です。 system.out.pritln(b[140]); を出力すると、結果は -90 になります。なぜ -90 なのでしょうか? a6まで遡って10進数に変換すると166になるはずです。

🎜🎜さて、問題が見つかりました。 166+90=256 これは偶然ではありません。見落とされている問題の 1 つは、バイト配列の最大値が 127 しかないことです。そのため、ファイルに読み取られた配列が 127 より大きい場合、バイト配列の読み取り時にエラーが発生します。 🎜🎜🎜🎜解決策🎜🎜🎜🎜🎜🎜rree🎜🎜🎜概要🎜🎜🎜

以上が16 進データを取得するための Java 解析 DICOM 図の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート