在MATLAB (R2010a) 中注册两个图像(Image1 和 Image2)后,我似乎无法弄清楚如何正确翻译。该算法已经过测试并可以与其他程序一起使用。以下是一些相关的片段。
TForm = maketform('affine', Transform);
info = imfinfo('Image1.bmp');
Reg = imtransform(Image1, TForm,...
'XData', [1 (size(Image1,2)+Transform(3,1))],...
'YData', [1 (size(Image1,1)+Transform(3,2))],...
'FillValues', 255);
figure('Name', 'Reg'),...
imshow(Reg, 'InitialMagnification', 250);
imwrite(Reg, 'Reg.bmp', 'bmp');
hold on
H = imshow(Image2, gray(256));
set(H, 'AlphaData', 0.6)
当我将 Image1 注册到 Image1 时,不会发生这种情况,只有当我尝试将 Image1 注册到 Image2 时(或相反)。我用 C 编写的相同代码似乎工作正常。我相信这与我的imtransform
功能有关。
好吧,我相信它必须与应用转换的方式有关。我用 Image1 直接注册到 Image1 (绕质心旋转 15 度),它没有做正确的转换。转换输出为:
Transform =
0.9676 -0.2557 0
0.2596 0.9694 0
32.7217 -25.5110 1.0000
如果我将它输入到图像注册程序中,它就可以正常工作。这是我刚刚做的示例图像,
A = 原始图像,B = 旋转的原始图像,C = 变换的原始图像。
再次转换是正确的(使用 FMRIB's-FLIRT 注册软件测试)。MATLAB 在将其应用于图像时必须做一些不同的事情。