使用Matlab进行控制点注册

时间:2014-10-23 12:13:26

标签: matlab

我是Matlab的新手,我正在尝试使用他们的指南进行控制点注册:http://www.mathworks.com/help/images/point-mapping.html

我得到的结果是两个图片一个在另一个上面,但它们未对齐,尽管它们应该根据指南对齐。

你能告诉我我做错了什么吗?

谢谢。

以下是代码:

function [Y] =EBL

ReferenceImg=imread('GFI.jpg'); %This is the fixed image
CroppedImg=imcrop(ReferenceImg); %Crop fixed image
close %close the imcrop window
MovingImg = imread('GF.bmp'); %This is the moving picture

ResizedIReferenceImg= imresize(CroppedImg,[1000 1000]); %resize the fixed image
ResizedMovingImg= imresize(MovingImg,[1000 1000]);%resize the moving image


[input_points,base_points] = cpselect(ResizedMovingImg,ResizedIReferenceImg,'Wait',  true);%Estimate   transformation

tform = fitgeotrans(input_points,base_points,'projective');

B = imwarp(ResizedMovingImg,tform);

imshow(B)
hold on
t=imagesc(ResizedIReferenceImg);%Set transparency of fixed image
set(t,'AlphaData',0.5);

end

1 个答案:

答案 0 :(得分:1)

您需要阅读Mathworks中的this example(使用空间参考注册两个图像以增强显示)。当他们第一次谈论如何显示结果时,他们会注意到同样的问题:

  

注意两个图像如何显示错误注册。这是因为   imshowpair假设图像都是默认的内在函数   坐标系。

虽然您没有使用imshowpair进行展示,但这也适用于覆盖两张图片的示例。您假设在裁剪和调整参考图像大小后,然后对运动图像应用变换,它们具有相同的“起始点” - 每个图像中的像素(1,1)是相同的位置。在实践中,它们的坐标系略有不同,您必须考虑到这一点。将其中一个解决方案适用于您的代码看起来像这样:

Rfixed = imref2d(size(ResizedIReferenceImg));
B = imwarp(ResizedMovingImg,tform, 'OutputView',Rfixed);

这将在应用变换后剪切运动图像的部分,这些部分位于固定图像的边界之外。