24小时热门版块排行榜    

查看: 2461  |  回复: 1

xiashaoyan

新虫 (正式写手)

[求助] normxcorr2函数求互相关量最大值位置的问题 已有1人参与

看了一些求基准图像和配准图像的互相关值的最大值对应的位置,我现在看到有两种方法,
第一种是使用MATLAB里面自带的normxcorr2函数,我看了mathwork网站上有一个求互相关量最大值位置的程序:(参考网址为:http://cn.mathworks.com/help/images/ref/normxcorr2.html)
onion   = rgb2gray(onion);
peppers = rgb2gray(peppers);
Perform cross-correlation and display result as surface.
c = normxcorr2(onion,peppers);
[ypeak, xpeak] = find(c==max(c();
yoffSet = ypeak-size(onion,1);
xoffSet = xpeak-size(onion,2);
可是有一个疑问是,为什么在求出互相关量最大值位置后还要减去基准图像的尺寸呢?(也即为什么yoffSet = ypeak-size(onion,1)??xoffSet = xpeak-size(onion,2);??)

第二种方法是采用两副图像进行互相关运算,计算的程序,我找了网上的程序为:
(参考网址为:http://www.mathworks.com/matlabc ... /dftregistration.m)

buf1ft是基准图像,buf2ft是配准待图像
    [m,n]=size(buf1ft);
    CC = ifft2(buf1ft.*conj(buf2ft));%先计算buf1ft与buf2ft共轭的傅立叶变换,得到互相关函数的频谱,然后求结果ifft2得到互相关函数
    %% 计算互相关函数的最大值及最大值的位置
    [max1,loc1] = max(CC);
    [max2,loc2] = max(max1);
    rloc=loc1(loc2);
    cloc=loc2;
    CCmax=CC(rloc,cloc);
    md2 = fix(m/2);
    nd2 = fix(n/2);

    if rloc > md2
        row_shift = rloc - m - 1;
    else
        row_shift = rloc - 1;
    end

    if cloc > nd2
        col_shift = cloc - n - 1;
    else
        col_shift = cloc - 1;
    end

这里我同样有一个,就是为什么求出互相关量最大值的位置后还要减去一个1或者减去1+基准图像的尺寸呢?(也即:row_shift = rloc - m - 1??或者row_shift = rloc - 1),还有为什么rloc > md2时,就得 row_shift = rloc - m - 1,其中的具体含义是什么呢?

两种方法计算最大值对应的位置,我思索了半天想,最后计算的结果表示什么意思,是表示配准时两幅图像的偏差量吗?
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cctt126

金虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
图像做类似卷积运算前,都要考虑边界问题。
图像的四边要‘扩充’配准图像的半径。
所以你得到的最大值位置是扩充后图像的坐标位置,需要减去扩充的尺寸。
在我用c写了图像卷积算法以后,才知道这个道理的。
数学,英语,编程,没一样让我省心。。。
2楼2015-03-10 10:36:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xiashaoyan 的主题更新
信息提示
请填处理意见