平行坐标系下采用CHT方法检测自然图像中的消失点(VanishingPoint)

--------------------20210826更新--------------------

code和paper链接:https://pan.baidu.com/s/13RyRu0rg7FhM94icXOc_yQ 
提取码:cacf

------------------------分割线---------------------------

最近做了一些跟VanishingPoint相关的工作,所以在这里记录一下。

主要参考的的是Markéta Dubská发表再BMVC上的一篇paper——《Real Projective Plane Mapping for Detection of Orthogonal Vanishing Points》。

这个方法通过一个巧妙而简单的线性变换将一个无限大的空间变为有限空间,这就让我们能对空间进行栅格化处理,采用类似于霍夫变换中的voting方法,通过投票的方式选出VanishingPoint,对于自然图像中的VanishingPoint有不错的检测效果。

一、一些概念:

1、消失点VanishingPoint

VP点(消失点)是指平行直线的交点。在物理空间中,平行的直线只能在无穷远处相交,因此VP点是无穷远处。但在透视图,两条平行线会很容易相交于一点,这一点即是VP点。如图,图中有三个消失点。而且这三个点分别对应立方体长、宽、高的消失点,我们已知立方体的长宽高是正交的,因此这三个点之间可以互相称为正交消失点。paper里最后使用了这个先验知识来校正。

2、平行坐标系(Parallel Coordinate,PC)

笛卡尔坐标系很难表示三维以上的空间。因此便出现了平行坐标系,当它需要表示N维空间中的一个点时,它需要有N条等间距的平行轴。第K条轴代表第K维,每一维上的坐标代表这个点在这一维上的投影,例如下图的一个四维空间,一个点由四段折线表示。更多关于PC的相关内容可以参考相关资料。

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
以下是MATLAB代码实现正四面体的透视投影: ```matlab % 定义正四面体的顶坐标 A = [0, 0, 1]; B = [0, 2, 0]; C = [2, 0, 0]; D = [0, 0, 0]; % 将四面体的四个面分别定义为三角形的三个顶 triangle1 = [A;B;C]; triangle2 = [A;B;D]; triangle3 = [B;C;D]; triangle4 = [C;D;A]; % 将四个三角形存储到一个矩阵 tetrahedron = [triangle1;triangle2;triangle3;triangle4]; % 定义透视投影的参数 focalLength = 5; vanishingPoint = [0,0]; % 定义屏幕的大小 screenWidth = 10; screenHeight = 10; % 定义屏幕与视之间的距离 screenDistance = 6; % 将三角形的每个顶进行透视投影 for i = 1:size(tetrahedron,1) vertex = tetrahedron(i,:); x = vertex(1); y = vertex(2); z = vertex(3); % 计算透视投影后的坐标 projectedX = (focalLength * x) / (z + screenDistance); projectedY = (focalLength * y) / (z + screenDistance); % 将屏幕上的坐标进行缩放 scaledX = (projectedX / screenWidth) * 2; scaledY = (projectedY / screenHeight) * 2; % 将屏幕上的坐标进行平移 translatedX = scaledX - 1 + vanishingPoint(1); translatedY = scaledY - 1 + vanishingPoint(2); % 将透视投影后的坐标存储到矩阵 tetrahedron(i,:) = [translatedX,translatedY,0]; end % 绘制透视投影后的四面体 figure; patch(tetrahedron(:,1),tetrahedron(:,2),'r'); axis([-5,5,-5,5]); axis equal; ``` 运行上述代码,将生成一个透视投影的正四面体。你可以根据需要修改代码的参数以及顶坐标,从而生成其他的透视投影图形。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值