2014-09-26 12 views
0

이미지와 표시된 직사각형에 투영 동조를 적용하려고합니다. 내 솔루션은 모든 아핀 변환에서 잘 작동하지만, 사영 변환의 경우 반복적으로 실행하면 시스템 오류가 계속 증가합니다. 그 이유를 알 수없는 것 같습니다. 빠른 대답은 정말 감사하겠습니다. 코드 및 스크린 샷을 살펴보십시오. 표시된 청색 사각형 감사matlab에서 imtransform을 사용하여 이미지와 표시된 직사각형에 호모 그래피 적용

clc;clear;close all; 
background_img_dir = 'D:/eyedeus/dataset/background_imgs/'; 
background_img = [background_img_dir '1.jpg']; 

img = imread('D:/workspace/dataset/taj.jpg'); 
rect = [236 333 325 226; 304 303 441 440]; 

K = eye(3); 
steps=pi/100; ang=-steps; 
rotaxis=[0.5,0.5,1]; rotaxis=rotaxis./norm(rotaxis); 

N = 100; 
for i = 1:N 

    ang=ang+steps; 
    R=makehgtform('axisrotate',rotaxis,ang); 
    H = K * R(1:3,1:3) * inv(K); 
    Hp = H'; 

    T = maketform('projective', Hp); 
    xsize=size(img,1); 
    ysize=size(img,2); 
    t_img = imtransform(img, T, 'UData',[0 1],'VData',[0 1]); 

    x = [rect ; ones(1,4)]; 
    pts = H * x; 
    pts = pts(1:2, :) ./ repmat(x(3,:),2,1); 

    clf; 
    imshow(t_img); hold on; 
    line([pts(1,:) pts(1,1)], [pts(2,:) pts(2,1)], 'color', 'b', 'LineWidth', 2); 
    pause(0.1); 
end 

첫번째 이미지 :

호모 그래피를 적용한 후 :

+0

알리, 당신은 x 축에 호모 그래피를 적용하는 방법을 어떤 생각을 가지고 있습니까? 내 [질문] (http://stackoverflow.com/questions/42264563/homographic-image-transformation-issue-for-sattelite-images)을 확인하십시오 – Addee

답변

1

은 호모 그래피의 분할 단계에 오타처럼 보인다.

pts = H * x; 
pts = pts(1:2, :) ./ repmat(x(3,:),2,1); 

당신이 원하는 : 대신이의

pts = H * x; 
pts = pts(1:2, :) ./ repmat(pts(3,:),2,1); 
+0

작동하지 않았다, 나는 거기에 homography 매트릭스에 대한 표기법의 차이점을 알고 imtransform, 나는 그것을 이해할 수 없다. 그것이 정규화가 작동하지 않는 이유이며, 결과는 정규화가 없으면 약간 떨어져서 표준화에서는 이상하다. –

+0

OK, 한 가지 더 생각해 보자. 변환하기 전에 이미지 좌표가 0과 1 사이에서 재조정되도록 UData와 VData를 지정하고있다. 변형하기 전에 이미지의 너비와 높이로 사각형 좌표를 재조정 한 다음 변환 후 다시 픽셀로 백업해야합니다. – Peter

+0

@Peter이 [질문]을 확인해 주시겠습니까 (http://stackoverflow.com/questions/42264563/homographic-image-transformation-issue-for-sattelite-images) – Addee