2013-10-27 2 views
1

아래 이미지의 아핀 변환 행렬을 결정하는 데 문제가 있습니다.이미지의 2D 아핀 변환 확인

원본 이미지 :

enter image description here

아핀 변환 된 이미지 : 나는 아핀 t를 해결하기 위해 이미지에 2 점을 결정

enter image description here

변환 매트릭스,하지만 내가 얻은 결과는 원본을 원하는 것으로 변환하지 않습니다.

아래 코드이며, 먼저 행렬을 해결하고 변환 된 버전을 원래 변환하는 데 사용 enter image description here

않습니다 상기 코드 끝에

% Pixel values 
p1_aff = [164; 470]; 
p1_nor = [1; 512]; 
p2_aff = [470; 164]; 
p2_nor = [512; 1]; 
%p3_aff = [131;68]; 
%p3_nor = [166;61]; 
%p4_aff = [328;90]; 
%p4_nor = [456;59]; 

%Transformation matrix 
syms a11 a12 a21 a22; 
A = [a11 a12; a21 a22]; 

%Solving matrix 
[Sx, Sy, Sz, Sk] = solve(A*p1_nor==p1_aff, A*p2_nor==p2_aff); 
a11_d = double(Sx); 
a12_d = double(Sy); 
a21_d = double(Sz); 
a22_d = double(Sk); 

lena = imread('lena512.png'); 
new_aff = uint8(zeros(size(lena))); 

for i = 1:size(lena,1) 
    for j = 1:size(lena,2) 
     % Applying affine transformation 
     new_coord = [a11_d a12_d 0; a21_d a22_d 0; 0 0 1]*[i; j; 1]; 

     % Nearest-Neighbor interpolation for placing new pixels 
     if(round(new_coord(1)) > 0 && round(new_coord(2)) > 0) 
      new_aff(round(new_coord(1)),round(new_coord(2))) = lena(i,j); 
     end 
    end 
end 

imwrite(new_aff, 'lenaAffine_new.png'); 

,이 이미지를 얻을 아무도 여기서 무엇이 잘못된지 알겠습니까? 나는 미쳐 가고있다.

답변

4

두 개의 대응점은 아핀 변환을 결정하기에 충분하지 않습니다. 적어도 6 경기가 필요합니다 (실수하지 않은 경우).

사용 cpselect GUI는 해당 사항을 선택합니다 :

>> [input_points, base_points] = cpselect(oim2, oim1, 'Wait', true); 

은 그럼 당신은 사용하여 변환 할 수 있습니다

>> T = cp2tform(input_points, base_points, 'affine'); 
>> aim2 = tformarray(oim2, T, makeresampler('cubic','fill'), [2 1], [2 1], size(oim1(:,:,1)'), [], 0); 
+1

네 덕분에 많이. 저것은 일했다. 하지만 네가 나에게 설명 할 수 있니? 그런 도구를 사용하지 않기 때문에 수동으로 작업해야합니다. 내 코드에서 시도한 것은 점을 찾고 방정식을 만드는 것입니다. 아핀 행렬을 풀고 찾아낸 후에 이미지의 모든 픽셀에 변환을 적용합니다. –

+0

수동으로 어떤 부분을 수행해야합니까? 해당 지점을 찾는가? 변형을 추정해라. 이미지를 변형 시키시겠습니까? – Shai

+0

변환 행렬의 추정과 그 적용. –