计算许多图像之间的差异

时间:2017-10-23 11:02:51

标签: image matlab registration

我的问题是与图像注册有关的问题。我在.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 个答案:

答案 0 :(得分:0)

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

  1. image_1到image_2(pp == 1,qq == 2)
  2. image_2到image_1(pp == 2,qq == 1)
  3. 这是打算吗?如果你做第二个循环看起来像这样:

    for qq = (pp+1):slidecount
    

    您将减少2倍的计算。此外,您不再需要检查qq ~= pp的条件。