围绕世界x轴旋转图像

时间:2017-02-21 21:59:17

标签: matlab image-processing rotation computer-vision

有这个坐标系:

这个占主导地位的垂直消失点: enter image description here

我想围绕x轴旋转图像,使消失点处于无穷远处。这意味着所有垂直线都是平行的。

我正在使用matlab。我发现使用LSD的线段和使用齐次坐标的消失点。我想使用角度轴表示,然后将其转换为旋转矩阵并将其传递给imwarp并获得旋转的图像。也很高兴知道如何旋转段。段为(x1,y1,x2,y2)。

上图中的图片:

同源坐标中的Vanishin点:

(x,y,z) = 1.0e+05 * [0.4992   -2.2012    0.0026]

笛卡儿坐标系中的Vanishin点(图中所示):

(x,y) = [190.1335 -838.3577]

问题:有了这个消失点,如何计算世界x轴上的旋转矩阵,如上所述?

1 个答案:

答案 0 :(得分:1)

如果你所做的只是旋转图像,使得从原点到消失点的矢量反而指向垂直,这是一个例子。

I = imread('cameraman.tif');
figure;imagesc(I);set(gcf,'colormap',gray);

vp=-[190.1335 -838.3577,0]; %3d version,just for cross-product use,-ve ?
y=[0,1,0]; %The vertical axis on the plot
u = cross(vp,y); %you know it's going to be the z-axis
theta = -acos(dot(vp/norm(vp),y)); %-ve ?
rotMat = vrrotvec2mat([u, theta]);
J=imwarp(I,affine2d (rotMat));
figure;imagesc(J);set(gcf,'colormap',gray); %tilted image

您可以使用否定和绘图,因为我不确定适用于您的情况的那些部分。负面影像可能来自于颠倒绘制,也可能来自世界旋转与相机坐标系,但我现在没有时间考虑它。

修改

如果您想围绕X轴旋转,这可能有用(改编自https://www.mathworks.com/matlabcentral/answers/113074-how-to-rotate-an-image-along-y-axis),或查看:Rotate image over X, Y and Z axis in Matlab

[rows, columns, numberOfColorChannels] = size(I);
newRows = rows * cos(theta);
rotatedImage = imresize(I, [newRows, columns]);