2013-07-10 1 views
1

어떤 이유로 imtransform 함수는 기본적으로 변환 부분을 무시합니다.어파인 변환을 적용하여 번역을 포함한 모든 변환에서 잘 작동합니까?

수동으로 설명한대로 XDataYData의 추가 공간을 추가하면 간단한 사례 (예 : 번역 만 가능) 만 처리합니다.

그래서 Matlab에서 모든 기능을 갖춘 affine transform을 적용하는 방법은 무엇입니까?

I = imread('cameraman.png'); 
imshow(I); 

% does not translate 
xform = [1 2 0; 2 1 0; 100 0 1]; 
T = maketform('affine',xform); 
I2 = imtransform(I,T); 
figure, imshow(I2) 


% translates but cuts some portion of an image 
xform = [1 2 0; 2 1 0; 100 0 1]; 
T = maketform('affine',xform); 
I2 = imtransform(I,T,'XData',[1 size(I,2)+xform(3,1)],'YData',[1 size(I,1)+xform(3,2)]); 
figure, imshow(I2) 
+0

나는 'axis'명령과 'XData'명령을 혼동한다고 생각합니다. [Steve의 Matlab 이미지 처리 블로그] (http://blogs.mathworks.com/steve/2006/07/07/spatial-transformations-translation-confusion/)에는 몇 가지 훌륭한 예가 있습니다. – Maurits

+0

기사는 나에게 새로운 것을 말하지 않는 것처럼 보입니다. 그리고 나는 아직도 모든 경우에 변형을 수행하는 방법을 이해하지 못합니다. 참고 : 화면에 이미지를 올바르게 그리지 않으려 고합니다. 올바르게 메모리에 변환하려고합니다. –

답변

0

그래서 이미지 범위에도 변형을 적용해야합니다.

이미지 코너가 좌표의 시작 부분에 없으면 어떻게해야 할지를 결정할 수 있습니다.

I = imread('cameraman.png'); 
XData=[1 size(I,2)]; 
YData=[1 size(I,1)]; 
imshow(I); 

xform = [1 2 0; 2 1 0; 100 0 1]; 

T = maketform('affine',xform); 
[XData1, YData1] = tformfwd(T, XData, YData); 
if XData1(1)>1 
    XData1(1)=1; 
end 
if YData1(1)>1 
    YData1(1)=1; 
end 
I2 = imtransform(I,T,'XData',XData1,'YData',YData1); 
figure, imshow(I2) 
관련 문제