Matlab

1

에서 gradient()를 사용하지 않고 Gaussian (dx, dy)의 1 차 미분을 계산하면 fspecial('gaussian', 4, 1)으로 가우스를 시작했으며 gradient()은 1 차 미분을 얻는 데 매우 편리합니다. 어쨌든 gradient()을 사용하지 않고 1 차 도함수를 계산할 수 있습니까? 교과서의 첫 번째 단계로서 도시 된 바와 같이, I는 해리스 코너 검출기를 만들기 위해 사용하고 :Matlab

  • 계산 가우시안
  • 유도체와 원본 이미지를 컨벌루션함으로써 화상 1 × 및 Iy로의 수평 및 수직 유도체

답변

1

해리스 ​​코너 탐지기를 구현하려는 경우 gradient을 전혀 사용하지 않아야합니다. 전통적으로 수행되는 것은 파생 커널을 사용하고이 커널로 이미지를 필터링하는 것입니다. 다양한 커널을 사용할 수는 있지만 실제로 수행 한 결과는 수평 커널 dx[-1 0 1]이고 수직 커널 dy이이 전치 코드 인 [-1;0;1] 인 중심 차이를 사용하는 것입니다. 따라서 이러한 커널을 사용하여 이미지를 필터링하면 IxIy이 있습니다. 이미지의 가로 및 세로 그라디언트는 Ix.^2, Iy.^2 및 해당 제품 Ix.*Iy의 제곱 된 버전에서 가우스 평활을 수행합니다. . 그런 다음 상관 행렬을 형성하고 행렬식을 찾고 흔적을 결정합니다. 이 임계 값을 초과하는 값은 잠재적 인 모서리입니다. 파생 이미지에서 가우시안 평활화를 수행하면 원래의 질문에서 가우시안 파생어로 원래 이미지가 효과적으로 필터링됩니다.

는 따라서 이미지가 im에 저장되어 가정하면, 당신은 단순히 수행

im = double(im); % Cast to double precision to ensure accuracy 
dx = [-1 0 1]; 
dy = dx.'; 
Ix = conv2(im, dx, 'same'); 
Iy = conv2(im, dy, 'same'); 

당신은 IxIy 마침내 해리스 코너 응답을 계산하기 위해 사용합니다. 이미지 처리 도구 상자가있는 경우 대신 imfilter을 사용하는 것이 좋습니다. 더 빠르며 Intel Integrated Performance Primitives (IIPP)을 사용합니다. 제대로 계산하는 방법에 대한 자세한 내용은 여기에서 이전 게시물을 확인하십시오. Trying to find/understand correct implementation of Harris Corners