Pay it Forward

[Python] raw file 열기 및 plot하기 본문

Code Snippet

[Python] raw file 열기 및 plot하기

minjoony 2022. 7. 15. 14:35
728x90

메디컬 이미징을 다루다보면 raw 형식의 파일을 심심찮게 마주할 수 있습니다.

 

이 때, 아래와 같은 코드를 사용하여 raw 파일을 열고 plot 및 png형식으로 save할 수 있습니다.

file = './raw_file.raw'

img = np.fromfile(file,dtype='uint16', sep="")

height = int(len(img)**0.5)
width = int(len(img)**0.5)

img = np.reshape(img, (height, width))

plt.imshow(img)
plt.imsave('./raw2png.png', img)

주의해야 할 점은, 아래와 같이 raw file을 load하면 1차원의 배열로 받아지기 때문에

2차원의 이미지로 reshape해주어야 한다는 것입니다.

raw file을 load하였을 때, 1차원 배열로 이루어져 load 된 것을 확인할 수 있습니다.

 

대개 raw file 길이의 square root 값이 이미지의 height, width값이 되게 되지만

아닐 경우에 file의 출처로부터 이미지 height, width값을 알아내야 합니다.

알아낼 도리가 없다면 1차원 배열의 길이를 인수분해해서 일일이 찾는 방법도 있습니다 :( 

1차원 배열의 sqrt값으로 height, width를 지정해준 후, plot한 결과입니다.

위의 예시는 X-ray raw file을 load하여 plot한 것인데,

X-ray의 경우 raw file에서의 bone과 soft tissue간의 contrast가 반대로 되어있습니다.

따라서 아래와 같이 간단한 pixel inversion을 통해 저희가 흔히 보던 X-ray 영상으로 plot할 수 있습니다.

vmin_value값 조절을 통해 bone이 비교적 잘보이도록 raw X-ray를 plot한 결과입니다.

 

 

아래는 X-ray raw file plot 코드 전문입니다.

file = './rawfile.raw'

img = np.fromfile(file,dtype='uint16', sep="")

height = int(len(img)**0.5)
width = int(len(img)**0.5)

img = np.reshape(img, (height, width))

img_max = img.max()
img_min = img.min()

img = (img - img_min) / (img_max - img_min)
img = 1 - img

vmin_value = 0.85
plt.imshow(img, cmap='gray', vmax=1, vmin=vmin_value)
plt.imsave('./raw2png.png', img, cmap='gray', vmax=1, vmin=vmin_value)
728x90
Comments