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

histeq

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

구문

J = histeq(I,hgram)
J = histeq(I,n)
[J,T] = histeq(I)
newmap = histeq(X,map)
newmap = histeq(X,map,hgram)
[newmap,T] = histeq(X,___)

설명

예제

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

선택적으로 GPU를 사용하여 회색조 영상의 히스토그램 평활화를 수행할 수 있습니다(Parallel Computing Toolbox™가 필요함). 자세한 내용은 Image Processing on a GPU 항목을 참조하십시오.

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

이 예제에서는 동일한 히스토그램 평활화를 GPU에서 수행합니다.

I = gpuArray(imread('tire.tif'));
J = histeq(I);
figure
imshow(I)
figure
imshow(J)

입력 인수

모두 축소

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

GPU를 사용하여 히스토그램 평활화를 수행하려면 I를 임의 차원의 숫자형 배열을 포함하는 gpuArray로 지정하십시오.

데이터형: 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과 더 잘 일치합니다.

GPU를 사용하여 히스토그램 평활화를 수행할 경우 선택적으로 hgram을 숫자형 벡터를 포함하는 gpuArray로 지정할 수 있습니다.

데이터형: single | double

이산 회색 레벨 수로, 스칼라로 지정됩니다.

데이터형: single | double

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

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

컬러맵으로, cx3 배열로 지정됩니다. 각 행은 RGB 색 값을 지정합니다.

데이터형: double

출력 인수

모두 축소

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

GPU를 사용하여 히스토그램 평활화를 수행하면 J는 숫자형 배열을 포함하는 gpuArray로 반환됩니다.

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

GPU를 사용하여 히스토그램 평활화를 수행하면 T는 숫자형 벡터를 포함하는 gpuArray로 반환됩니다.

데이터형: double

변환된 컬러맵으로, nx3 배열로 지정됩니다. 각 행은 RGB 색 값을 지정합니다.

데이터형: 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 이전에 개발됨