2016-04-21 66 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