2016-04-21 5 views
1

У меня есть функция, которая направлена ​​на обрезку части изображения и нахождение этой обрезанной части внутри основного изображения с помощью conv2. Насколько я знаю при использовании свертки на двух матрицах, координаты максимального значения в приведенной матрице показывают аналогичные части матриц. Моя проблема в том, что x, y не показывает истинную точку.Как использовать свертку для поиска тех же частей изображения

function [ ] = cropImage(fileIn) 
    im=imread(fileIn); 
    [r c]=size(im); 
    crop=imcrop(im); 

    figure(1) 
    subplot(2,2,1) 
    imshow(im) 
    subplot(2,2,2) 
    imshow(crop) 

    d=conv2(double(im),double(crop); 
    m=max(d); 
    m=max(m); 
    [x y]=find(d==m);  

    subplot(2,2,4) 
    imshow(d) 

    text(x,y,'+','color','r');  
    subplot(2,2,1) 

    text(x,y,'+','color','r');  
end 

ответ

7

свертка не будут давать вам точку с максимальным сходством, то корреляции (или кросс-корреляции) является оператором вы ищете. Более concretelly, MATLAB уже реализованы normalized cross-correlation для 2d изображений:

>>> c = normxcorr2(template, image); 
>>> [ypeak, xpeak] = find(c==max(c(:))); 

Корреляция вращение 180 градусов оператора свертки.

+1

Я хотел бы указать, что 'ypeak' и' xpeak' являются точками расположения шаблона, сопоставленного с ** верхним левым углом ** ограничивающего прямоугольника, а не центра, как мы бы интуитивно как. – rayryeng

+0

@rayryeng Отредактировано для исправления этого, спасибо! было довольно ясно в моем сознании, а не в том, что это хорошо вложило его в слова: P –

+0

Нет проблем вообще :) У вас был мой голос. – rayryeng