2

dicom ライブラリを使用して DICOM ファイルを Python にロードしようとしています。私は次のことをしました

ds=dicom.read_file(r"C:\Users\Z003SPFR.AD005\ML\GLCM AND SVM\data\NECT\1.IMA")
#    # store the raw image data
DicomImage = ds.pixel_array

得られた最高値は約 3047 で最低値は 0 だったので、これにより 12 ビットのように見える値が得られます。次のコードを使用しました。

leftMin = 0
leftMax = np.amax(DicomImage)

rightMin = 0
rightMax = 255



def translate(value, leftMin, leftMax, rightMin, rightMax):
    # Figure out how 'wide' each range is
    leftSpan = leftMax - leftMin
    rightSpan = rightMax - rightMin

    # Convert the left range into a 0-1 range (float)
    valueScaled = float(value - leftMin) / float(leftSpan)

    # Convert the 0-1 range into a value in the right range.
    return rightMin + (valueScaled * rightSpan)

#print(translate(value, leftMin, leftMax, rightMin, rightMax))



def int12_to_int8(img):
    img_array = []

    for eachRow in img:
        for eachPix in eachRow:
            img_array.append(translate(eachPix,leftMin, leftMax, rightMin, rightMax))
    img_array = np.array(img_array)
    img_array = img_array.reshape(512,512)  
    return img_array

correct_range_image = int12_to_int8(DicomImage)

これを行った後、配列 img_array が uint16 型であることに気付きました。uint8 にしたかったので、次の行を使用して uint8 に変換しました。

cvuint8 = cv2.convertScaleAbs(correct_range_image)

次に、結果の画像を表示しました。しかし、元の画像をうまく表現していない画像を受け取りました。元画像と変換画像の写真を掲載しています。元の画像をより適切に表現するには、どうすれば変換を改善できますか?? 私が表示していたコードは次のとおりです。

cv2.imwrite('1.jpeg', cvuint8 )
cv2.imshow('image',cvuint8 )[enter image description here][1]
cv2.waitKey(0)

画像

[1] 変換後の画像: https://i.stack.imgur.com/wdGCo.jpg [2] 元の画像: https://i.stack.imgur.com/JyfYI.jpg

4

3 に答える 3