【发布时间】:2023-03-12 22:16:01
【问题描述】:
我有两个图像,例如P 和S,大小为 8192×200,我想计算它们之间的自定义“欧几里得距离”。目前我使用以下步骤:
-
将图像重塑为一对列和行向量:
Ip = Ip(:).'; Is = Is(:); -
计算一个度量矩阵
G,其条目由公式给出G(i,j) = 1/(2*pi*r*r) * exp((-d*d)/(2*r*r));其中
r是一个从0 到20 变化的全局参数,例如,d是像素i和像素j之间的距离。例如,如果像素i是(k,l)并且像素j是(k1,l1),那么d = sqrt((k-k1)^2 + (l-l1)^2);。像素 1 将是(1,1),像素 2 将是(1,2),依此类推。因此,矩阵G的大小将是1638400×1638400。 -
计算两个图像之间的最终(标量)欧几里得距离,使用:
ImEuDist = sqrt( (Ip-Is) * G * (Ip-Is).' );
我已经使用 mex 函数编写了一些代码,但是在给出结果之前需要很长时间(5-6 小时) - 请参阅 this SO question 获取代码和更多关于此的讨论。
请帮我优化一下;理想情况下,我希望它在几秒钟内运行。请注意,我对涉及 GPU 的解决方案不感兴趣。
【问题讨论】:
-
我还是觉得你应该给个图..画个简单点就行了
-
感谢您的编辑,但在第一步中,我将两个图像同时重塑为行向量或列向量,而不是一对行向量和列向量。我可以知道你背后的想法吗?
-
如果您还需要图片,请告诉我。我可以放一个简单的。
-
图像会很好,是的。鉴于您正在尝试做的事情,我认为您的第一步不是正确的方法。我的编辑确实稍微改变了它(您在转换为矢量之前翻转了两个图像)但这并不是特别有趣/与解决整个问题无关。我不确定您在评论中所说的“同时”是什么意思。
-
同时,我的意思是
Ip和Is都是行向量或列向量。排除Ip为行向量,Is为列向量的情况,反之亦然。