Advertisement
Guest User

Untitled

a guest
Jul 9th, 2014
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. % limpa
  2. clear
  3.  
  4. % carrega e salva a imagem em uma variável
  5. imagem = imread('test3.png');
  6. imshow(imagem);
  7.  
  8. % recebe dados do usuário
  9. [x1,y1] = ginput(2); % L1: primeira reta do primeiro par de retas paralelas
  10. line(x1, y1, 'color', [.8, .0, .0], 'linewidth', 3); % desenha linha
  11. [x2,y2] = ginput(2); % L2: segunda reta do primeiro par de retas paralelas
  12. line(x2, y2, 'color', [.8, .0, .0], 'linewidth', 3); % desenha linha
  13. [x3,y3] = ginput(2); % L3: primeira reta do segundo par de retas paralelas
  14. line(x3, y3, 'color', [.0, .8, .0], 'linewidth', 3); % desenha linha
  15. [x4,y4] = ginput(2); % L4: segunda reta do segundo par de retas paralelas
  16. line(x4, y4, 'color', [.0, .8, .0], 'linewidth', 3); % desenha linha
  17. [x5,y5] = ginput(2);  % L5: primeira reta do primeiro par de retas ortogonais
  18. line(x5, y5, 'color', [.0, .0, .8], 'linewidth', 3); % desenha linha
  19. [x6,y6] = ginput(2);  % L6: segunda reta do primeiro par de retas ortogonais
  20. line(x6, y6, 'color', [.0, .0, .8], 'linewidth', 3); % desenha linha
  21. [x7,y7] = ginput(2);  % L7: primeira reta do segundo par de retas ortogonais
  22. line(x7, y7, 'color', [.0, .8, .8], 'linewidth', 3); % desenha linha
  23. [x8,y8] = ginput(2);  % L8: segunda reta do segundo par de retas ortogonais
  24. line(x8, y8, 'color', [.0, .8, .8], 'linewidth', 3); % desenha linha
  25.  
  26.  
  27. % acha equações das linhas
  28. A = [x1(1) y1(1) 1];
  29. B = [x1(2) y1(2) 1];
  30. L1 = cross(A,B);
  31. L1 = L1./norm(L1);
  32.  
  33. A = [x2(1) y2(1) 1];
  34. B = [x2(2) y2(2) 1];
  35. L2 = cross(A,B);
  36. L2 = L2./norm(L2);
  37.  
  38. A = [x3(1) y3(1) 1];
  39. B = [x3(2) y3(2) 1];
  40. L3 = cross(A,B);
  41. L3 = L3./norm(L3);
  42.  
  43.  
  44. A = [x4(1) y4(1) 1];
  45. B = [x4(2) y4(2) 1];
  46. L4 = cross(A,B);
  47. L4 = L4./norm(L4);
  48.  
  49. A = [x5(1) y5(1) 1];
  50. B = [x5(2) y5(2) 1];
  51. L5 = cross(A,B);
  52. L5 = L5./norm(L5);
  53.  
  54. A = [x6(1) y6(1) 1];
  55. B = [x6(2) y6(2) 1];
  56. L6 = cross(A,B);
  57. L6 = L6./norm(L6);
  58.  
  59. A = [x7(1) y7(1) 1];
  60. B = [x7(2) y7(2) 1];
  61. L7 = cross(A,B);
  62. L7 = L7./norm(L7);
  63.  
  64. A = [x8(1) y8(1) 1];
  65. B = [x8(2) y8(2) 1];
  66. L8 = cross(A,B);
  67. L8 = L8./norm(L8);
  68.  
  69. % Mapeia os pontos de intersecção das retas paralelas
  70. X1 = cross(L1, L2);
  71. X1 = X1./norm(X1);
  72. X2 = cross(L3, L4);
  73. X2 = X2./norm(X2);
  74.  
  75. % Encontra a linha do infinito
  76. LInf = cross(X1, X2);
  77.  
  78. % Faz a retificação afim através da linha do infinito
  79. H = [1 0 0; 0 1 0; LInf];
  80. transformação = projective2d(H');
  81. out = imwarp(imagem, transformação);
  82. imshow(out);
  83.  
  84. % Mapeia as linhas ortogonais para as respectivas novas linhas na imagem retificada
  85. L5eq = H'\L5';
  86. L5 = L5eq./norm(L5eq);
  87. L6eq = H'\L6';
  88. L6 = L6eq./norm(L6eq);
  89. L7eq = H'\L7';
  90. L7 = L7eq./norm(L7eq);
  91. L8eq = H'\L8';
  92. L8 = L8eq./norm(L8eq);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement