0

次の Java コードを使用して Dicom 画像を読み取り、後で JPEG ファイルに変換しようとしています。読み取りが行で発生した場合

tempImage = ImageIO.read(dicomFile);

の場合、返されるイメージのイメージ タイプは 10 か、0 や 11 などの別のものです。ここでの問題は、読み取りが散発的に発生することです。返されるイメージ タイプが 10 の場合とそうでない場合があります。返されたイメージ タイプが 10 の場合、変換された JPEG ファイルの書き込みは成功し、true が返され、JPEG ファイルが取得されます。ただし、返されたイメージ タイプが 10 以外の場合、書き込みは失敗して false が返され、ファイルは作成されません。これは私が書くために使用しているステートメントです:

writerReturn = ImageIO.write(image, "jpeg", new File(tempLocation + studyId + File.separator + seriesUID + File.separator + objectId + thumbnail+ ".jpeg"));

この散発的な動作がなぜ起こっているのかを理解しようと長い時間を費やしましたが、何にも到達できませんでした. 助けていただけますか?

4

2 に答える 2

1

入力画像が 16 ビットであることが問題であると推測していますが、コードは 8 ビット入力のみを受け入れると確信しています。16 ビット入力を変換しない限り、いわゆる通常の JPEG 8 ビット非可逆形式を使用して書き出すことはできません。

私の箱には、私が見ているものがあります:

$ gdcminfo 1.2.840.113619.2.67.2200970061.29232060605151433.387
MediaStorage is 1.2.840.10008.5.1.4.1.1.1.1 [Digital X-Ray Image Storage - For Presentation]
TransferSyntax is 1.2.840.10008.1.2.4.90 [JPEG 2000 Image Compression (Lossless Only)]
NumberOfDimensions: 2
Dimensions: (1887,1859,1)
SamplesPerPixel    :1
BitsAllocated      :16
BitsStored         :14
HighBit            :13
PixelRepresentation:0
ScalarType found   :UINT16
PhotometricInterpretation: MONOCHROME2 
PlanarConfiguration: 0
TransferSyntax: 1.2.840.10008.1.2.4.90
Group           0x6000
Rows            1859
Columns         1887
NumberOfFrames  0
Description     
Type            G 
Origin[2]       1,1
FrameOrigin     0
BitsAllocated   1
BitPosition     0
Origin: (0,0,0)
Spacing: (0.187429,0.187429,1)
DirectionCosines: (1,0,0,0,1,0)
Rescale Intercept/Slope: (0,1)
Orientation Label: AXIAL

したがって、カプセル化された JPEG 2000 バイトストリームを抽出することができます。

$ gdcmraw 1.2.840.113619.2.67.2200970061.29232060605151433.387 bug.j2k
$ file bug.j2k 
bug.j2k: JPEG 2000 codestream

bug.j2kIrfanView とkdu_showのいずれかを使用して生成されたものを開くことができましたが、画像が非常に暗いことがわかります (下位ビットのみが読み取られます)。

于 2016-11-15T07:09:37.507 に答える