2014-04-08 19 views
0

我目前正在研究一个对齐脚本,它很好地对齐两个图像。通常,我得到一个包含超过50个单元格图像的数据集。我通常计算基于荧光珠的转换矩阵(T)。然而,这种T矩阵在非极化的细胞中引起极化,表明转化不是最佳的。因此,我切换到另一个脚本,它基于单元格而不是磁珠计算T矩阵。这种新的T矩阵几乎完美地对准了一小部分细胞,但总是有一部分图像对齐不太好。 我想继续单元格的对齐,因为这个脚本比珠子上的对齐更好。为了使每幅图像具有最佳的T矩阵,我想计算每个图像对的唯一T矩阵。我对Matlab不熟练,所以我能想到的解决方案并不奏效。计算文件夹中多个图像的唯一转换

下面您可以找到当前脚本。它的功能是通过创建我要对齐并在脚本分配给IM 1和IM图像的变量:

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。我总是乐于提出建议,所以如果你对如何解决我的问题有其他想法,我会喜欢它,如果你与我分享他们。如果有什么不清楚的地方,请联系我提问!

随着亲切的问候,

Reinier

+0

'x'是一个单元阵列,每个元素'x {i}'是一个uint16数组。 – Peter

+0

因此,如果我将im1分配给x {i},它应该根据uint16数据进行转换? – user3493284

+0

我不知道,我不知道你是如何试图调用这个函数的。 'T = alim(x {i},y {i},tstart);'应该可以正常工作。 – Peter

回答

0

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

在你的情况下,只需要调用你的函数是这样的:

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

,或者甚至更好,把输出矩阵划分成相似的细胞:

T{i} = alim(x{i}, y{i}, tstart); 
相关问题