为实时定点实现准备实验室代码,我编写了以下函数
function res = imcorr(inIm,kernel)
% res=imfilter(inIm,kernel,'replicate'); %initial implementation
% res=imfilter(inIm,kernel); %same as we crop the result below
res=xcorr2(inIm,kernel); %faster, works with singles, but shifts result by 2 pixels
s=size(inIm);
rect=[fix((size(res,2)-s(2))/2), fix((size(res,1)-s(1))/2), s(2), s(1)];
res=imcrop(res,rect);
然后我使用https://gist.github.com/goulu/ba70175f870fdb2c25e3中的代码(从http://www.mathworks.com/help/signal/ref/xcorr2.html编辑)作为测试平台,注意到xcorr2和imfilter获得的结果在两个方向上都有2个像素的移位:
这是从哪里来的?
答案 0 :(得分:0)
不确切知道为什么但是它似乎是imfilter并且xcorr2以奇数/偶数图像大小进行不同的舍入,所以最后我可以通过这样的裁剪获得相同的结果:
rect=[(size(res,2)-s(2))/2+1.5 (size(res,1)-s(1))/2+1.5 s(2)-1-yoff s(1)-1-xoff];
res=imcrop(res,fix(rect));