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

histeq

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

설명

예제

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

선택적으로 GPU를 사용하여(Parallel Computing Toolbox™ 필요) 회색조 영상의 히스토그램 평활화를 수행할 수 있습니다.

J = histeq(I,n)은 회색조 영상 I를 변환하여, n개의 이산 회색 레벨을 갖는 회색조 영상을 J로 반환합니다. J의 히스토그램이 거의 평평해지도록, 대략 같은 수의 픽셀이 Jn개 레벨 각각에 매핑됩니다. nI의 이산 레벨 개수보다 훨씬 더 작으면 J의 히스토그램이 더 평평해집니다.

[J,T] = histeq(I)는 영상 I의 회색 레벨을 J의 회색 레벨에 매핑하는 회색조 변환 T를 반환합니다.

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

이 구문은 GPU에서 지원되지 않습니다.

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

이 구문은 GPU에서 지원되지 않습니다.

[newmap,T] = histeq(X,___)map의 회색 성분을 newmap의 회색 성분에 매핑하는 회색조 변환 T를 반환합니다.

이 구문은 GPU에서 지원되지 않습니다.

예제

모두 축소

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

I = imread('tire.tif');

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

J = histeq(I);

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

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

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

figure
imhist(I,64)

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

figure
imhist(J,64)

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')

입력 인수

모두 축소

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

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

대상 히스토그램으로, 숫자형 벡터로 지정됩니다. hgram은 다음과 같은 적절한 범위의 명암 값에 대해 균일한 간격으로 배치된 Bin을 갖습니다.

  • double형 또는 single형 클래스 영상의 경우 [0, 1]

  • uint8형 클래스 영상의 경우 [0, 255]

  • uint16형 클래스 영상의 경우 [0, 65535]

  • int16형 클래스 영상의 경우 [-32768, 32767]

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

데이터형: single | double

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

데이터형: single | double

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

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

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

데이터형: double

출력 인수

모두 축소

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

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

데이터형: double

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

데이터형: double

알고리즘

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

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

여기서 c0A의 누적 히스토그램이고, 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 이전에 개발됨