2014-10-23 4 views
0

Я новичок в Matlab, и я пытаюсь сделать Регистрация Контрольного используя их руководство: http://www.mathworks.com/help/images/point-mapping.htmlКонтрольная точка регистрации с Matlab

В результате я получаю две картины один поверх другого, но они несогласованные, хотя они должны быть выровнены в соответствии с руководством.

Не могли бы вы рассказать мне, что я делаю неправильно?

спасибо.

Вот код:

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

Можете ли вы разместить изображения тоже, пожалуйста? –

+0

Попробуйте: B = imwarp (ResizedIreferenceImg, tform); Я не уверен, что это все, но стоит попробовать. –

ответ

1

Вы должны прочитать this example из Mathworks (Регистрация двух изображений с помощью пространственной привязки для повышения дисплея). Когда они впервые расскажут о том, как отобразить результат, они обращают внимание на ту же проблему:

Обратите внимание, что два изображения отображаются неправильно. Это происходит потому, что imshowpair предполагает, что изображения находятся в исходной системе координат по умолчанию.

Хотя вы не используете imshowpair для отображения, это также относится к вашему примеру, где вы накладываете два изображения. Вы предполагаете, что после обрезки и изменения размера ссылочного изображения, применяя преобразование к движущемуся изображению, они имеют одинаковую «начальную точку» - этот пиксель (1,1) в каждом изображении является одним и тем же местом. На практике они находятся в несколько разных системах координат, и вы должны учитывать это. Адаптация одного из своих решений в код будет выглядеть примерно так:

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

Это будет обрезать части движущегося изображения, которые находятся за пределами вашего фиксированного изображения после преобразования применяется.

+0

nkjt- Спасибо! Оно работает. – Yul

Смежные вопросы