문서

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

대비 향상 기법

이 예제에서는 영상을 향상시키기 위한 여러 가지 방법을 보여줍니다. 대비 향상에는 특히 imadjust, histeqadapthisteq의 세 가지 함수를 사용하는 것이 적절합니다. 이 예제에서는 이 세 함수를 사용하여 회색조 영상과 트루컬러 영상이 어떻게 향상되는지 비교해 보겠습니다.

1단계: 영상 불러오기

두 개의 회색조 영상 pout.tiftire.tif를 읽어 들입니다. 인덱스 RGB 영상 shadow.tif도 읽어 들입니다.

pout = imread('pout.tif');
tire = imread('tire.tif');
[X, map] = imread('shadow.tif');
shadow = ind2rgb(X,map); % convert to truecolor

2단계: 영상 크기 조정하기

쉽게 영상을 비교할 수 있도록, 너비가 같게 영상 크기를 조정합니다. 높이를 스케일링하여 종횡비를 유지합니다.

width = 210;
images = {pout, tire, shadow};

for k = 1:3
  dim = size(images{k});
  images{k} = imresize(images{k},[width*dim(1)/dim(2) width],'bicubic');
end

pout = images{1};
tire = images{2};
shadow = images{3};

3단계: 회색조 영상 향상시키기

디폴트 설정을 사용하여, 다음 세 가지 기법의 효과를 비교해 보겠습니다.

  • imadjust는 기본적으로 데이터의 1%가 입력 데이터의 낮은 명암과 높은 명암에서 포화(Saturate)되도록, 입력 명암 영상의 값을 새 값에 매핑하여 영상 대비를 증가시킵니다.

  • histeq는 히스토그램 평활화를 수행합니다. 이 함수는 출력 영상의 히스토그램이 지정된 히스토그램(기본적으로 균등분포)과 거의 일치하도록 명암 영상의 값을 변환하여 영상의 대비를 향상시킵니다.

  • adapthisteq는 대비 제한 적응 히스토그램 평활화(Contrast-limited Adaptive Histogram Equalization)를 수행합니다. histeq와 달리, 이 함수는 전체 영상이 아닌 작은 데이터 영역(타일)에 대해 동작합니다. 각 출력 영역의 히스토그램이 지정된 히스토그램(기본적으로 균등분포)과 거의 일치하도록 각 타일의 대비가 향상됩니다. 영상에 있을 수도 있는 잡음의 증폭을 방지하기 위해 대비 향상이 제한될 수 있습니다.

pout_imadjust = imadjust(pout);
pout_histeq = histeq(pout);
pout_adapthisteq = adapthisteq(pout);

imshow(pout);
title('Original');

figure, imshow(pout_imadjust);
title('Imadjust');

figure, imshow(pout_histeq);
title('Histeq');

figure, imshow(pout_adapthisteq);
title('Adapthisteq');

tire_imadjust = imadjust(tire);
tire_histeq = histeq(tire);
tire_adapthisteq = adapthisteq(tire);

figure, imshow(tire);
title('Original');

figure, imshow(tire_imadjust);
title('Imadjust');

figure, imshow(tire_histeq);
title('Histeq');

figure, imshow(tire_adapthisteq);
title('Adapthisteq');

imadjust는 타이어 영상에는 거의 영향을 주지 않았지만, 뿌루퉁한 표정의 아이 영상에는 큰 변화를 주었습니다. pout.tiftire.tif의 히스토그램을 플로팅한 결과, 첫 번째 영상의 픽셀 대부분이 히스토그램 가운데에 집중되어 있지만, tire.tif의 경우 값이 이미 최솟값 0과 최댓값 255 사이에 퍼져 있기 때문에 imadjust는 영상 대비 조정에 아무런 영향을 미치지 못한다는 것을 알 수 있습니다.

figure, imhist(pout), title('pout.tif');

figure, imhist(tire), title('tire.tif');

반면, 히스토그램 평활화는 두 영상에 모두 큰 변화를 줍니다. 이전에는 보이지 않던 특징 중 상당수가 노출되고, 특히 타이어의 파편 입자가 노출됩니다. 그러나 동시에, 대비가 향상됨으로써 두 영상의 여러 영역이 과포화(Over-Saturate)되었습니다. 타이어 중앙과 아이의 얼굴 일부와 재킷의 색이 바랜 것을 알 수 있습니다.

타이어 영상을 중점적으로 보면, 영상에서 바퀴 중심은 거의 같은 밝기로 유지하고, 다른 부분의 대비를 향상시키는 것이 더 나을 수 있습니다. 이렇게 하려면 영상의 다른 부분마다 변환을 다르게 적용해야 합니다. 이는 대비 제한 적응 히스토그램 평활화 기법(adapthisteq에서 구현됨)을 통해 가능합니다. 이 알고리즘은 영상의 부분을 분석하여 적합한 변환을 계산합니다. 또한 대비 향상 수준에 제한을 설정할 수도 있습니다. 그러면 histeq의 기본 히스토그램 평활화 방법에서 발생하는 과포화(Over-Saturation)를 방지할 수 있습니다. 이 기법은 이 예제에서 가장 정교한 기법입니다.

4단계: 컬러 영상 향상시키기

일반적으로 컬러 영상 대비를 향상시키는 방법은 영상 명암을 성분 중 하나로 갖는 컬러스페이스로 영상을 변환하는 것입니다. 이러한 컬러스페이스 중 하나는 L*a*b*입니다. 색 변환 함수를 사용하여 영상을 RGB에서 L*a*b* 컬러스페이스로 변환한 다음, 영상의 광도층 'L*'에 대해 작업합니다. 광도를 조정하면 픽셀의 명암은 영향을 받지만 원래 색이 유지됩니다.

srgb2lab = makecform('srgb2lab');
lab2srgb = makecform('lab2srgb');

shadow_lab = applycform(shadow, srgb2lab); % convert to L*a*b*

% the values of luminosity can span a range from 0 to 100; scale them
% to [0 1] range (appropriate for MATLAB(R) intensity images of class double) 
% before applying the three contrast enhancement techniques
max_luminosity = 100;
L = shadow_lab(:,:,1)/max_luminosity;

% replace the luminosity layer with the processed data and then convert
% the image back to the RGB colorspace
shadow_imadjust = shadow_lab;
shadow_imadjust(:,:,1) = imadjust(L)*max_luminosity;
shadow_imadjust = applycform(shadow_imadjust, lab2srgb);

shadow_histeq = shadow_lab;
shadow_histeq(:,:,1) = histeq(L)*max_luminosity;
shadow_histeq = applycform(shadow_histeq, lab2srgb);

shadow_adapthisteq = shadow_lab;
shadow_adapthisteq(:,:,1) = adapthisteq(L)*max_luminosity;
shadow_adapthisteq = applycform(shadow_adapthisteq, lab2srgb);

figure, imshow(shadow);
title('Original');

figure, imshow(shadow_imadjust);
title('Imadjust');

figure, imshow(shadow_histeq);
title('Histeq');

figure, imshow(shadow_adapthisteq);
title('Adapthisteq');

이 항목이 도움이 되었습니까?