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

normxcorr2

정규화된 2차원 상호상관

구문

C = normxcorr2(template,A)

설명

예제

C = normxcorr2(template,A)는 행렬 templateA의 정규화된 상호상관을 계산합니다. 결과 행렬 C에는 상관 계수가 포함됩니다.

선택적으로 GPU를 사용하여 정규화된 상호상관 연산을 계산할 수 있습니다(Parallel Computing Toolbox™가 필요함). 자세한 내용은 Image Processing on a GPU 항목을 참조하십시오.

예제

모두 축소

두 개의 영상을 작업 공간으로 읽어 들인 후, normxcorr2에 사용할 수 있도록 회색조 영상으로 변환합니다. 영상을 나란히 표시합니다.

onion   = rgb2gray(imread('onion.png'));
peppers = rgb2gray(imread('peppers.png'));
imshowpair(peppers,onion,'montage')

상호상관을 수행하고, 결과를 곡면으로 표시합니다.

c = normxcorr2(onion,peppers);
figure, surf(c), shading flat

상호상관의 피크를 찾습니다.

[ypeak, xpeak] = find(c==max(c(:)));

normxcorr2가 추가하는 채우기를 설명합니다.

yoffSet = ypeak-size(onion,1);
xoffSet = xpeak-size(onion,2);

정합된 영역을 표시합니다.

figure
imshow(peppers);
imrect(gca, [xoffSet+1, yoffSet+1, size(onion,2), size(onion,1)]);

두 개의 영상을 gpuArray로 읽어 들입니다.

onion   = gpuArray(imread('onion.png'));
peppers = gpuArray(imread('peppers.png'));

컬러 영상을 2차원 회색조로 변환합니다. rgb2gray 함수는 gpuArray를 인수로 받습니다.

onion   = rgb2gray(onion);
peppers = rgb2gray(peppers);

상호상관을 수행하고, 결과를 곡면으로 표시합니다.

c = normxcorr2(onion,peppers);
figure, surf(c), shading flat

상호상관의 피크를 찾습니다.

[ypeak, xpeak] = find(c==max(c(:)));

normxcorr2가 추가하는 채우기를 설명합니다.

yoffSet = ypeak-size(onion,1);
xoffSet = xpeak-size(onion,2);

표시를 위해 데이터를 다시 CPU로 가져갑니다.

yoffSet = gather(ypeak-size(onion,1));
xoffSet = gather(xpeak-size(onion,2));

정합된 영역을 표시합니다.

figure
imshow(peppers);
imrect(gca, [xoffSet+1, yoffSet+1, size(onion,2), size(onion,1)]);

입력 인수

모두 축소

입력 형판으로, 숫자형 행렬로 지정됩니다. template의 값은 모두 같을 수 없습니다.

GPU를 사용하여 계산을 수행하려면 template을 숫자형 행렬을 포함하는 gpuArray로 지정하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

입력 영상으로, 숫자형 영상으로 지정됩니다. 정규화가 유의미하려면 A가 행렬 template보다 커야 합니다.

정규화된 상호상관 연산은 전체 형판 범위에서 A의 분산이 0인 영역에 대해서는 정의되지 않습니다. 이러한 영역에서는 normxcorr2가 상관 계수 0을 출력값 C에 할당합니다.

GPU를 사용하여 계산을 수행하려면 A를 숫자형 행렬을 포함하는 gpuArray로 지정하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

출력 인수

모두 축소

상관 계수로, [-1, 1] 범위의 값을 갖는 숫자형 행렬로 반환됩니다.

GPU를 사용하여 상관 계수를 계산하면 C는 [-1, 1] 범위의 값을 갖는 숫자형 행렬을 포함하는 gpuArray로 반환됩니다.

데이터형: double

알고리즘

normxcorr2는 다음과 같은 일반적인 절차를 사용합니다 [1], [2].

  1. 영상 크기에 따라, 공간 영역이나 주파수 영역에서 상호상관을 계산합니다.

  2. 누적 합계를 미리 계산하여 소계를 계산합니다. [1]

  3. 소계를 사용해 상호상관을 정규화하여 상관 계수를 얻습니다.

구현은 [1]의 다음 공식을 거의 그대로 따릅니다.

γ(u,v)=x,y[f(x,y)f¯u,v][t(xu,yv)t¯]{x,y[f(x,y)f¯u,v]2x,y[t(xu,yv)t¯]2}0.5

여기서

  • f는 영상입니다.

  • t¯는 형판의 평균입니다.

  • f¯u,v는 형판 아래 영역에서 f(x,y)의 평균입니다.

참고 문헌

[2] Haralick, Robert M., and Linda G. Shapiro, Computer and Robot Vision, Volume II, Addison-Wesley, 1992, pp. 316-317.

확장 기능

참고 항목

|

R2006a 이전에 개발됨