计算文件夹中多个图像的唯一转换

时间:2014-04-08 11:55:17

标签: matlab alignment transformation

我目前正在制作一个对齐脚本,可以很好地对齐两张图像。通常,我得到的数据集包含超过50个单元格的图像。我通常根据荧光珠计算转换矩阵(T)。然而,该T-矩阵在非偏振细胞中引起极化,表明转化不是最佳的。因此我切换到另一个脚本,它根据细胞计算T矩阵而不是珠子。这个新的T矩阵几乎完美地对齐了一小部分细胞,但总有一部分图像对齐不太好。 我想继续对细胞进行对齐,因为这个脚本比珠子上的对齐更好。为了使每个图像具有最佳T矩阵,我想为每个图像对计算唯一的T矩阵。我在Matlab上不是很熟练,所以我能想到的解决方案不起作用。

您可以在下面找到当前脚本。它的功能是创建我想要对齐的图像的变量,并将它们分配给脚本中的im1和im2:

    function [T] = alim(im1, im2, Tstart)
    %ALIM Determines the transformation between the cameras.

    im3=im2;
    if (nargin>2)
    im2=imwarp(im2, Tstart,'OutputView',imref2d(size(im1)));
    end


    optimizer = registration.optimizer.RegularStepGradientDescent;
    optimizer.MaximumIterations=500;
    metric = registration.metric.MattesMutualInformation;

    T = imregtform(im2, im1, 'affine', optimizer, metric);

    if (nargin>2)
    T.T=Tstart.T*T.T;
    end

    figure;
    imshowpair(im1,imwarp(im3,T,'OutputView',imref2d(size(im1))));
    end

我尝试合并一个循环,按顺序导入文件夹中的所有图像,并将它们分配给im1和im2。然而,出现的问题是数据类型从uint16变为单元格,这不能用于这种类型的变换。在脚本中定义文件夹的位置' CAM1'和' CAM2'以及这些文件夹中的图像数量(' imnum')

    for i:imnum
    x{i}=imread(strcat(link,'CAM1\',num2str(i),'.tif'));
    y{i}=imread(strcat(link,'CAM2\',num2str(i),'.tif'));

我想了解您对此问题的看法,希望您可以就如何一次性导入文件夹中的图像并保留数据类型uint16提出一些建议。我总是愿意接受建议,所以如果你对如何解决我的问题有其他想法,如果你和我分享,我会很高兴。如果有任何不清楚的地方,请与我联系![/ p>

亲切的问候,

Reinier

1 个答案:

答案 0 :(得分:0)

x是一个单元格数组,其中每个元素x{i}都是一个uint16数组。单元格数组可以包含任何其他数据类型,包括更多单元格数组,并且是包装对象集合的好方法,尤其是当它们的大小和/或类型可能不同时。

在您的情况下,只需按照以下方式调用您的函数:

T = alim(x{i}, y{i}, tstart);

或者,更好的是,将输出矩阵放入类似的单元格中:

T{i} = alim(x{i}, y{i}, tstart);