我有一个使用标准相机拍摄的图像,如下面的设置所示.我很幸运地假设我知道焦距(以毫米为单位),裁剪因子和传感器尺寸,并且可以假设投影中心是图像的中心 – 所以我知道它的位置以像素为单位和传感器.
我也知道相机的角度,参考蓝色平??面及其在平面上方的高度.相机仅在x轴上旋转,我们假设它与世界x轴平行.
现在我需要对图像进行度量校正,以便我可以以毫米为单位测量蓝色平面上的对象(2D).
我一直在尝试使用Matlab中的各种东西来实现这一点,但到目前为止,我的结果令人失望.显然这是一个平面平面单应性问题,我认为根据我知道传感器大小和其中像素数的事实,可以解决比例问题.
我已经尝试计算内在矩阵和外在矩阵,然后得到单应性:
f = 4.9; % Focal length is given as 4.9mm
sensor_size = [6.17 4.55]; % Again in mm
cc = sensor_size ./ 2;
% Calculate intrinsic matrix
KK = [f 0 cc(1);0 f cc(2); 0 0 1];
theta = 21.8; % Angle of camera above plane, degrees
Rc = xrotate(theta) % xrotate fcn given below
Tc = [0 0 60]'; % Camera is 60mm above plane along camera z-axis
H = KK * [R(:,1) R(:,2) Tc];
figure;imshow(imtransform(I,maketform('projective',H), 'Size', image_size))
function R = xrotate( theta )
R = [ 1 0 0;
0 cosd(theta) sind(theta);
0 -sind(theta) cosd(theta) ];
end
不幸的是,这给了我垃圾 – 给出了这张图片的全尺寸原件:
我从上面的代码中得到了这个结果:
鉴于它只有一个x轴旋转,我认为我们应该得到一个由于单应性的梯形形状,但我似乎没有.任何人都可以指出我在这里犯过的任何明显错误吗?