我使用Accord Framework来实现两个图像之间的互相关。我的目标是找出第二张图像与第一张图像相比移位了多少(多少像素,以及在哪个方向上)。
我使用的基本公式如下:
corr(a, b) = ifft(fft(a_and_zeros) * conj(fft(b_and_zeros)))
我将整个代码放在我的消息的末尾,一切都发生在Click事件上。我的初始图像存储在1024 * 768位图中。所以这是我采取的步骤:
ExpInit, ExpFinal, RefInit, RefFinal
),我想逐两关联(ExpInit
与ExpFinal
和{{1}与RefInit
)。这些裁剪的图像尺寸为1024 * 131。RefFinal
过滤器获取Grayscaling
。8bppIndexed PixelFormat
格式,并在4个图像上应用正向FFT。ComplexImage
和RefFinal
傅里叶变换ExpFinal
中的每个元素。ComplexImage
个对象之间执行逐元素乘法(ComplexImage
与ExpInit
,ExpFinal
与RefInit
}。RefFinal
个对象,其中包含我的图像尺寸(2048 * 512像素)现在我想回答我的初步问题:与ExpInit(分别为ExpFinal)相比,ExpFinal(分别为RefFinal)图像移位了多少(多少像素,以及在哪个方向)。在这里,我感到困惑。
我有说明我应该用我的Complex[,]
对象绘制一个3D图形,其中x和y是数组中的索引,z是索引处的值,并搜索最大值,但是我如何用复数做到这一点?我只使用Re部分吗?只有Im部分?幅度?还是我完全弄错了?
奖金问题:绘制此类图表的好库是什么?
以下是所描述的互相关的整个代码:
Complex[,]
非常感谢!
答案 0 :(得分:1)
结果的虚部应为0(或在数值误差范围内)。要找到移位,您应该查看相关振幅的峰值位置(但除非您有一个是另一个的负像,否则可能对应于相关性的实际部分的峰值。需要注意的主要事项是:由于您将两个图像都集中在一起,因此将引入额外的移位(图像大小的一半)。
至于查看图表,您可以非常轻松地将结果映射到灰度图像,并使用您喜欢的图像查看器进行查看。