在 Matlab 中校正照片
Rectify a photo in Matlab
我正在处理一些道路照片,我必须转换拍摄的视角。我的目标是把马路变成一个广场。我的照片看起来与这一张相似:
但是,我需要道路的形状是正方形,而不是三角形或空中飞人,所以我可以继续努力。
我有照片中的俯仰角、偏航角和滚转角。
我正在尝试这个:
roll_x = 178.517332325424462;
pitch_y = -0.829084891331837937;
pan_z = -0.668910403057581759;
%% Transform perspective
img = imread('imageLoaded.png');
R_rot = R_z(pan_z)*R_y(pitch_y)*R_x(roll_x);
R_2d = [ R_rot(1,1) R_rot(1,2) 0;
R_rot(2,1) R_rot(2,2) 0;
0 0 1 ];
tform = affine2d(R_2d);
outputImage = imwarp(img,tform);
figure(1);
imshow(outputImage);
%% Matrix for Yaw-rotation about the Z-axis
function [R] = R_z(psi)
R = [cosd(psi) -sind(psi) 0;
sind(psi) cosd(psi) 0;
0 0 1];
end
%% Matrix for Pitch-rotation about the Y-axis
function [R] = R_y(theta)
R = [cosd(theta) 0 sind(theta);
0 1 0 ;
-sind(theta) 0 cosd(theta) ];
end
%% Matrix for Roll-rotation about the X-axis
function [R] = R_x(phi)
R = [1 0 0;
0 cosd(phi) -sind(phi);
0 sind(phi) cosd(phi)];
end
但我是在旋转图像,而不是变换图像。我怎样才能实现我的目标?
MATLAB 有 fitgeotrans
,一个可以从您手动定义的点中找到仿射变换的函数,您可以直接使用它或尝试确定您的变换有什么问题。
也就是说,仿射变换不是您所需要的。来自 this 的最后一页:
仿射变换可保持平行性,这是将梯形道路变换为正方形时无法做到的。你需要一个投影变换(单应性)。
请参阅 了解如何操作。
我正在处理一些道路照片,我必须转换拍摄的视角。我的目标是把马路变成一个广场。我的照片看起来与这一张相似:
但是,我需要道路的形状是正方形,而不是三角形或空中飞人,所以我可以继续努力。
我有照片中的俯仰角、偏航角和滚转角。
我正在尝试这个:
roll_x = 178.517332325424462;
pitch_y = -0.829084891331837937;
pan_z = -0.668910403057581759;
%% Transform perspective
img = imread('imageLoaded.png');
R_rot = R_z(pan_z)*R_y(pitch_y)*R_x(roll_x);
R_2d = [ R_rot(1,1) R_rot(1,2) 0;
R_rot(2,1) R_rot(2,2) 0;
0 0 1 ];
tform = affine2d(R_2d);
outputImage = imwarp(img,tform);
figure(1);
imshow(outputImage);
%% Matrix for Yaw-rotation about the Z-axis
function [R] = R_z(psi)
R = [cosd(psi) -sind(psi) 0;
sind(psi) cosd(psi) 0;
0 0 1];
end
%% Matrix for Pitch-rotation about the Y-axis
function [R] = R_y(theta)
R = [cosd(theta) 0 sind(theta);
0 1 0 ;
-sind(theta) 0 cosd(theta) ];
end
%% Matrix for Roll-rotation about the X-axis
function [R] = R_x(phi)
R = [1 0 0;
0 cosd(phi) -sind(phi);
0 sind(phi) cosd(phi)];
end
但我是在旋转图像,而不是变换图像。我怎样才能实现我的目标?
MATLAB 有 fitgeotrans
,一个可以从您手动定义的点中找到仿射变换的函数,您可以直接使用它或尝试确定您的变换有什么问题。
也就是说,仿射变换不是您所需要的。来自 this 的最后一页:
仿射变换可保持平行性,这是将梯形道路变换为正方形时无法做到的。你需要一个投影变换(单应性)。
请参阅