如何在matlab中使用二维互相关函数xcorr2确定两个矩阵之间的位移

问题描述

我对 matlab 和医学成像非常陌生。对于一个项目,我需要完成一个脚本,该脚本使用两个矩阵“内核”和“搜索区域”,使用多帧心动周期的区块链方法来确定心脏室间隔的位移。 “内核”是原始帧图像的一部分,“搜索区域”是下一帧中内核周围的区域。我必须使用互相关来执行此操作,并且已经尝试了以下操作(将对所有帧重复此过程):

crossCor = xcorr2(searchArea,kernel);
[max_cc,imax] = max(abs(crossCor(:)));
[ypeak,xpeak] = ind2sub(size(crossCor),imax(1));
            
dispLat = ypeak-size(kernel,1)
dispax = xpeak-size(kernel,2)

代码是根据 xcorr2 文档编写的:https://nl.mathworks.com/help/signal/ref/xcorr2.html

代码确实有效,但结果不符合我的预期,我提供的脚本使用横向位移(x 位移)和轴向位移(y 位移)来创建跟踪帧:

frame 1

frame 2

frame 3

结果应该像在第 1 帧中一样显示隔膜的位移,但您可以看到,在第 2 帧和第 3 帧中,位移相差甚远。

我不知道我是否在正确的轨道上为提供的脚本提供正确的置换,但欢迎任何建议或朝着正确方向的推动!

备注: 我正在为一个介绍性医学成像课程这样做,用于绘制运动的蓝色网格是使用散斑跟踪创建的,但是我没有得到有关其工作原理的任何详细信息,这可能是预期的。 Matlab 脚本依赖于轴向(y)和横向(x)位移的正确输入,结果是错误的,所以我编写的代码可能(部分)错误。我在 stackoverflow 上发布这篇文章的主要目的是接收关于我编写的代码的反馈,因为我不知道我做错了什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)