我的问题是与图像注册有关的问题。我在.tif文件中有许多图像,大小相同。我将它们作为矩阵的3D数组读入MATLAB,并尝试仅通过旋转来优化这些图像中的特征的叠加。我尝试使用imabsdiff,但只是按照下面所示的方式进行操作。 简而言之,我输入的矢量包含与我的堆栈中的图像一样多的角度。我按每个相应的角度旋转堆叠中的每个图像。然后,我计算绝对差异([image1-image2] + [image2-image1]),这是imabsdiff所做的,但更快。为此,我使用两个循环变量并将每个单独的图像与整个堆栈进行比较,同时省略相同图像之间的比较。成本是所有图像之间差异的总和。
for oo = 1:slidecount
centered_stack(:,:,oo) = imrotate(centered_stack(:,:,oo),
angle_in(oo), 'bilinear', 'crop');
end
for pp = 1:slidecount
image1 = centered_stack(:,:,pp);
for qq = 1:slidecount
if qq ~= pp % only do this if comparing different images
image2 = centered_stack(:,:,qq);
cost_temp(qq) = sum(sum(abs(image1 - image2))) +
sum(sum(abs(image2 - image1)));
else
cost_temp(qq) = 0;
end
cost_temp = sum(cost_temp);
end
cost(pp) = cost_temp;
end
cost = sum(cost);
然后,这将作为优化过程的成本值。有人可以告诉我,如果有更快,可能是矢量化的方式来做这个或概念上完全不同的东西?对于许多图像,这种方法非常耗时。基于FFT的注册可能吗?谢谢!
答案 0 :(得分:0)
在您的代码中,您将每对图像进行两次比较:
这是打算吗?如果你做第二个循环看起来像这样:
for qq = (pp+1):slidecount
您将减少2倍的计算。此外,您不再需要检查qq ~= pp
的条件。