Main Content

histeq

히스토그램 평활화를 사용하여 대비 향상

설명

예제

J = histeq(I)는 출력 회색조 영상 J의 히스토그램이 64개의 Bin을 갖고 거의 평평해지도록 회색조 영상 I를 변환합니다.

J = histeq(I,n)n개의 Bin을 갖는 출력 회색조 영상 J의 히스토그램이 거의 평평해지도록 회색조 영상 I를 변환합니다. nI의 이산 레벨 개수보다 훨씬 더 작으면 J의 히스토그램이 더 평평해집니다.

J = histeq(I,hgram)은 출력 회색조 영상 J의 히스토그램이 목표 히스토그램 hgram과 거의 일치하도록 회색조 영상 I를 변환합니다. 출력 영상의 히스토그램 Bin 개수는 length(hgram)과 같습니다.

newcmap = histeq(X,map)은 인덱스 영상 X의 회색 성분의 히스토그램이 거의 평평해지도록 컬러맵의 값을 변환합니다. 변환된 컬러맵은 newcmap입니다.

newcmap = histeq(X,map,hgram)은 인덱스 영상(X,newcmap)의 회색 성분의 히스토그램이 목표 히스토그램 hgram과 거의 일치하도록 인덱스 영상 X와 연결된 컬러맵을 변환합니다. histeq 함수는 변환된 컬러맵을 newcmap으로 반환합니다. length(hgram)size(map,1)과 같아야 합니다.

예제

[___,T] = histeq(___)는 입력 회색조 영상 또는 컬러맵의 회색 성분을 출력 회색조 영상 또는 컬러맵의 회색 성분에 매핑하는 변환 T도 반환합니다.

예제

모두 축소

영상을 작업 공간으로 읽어 들입니다.

I = imread('tire.tif');

히스토그램 평활화를 사용하여 명암 영상의 대비를 향상시킵니다.

J = histeq(I);

원본 영상과 조정된 영상을 표시합니다.

imshowpair(I,J,'montage')
axis off

Figure contains an axes object. The axes object contains an object of type image.

원본 영상의 히스토그램을 표시합니다.

figure
imhist(I,64)

Figure contains 2 axes objects. Axes object 1 contains an object of type stem. Axes object 2 contains 2 objects of type image, line.

처리된 영상의 히스토그램을 표시합니다.

figure
imhist(J,64)

Figure contains 2 axes objects. Axes object 1 contains an object of type stem. Axes object 2 contains 2 objects of type image, line.

3차원 데이터셋을 불러옵니다.

load mristack

히스토그램 평활화를 수행합니다.

enhanced = histeq(mristack);

원본 영상과 대비가 향상된 영상에 대한 데이터의 첫 번째 슬라이스를 표시합니다.

figure
subplot(1,2,1)
imshow(mristack(:,:,1))
title('Slice of Original Image')
subplot(1,2,2)
imshow(enhanced(:,:,1))
title('Slice of Enhanced Image')

Figure contains 2 axes objects. Axes object 1 with title Slice of Original Image contains an object of type image. Axes object 2 with title Slice of Enhanced Image contains an object of type image.

이 예제에서는 히스토그램 평활화의 변환 곡선을 플로팅하는 방법을 보여줍니다. histeq는 각 입력값에 대응하는 결과 출력값을 1×256 벡터로 반환할 수 있습니다. (이 벡터의 값은 입력 영상의 클래스와 관계없이 [0,1] 범위 내에 있습니다.) 이 데이터를 플로팅하여 변환 곡선을 얻을 수 있습니다.

영상을 작업 공간으로 읽어 들입니다.

I = imread('pout.tif');

histeq 함수로 히스토그램 평활화를 사용하여 대비를 조정합니다. 회색조 변환 반환 값 T를 지정합니다. T는 명암 영상 I의 회색 레벨을 J의 회색 레벨에 매핑하는 벡터입니다.

[J,T] = histeq(I);

변환 곡선을 플로팅합니다. 입력값이 대부분 0.3과 0.6 사이에 있고 출력값은 0과 1 사이에 균일하게 분포되어 있는 히스토그램이 변환 곡선에 어떻게 반영되는지 확인해 보십시오.

figure
plot((0:255)/255,T);

Figure contains an axes object. The axes object contains an object of type line.

입력 인수

모두 축소

회색조 영상으로, 임의 차원의 숫자형 배열로 지정됩니다.

데이터형: single | double | int16 | uint8 | uint16

목표 히스토그램으로, 숫자형 벡터로 지정됩니다. 목표 히스토그램은 적절한 범위의 명암 값에 걸쳐 균일한 간격으로 배치된 Bin을 가져야 합니다. 명암 값 범위는 입력 영상의 데이터형에 따라 달라집니다.

  • single형 또는 double형 — [0, 1].

  • uint8형 — [0, 255].

  • uint16형 — [0, 65535].

  • int16형 — [–32768, 32767].

기본적으로 목표 히스토그램의 Bin 개수는 length(hgram)과 같습니다.

예를 들면 다음과 같습니다.

hgram = 256:-4:4;
J = histeq(I,hgram);
위 구문은 목표 히스토그램을 Bin이 64개이고 평평하지 않으면서 선형 감소하는 함수(작은 픽셀 값을 더 강조함)로 지정합니다.

histeqsum(hgram) == numel(I)가 되도록 hgram을 자동으로 스케일링합니다. length(hgram)I의 이산 레벨 개수보다 훨씬 더 작으면 히스토그램 Jhgram과 더 잘 일치합니다.

데이터형: single | double

이산 회색 레벨 수로, 양의 정수로 지정됩니다.

데이터형: single | double

인덱스 영상으로, 임의 차원의 숫자형 배열로 지정됩니다. X의 값은 컬러맵 map의 요소에 대한 인덱스입니다.

데이터형: single | double | uint8 | uint16

인덱스 영상 X와 연결된 컬러맵으로, [0, 1] 범위의 값을 갖는 c×3 숫자형 행렬로 지정됩니다. 각 행은 컬러맵의 하나의 색에 대한 빨간색, 녹색, 파란색 성분을 지정하는, 요소를 3개 가진 RGB 3색입니다.

데이터형: double

출력 인수

모두 축소

변환된 회색조 영상으로, 입력 영상 I와 크기 및 클래스가 같은 숫자형 배열로 반환됩니다.

회색조 변환으로, 숫자형 벡터로 반환됩니다. 변환 T는 영상 I의 회색 레벨을 J의 회색 레벨에 매핑합니다.

데이터형: double

변환된 컬러맵으로, [0, 1] 범위의 값을 갖는 n×3 숫자형 행렬로 지정됩니다. 각 행은 컬러맵의 하나의 색에 대한 빨간색, 녹색, 파란색 성분을 지정하는, 요소를 3개 가진 RGB 3색입니다.

데이터형: double

알고리즘

목표 히스토그램 hgram을 제공하면, histeq는 다음을 최소화하는 회색조 변환 T를 선택합니다.

|c1(T(k))c0(k)|,

여기서 c0은 입력 영상 I의 누적 히스토그램이고, c1은 모든 명암 k에 대한 hgram의 누적합입니다. 이 최소화에는 다음 제약 조건이 적용됩니다.

  • T는 단조적이어야 함

  • c1(T(a))a에서의 히스토그램 도수 간 거리의 절반을 초과하여 c0(a)를 오버슈트할 수 없습니다.

histeq는 변환 b = T(a)를 사용하여 X(또는 컬러맵)의 회색 레벨을 새 값에 매핑합니다.

hgram을 지정하지 않으면 histeq는 다음과 같이 평평한 hgram을 생성한 다음,

hgram = ones(1,n)*prod(size(A))/n;

위에 나온 알고리즘을 적용합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장