정규화 전처리 코드

base_img = dcm_file.pixel_array

min_val = np.min(base_img)
max_val = np.max(base_img)

print(min_val)
print(max_val)

# normalize image / z = (x - min) / (max - min)
copy_img = base_img.copy()
numerator = copy_img - min_val
denominator = max_val - min_val
z = numerator / denominator
z = (z * 255).astype(np.uint8)

# 이미지 저장
cv2.imwrite('base.png', base_img)
cv2.imwrite('normalize.png', z)

 

 

pydicom을 통한 사용한 비트 수 확인

dcm_file = pydicom.dcmread(dcm_file_path)
bits_allocated = dcm_file.BitsAllocated  # 할당된 비트 수
bits_stored = dcm_file.BitsStored  # 실제 사용된 비트 수
high_bit = dcm_file.HighBit  # 가장 높은 비트의 위치

print(bits_allocated, bits_stored, high_bit)

 

 

각 DICOM 이미지에 대한 설명

모든 값은 cv2.imwrite()함수로 저장하여 확인하였습니다.

왼쪽: pydicom.dcmread로 바로 읽은 값.

 

 

 

 

matplotlib의 imshow를 통해 이미지를 출력하면 정규화된것처럼 보이는데, 이는 자동으로 정규화가 수행되는 것 같다.

 

vmin과 vmax값을 8비트 수준으로 값을 책정하여 출력하면 다시 엄청 하얗게 나오지만, 파라미터를 주지않으면 자동으로 정규화를 수행한다. 

 

vmax값을 해당 이미지의 최대값으로 적용한 뒤, normalize해주면 다시 원래대로 출력이 된다.

 

 

 

 

참고자료