计算许多图像之间的差异

Calculating differences between many images

我的问题与图像配准有关。我在 .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 的注册?谢谢!

在您的代码中,您将每对图像进行两次比较:

  1. image_1 到 image_2 (pp == 1, qq == 2)
  2. image_2 到 image_1 (pp == 2, qq == 1)

这是故意的吗?如果你让第二个循环看起来像这样:

for qq = (pp+1):slidecount

你的计算量将减少 2 倍。而且你检查 qq ~= pp 的条件将不再需要。