我是Matlab的新手,我正在尝试使用他们的指南进行控制点注册:http://www.mathworks.com/help/images/point-mapping.html
它工作正常,直到'fitgeotrans'函数我得到一个错误说: '未定义的函数或变量'input_points'。
我阅读了Matlab帮助,之前的“cpselect”函数给了我两个nX2数组,其坐标在两个数组变量“input_points”和“base_points”中保存(通过'cpselect'函数)。所以,我真的不明白为什么下一个函数不能“看到”它们并认为它们是“未定义的”。
我的代码附在下面。谢谢你的帮助。
function [Y] =EBL
ReferenceImg=imread('GFI.jpg'); %This is the fixed image
CroppedImg=imcrop(ReferenceImg); %Crop the image
close %close the imcrop window
ResizedIReferenceImg= imresize(CroppedImg,[1000 1000]); %re-size the fixed image
t=imagesc(ResizedIReferenceImg); %Set transparency of fixed image
set(t,'AlphaData',0.5);
hold on
I = imread('GF.bmp'); %This is the moving picture
MovingImg = imrotate(I,-5,'nearest','crop'); % Rotate the moving picture cw
ResizedMovingImg= imresize(MovingImg,[1000 1000]); %re-size the moving image
h=imagesc(ResizedMovingImg); %Set transparency of moving image
set(h,'AlphaData',0.6);
close
cpselect(ResizedMovingImg,ResizedIReferenceImg); %Alignment
tform = fitgeotrans(input_points,base_points,'NonreflectiveSimilarity');
答案 0 :(得分:3)
问题是,默认情况下,MATLAB在等待cpselect
之前没有等待你完成。因此,在您有机会实际选择任何点之前,它只会从cpselect
移至tform
,此时input_points
尚不存在。您必须设置Wait
参数,这样做也会影响输出。在Wait
开启的情况下,请拨打cpselect
这样的内容:
[input_points,base_points] = cpselect(MovingImg,ReferenceImg,'Wait', true);
以这种方式调用cpselect
时,您将没有“导出点到工作区”选项。相反,当input_points,base_points
窗口关闭时,选定的点将输出到变量cpselect
。