대비 향상 기법
이 예제에서는 명암 값 매핑, 히스토그램 평활화, 대비 제한 적응 히스토그램 평활화를 사용하여 회색조 영상과 컬러 영상의 대비를 향상시키는 방법을 보여줍니다.
대비 향상에는 특히 다음 세 가지 함수를 사용하는 것이 적절합니다.
imadjust
는 기본적으로 데이터의 1%가 입력 데이터의 낮은 명암과 높은 명암에서 포화(Saturate)되도록, 입력 명암 영상의 값을 새 값에 매핑하여 영상 대비를 증가시킵니다.histeq
는 히스토그램 평활화를 수행합니다. 이 함수는 출력 영상의 히스토그램이 지정된 히스토그램(기본적으로 균등분포)과 거의 일치하도록 명암 영상의 값을 변환하여 영상의 대비를 향상시킵니다.adapthisteq
는 대비 제한 적응 히스토그램 평활화(Contrast-limited Adaptive Histogram Equalization)를 수행합니다.histeq
와 달리, 이 함수는 전체 영상이 아닌 작은 데이터 영역(타일)에 대해 동작합니다. 각 출력 영역의 히스토그램이 지정된 히스토그램(기본적으로 균등분포)과 거의 일치하도록 각 타일의 대비가 향상됩니다. 영상에 있을 수도 있는 잡음의 증폭을 방지하기 위해 대비 향상이 제한될 수 있습니다.
회색조 영상 향상시키기
대비가 낮은 회색조 영상을 작업 공간으로 읽어 들입니다. 디폴트 설정과 함께 3가지 대비 조정 기법을 사용하여 영상을 향상시킵니다.
pout = imread("pout.tif");
pout_imadjust = imadjust(pout);
pout_histeq = histeq(pout);
pout_adapthisteq = adapthisteq(pout);
원래 영상과 대비를 조정한 3개의 영상을 몽타주 형태로 표시합니다.
montage({pout,pout_imadjust,pout_histeq,pout_adapthisteq},"Size",[1 4]) title("Original Image and Enhanced Images using imadjust, histeq, and adapthisteq")
두 번째 회색조 영상을 작업 공간으로 읽어 들인 후 3가지 대비 조정 기법을 사용하여 영상을 향상시킵니다.
tire = imread("tire.tif");
tire_imadjust = imadjust(tire);
tire_histeq = histeq(tire);
tire_adapthisteq = adapthisteq(tire);
원래 영상과 대비를 조정한 3개의 영상을 몽타주 형태로 표시합니다.
montage({tire,tire_imadjust,tire_histeq,tire_adapthisteq},"Size",[1 4]) title("Original Image and Enhanced Images using " + ... "imadjust, histeq, and adapthisteq")
imadjust
는 타이어 영상에는 거의 영향을 주지 않았지만, 뿌루퉁한 표정의 아이 영상에는 큰 변화를 주었습니다. pout.tif
와 tire.tif
의 히스토그램을 플로팅한 결과, 첫 번째 영상의 픽셀 대부분이 히스토그램 가운데에 집중되어 있지만, tire.tif
의 경우 값이 이미 최솟값 0과 최댓값 255 사이에 퍼져 있기 때문에 imadjust
는 영상 대비 조정에 아무런 영향을 미치지 못한다는 것을 알 수 있습니다.
figure subplot(1,2,1) imhist(pout) title("Histogram of pout.tif") subplot(1,2,2) imhist(tire) title("Histogram of tire.tif");
반면, 히스토그램 평활화는 두 영상에 모두 큰 변화를 줍니다. 이전에는 보이지 않던 특징 중 상당수가 노출되고, 특히 타이어의 파편 입자가 노출됩니다. 그러나 동시에, 대비가 향상됨으로써 두 영상의 여러 영역이 과포화(Over-Saturate)되었습니다. 타이어 중앙과 아이의 얼굴 일부와 재킷의 색이 바랜 것을 알 수 있습니다.
타이어 영상을 중점적으로 보면, 영상에서 바퀴 중심은 거의 같은 밝기로 유지하고, 다른 부분의 대비를 향상시키는 것이 더 나을 수 있습니다. 이렇게 하려면 영상의 다른 부분마다 변환을 다르게 적용해야 합니다. 이는 대비 제한 적응 히스토그램 평활화 기법(adapthisteq
에서 구현됨)을 통해 가능합니다. 이 알고리즘은 영상의 부분을 분석하여 적합한 변환을 계산합니다. 또한 대비 향상 수준에 제한을 설정할 수도 있습니다. 그러면 histeq
의 기본 히스토그램 평활화 방법에서 발생하는 과포화(Over-Saturation)를 방지할 수 있습니다. 이 기법은 이 예제에서 가장 정교한 기법입니다.
컬러 영상 향상시키기
일반적으로 컬러 영상 대비를 향상시키는 방법은 영상 광도를 성분으로 갖는 컬러스페이스(예: L*a*b* 컬러스페이스)로 영상을 변환하는 것입니다. 광도층 'L*'에 대해서만 대비 조정이 수행된 다음, 영상은 다시 RGB 컬러스페이스로 변환됩니다. 광도를 조정하면 픽셀의 명암은 영향을 받지만 원래 색이 유지됩니다.
대비가 낮은 영상을 작업 공간으로 읽어 들입니다. 그런 다음, 영상을 RGB 컬러스페이스에서 L*a*b* 컬러스페이스로 변환합니다.
shadow = imread("lowlight_1.jpg");
shadow_lab = rgb2lab(shadow);
광도 값 범위는 0~100입니다. 값을 [0 1] 범위로 스케일링합니다. 이 범위는 데이터형이 double
인 영상의 예상 범위입니다.
max_luminosity = 100; L = shadow_lab(:,:,1)/max_luminosity;
광도 채널에서 3가지 유형의 대비 조정을 수행하고 a* 채널과 b* 채널은 변경하지 않은 채로 둡니다. 영상을 다시 RGB 컬러스페이스로 변환합니다.
shadow_imadjust = shadow_lab; shadow_imadjust(:,:,1) = imadjust(L)*max_luminosity; shadow_imadjust = lab2rgb(shadow_imadjust); shadow_histeq = shadow_lab; shadow_histeq(:,:,1) = histeq(L)*max_luminosity; shadow_histeq = lab2rgb(shadow_histeq); shadow_adapthisteq = shadow_lab; shadow_adapthisteq(:,:,1) = adapthisteq(L)*max_luminosity; shadow_adapthisteq = lab2rgb(shadow_adapthisteq);
원래 영상과 대비를 조정한 3개의 영상을 몽타주 형태로 표시합니다.
figure montage({shadow,shadow_imadjust,shadow_histeq,shadow_adapthisteq},"Size",[1 4]) title("Original Image and Enhanced Images using " + ... "imadjust, histeq, and adapthisteq")
참고 항목
imadjust
| histeq
| adapthisteq