我看到写了几个代码,其中傅立叶光谱用这样的复共轭分割:
af = fftn(double(img1));
bf = fftn(double(img2));
cp = af .* conj(bf) ./ abs(af .* conj(bf));
在this script等。
这与处理复杂的分工有关吗?阅读有关./
运算符的文档,声明它处理复数。这是错的吗?:
af./bf
答案 0 :(得分:5)
表达式af./bf
和af.*conj(bf)./abs(bf).^2
在MATLAB中是完全等效的,如果这是你要问的内容。但是,在这个问题和你所展示的例子之间没有明确的联系。 abs(bf).^2
未出现在您示例中的分母中。
在您已经展示的代码中使用conj()
的唯一原因是因为它是时间倒置的傅里叶对偶
答案 1 :(得分:1)
你可以重写这个表达式,避免结合为
(af./bf)./abs(af./bf).
然而,表达式的给定形式具有以下优点:您可以通过在分母中添加一个小eps来对该除法进行去除,
(af.*conj(bf))./(1e-40+abs(af.*conj(bf)))
答案 2 :(得分:0)
考虑以下等效内容(约1e-15
内)代码:
cpX = exp(1i*(angle(af)-angle(bf)));
您可以使用复共轭(cp = af .* conj(bf) ./ abs(af .* conj(bf))
)或通过显式减去上述相位来计算归一化的交叉功率谱。
考虑到the FFT of a shifted impulse is a complex exponential,cpX
等式应该可以让您深入了解“相位相关”如何让您在两幅图像之间找到平移。反向FFT中峰值的位置给出了转换。