我是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
答案 0 :(得分:1)
您需要阅读Mathworks中的this example(使用空间参考注册两个图像以增强显示)。当他们第一次谈论如何显示结果时,他们会注意到同样的问题:
注意两个图像如何显示错误注册。这是因为 imshowpair假设图像都是默认的内在函数 坐标系。
虽然您没有使用imshowpair
进行展示,但这也适用于覆盖两张图片的示例。您假设在裁剪和调整参考图像大小后,然后对运动图像应用变换,它们具有相同的“起始点” - 每个图像中的像素(1,1)是相同的位置。在实践中,它们的坐标系略有不同,您必须考虑到这一点。将其中一个解决方案适用于您的代码看起来像这样:
Rfixed = imref2d(size(ResizedIReferenceImg));
B = imwarp(ResizedMovingImg,tform, 'OutputView',Rfixed);
这将在应用变换后剪切运动图像的部分,这些部分位于固定图像的边界之外。