L-Spine AP의 예

X-Ray 로 부터 CR 이나 DR 영상을 횟득 하면, 이 역시 Film 대비 CMOS/CCD/TFT 센서 소자에 따라 실제 계조(빛은 아니지만, 빛 대신 방사선인 radiation 을 대체 해서 생각 하면 됩니다) 보다 못한 뭔가가 얻어지게 됩니다.

 각 제조사 마다 이를 보정하기 위한 온갖 기능들이 있기 마련 입니다만, 저는 이런 특정 회사에 특화된 형태가 아니라 일반적인 이론들에 따라 후처리를 하는 것에 관심을 가져 보았습니다.

 그래서 먼저 Erik Reinhard 교수님이 2005년에 이론을 수립 했던 Hight Dynamic Range 알고리즘을 연구해 보았습니다. 세상은 참 대단한 분들이 많기 마련 이지요.

논문의 일부 (PDF)

그리고 이 이론을 C++ 코드로 만들어 봅니다.  수식에 따라 for() 를 남발 하면서 이에 걸리는 시간 좀 줄여 보고자 OpenMP 도 남발 합니다. 덤으로 -mavx 로 Vector 가속도 해 봅니다 .. 어려워서 Free Image 라이브러리도 참조 해 봅니다.

그리고 이걸 console 에서 여러 옵션을 조정 해 가며 쓸 수 있도록 만듭니다.

제가 만들어 쓰는 librawprocessor 에 넣을 것이라 일단 라이브러리와 함께 알고리즘 구성 테스트를 합니다. 사용된 컴파일러는 MinGW-W64 32bit 6.2 를 사용 하였습니다. OpenMP 와 AVX 명령어로 최적화 되게 한 다음 구동과 결과를 비교 해 보기로 했습니다.

먼저 원래 raw 영상을 확인 해 보면, 0부터 1100 까지 약 14bits 를 사용 합니다.

 이 영상 정보를 256 단계로 압축하여 화면에 출력 하면 위 이미지 처럼 뭔가 알아 볼수 없는게 나옵니다. 게다가 사용된 raw 영상은 level 이 높은 값이 0 으로 치환 되는 반전(Inverting) 을 거치도록 되어 있습니다. 물론 MediRaw Viewer 에서는 자동으로 이를 처리 하도록 되어 있기에 확인 하는데 지장은 없었습니다. 실제 영상의 히스토그램을 보면 낮은 값 (실제 영상은 밝은 부분) 에 많은 정보가 몰려 있는게 확인이 됩니다. 이를 이제 HDR 로 고르게 펴 보도록 하겠습니다.

테스트를 위해 만든 rawr_hdr_1 은 기본으로 contrast 0.8 과 adaptation 을 1로, color correction 을 0.5 정도로 설정 해서 사용하고 있으며, 테스트 이미지는 gray level 들이 0 부터 11000 까지 입니다. (자동 인식함)

 이를 Reinhard 박사님의 알고리즘으로 구동 하면 ...

  기본으로 처리 하는 256 단계 압축으로 어느정도 정리가 되기 시작 합니다. 하지만 뭔가 아나토미 정보가 미흡 해 보입니다. 실제 Medi Raw Viewer 에서 각 레벨별로 잘라서 윈도우 레벨로 보면 각 아나토미를 손 쉽게 확인이 가능 하지만, 일단 전체 영상 균등을 위해 하는 실험이므로 Thresholding 을 배제 하였습니다.

 다음으론 후처리 알고리즘으로 쓰는 gamma 를 조정 해 보기로 합니다. 영상의 레벨이 역상 되어 있으므로 높게 주는 것이 아니라 ,낮춰서 처리 해야 하는걸 고려 합니다.


 별반 차이를 만들지 못하는걸 확인하고, 원래 하려는 계획대로 HDR 내의 인자만 수정해 보기로 합니다. 이번엔 adaptation 및 contrast 를 변경 합니다. (수정된 버젼은 최대 입력치가 다름)

이전 영상화 전체적인 분리가 확인되기 시작 합니다. 이로서 기본적인 HDR 처리의 시초가 가능 했다는 것을 인지 하고, 후처리를 강하게 줘 보도록 합니다.

의학적인 판단은 제가 할 수 없으나, 단순한 이 처리 만으로 척추 영역의 부각을 강하게 나타 낼 수 있음을 알 수 있었습니다. 다만, 후처리는 결국 Medi RAW Viewer 에서 구간별 잘라서 렌더링 하는 Threshold 와 동일한 역활을 하므로 필요 없는 기능이라 판단 됩니다.

 사용된 프로그램은 아래에 올립니다만, 영상은 제공 하지 않습니다.

raw_hdr_1_v20170120b.zip


 이 영상처리에 대한 기능은 librawprocessor 의 다음 버젼에 포함 될 것이며, 최신버젼은 항상 GitHub 의 다음 repository 에 갱신되고 있습니다.


Posted by 견족자K rageworx