--------------------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的相关内容可以参考相关资料。

3、霍夫变换(Hough Transform,HT)

霍夫变换是一种较常用的检测直线的方法。例如一条直线y=mx+c,在X,Y坐标系下图形为一条直线,而当变换到M,C坐标系时则图形为一个点。同理,X,Y坐标系下的一个点,变换到M,C坐标系则编程一条直线。这就是霍夫变换的核心思想,变量与参数互相交换一下,则:线→点,点→线

因此,当已知若干点,需要求出它们所在的直线时,便可通过霍夫变换,将所有点变换为霍夫空间里的线,因为共线点经过变换后会变成相交于一点的线,此时只需进行栅格化处理,通过voting的方式便可选出权值最大的点,这个点即代表了所求直线,只需将其变换回原坐标系即可。

3、级联霍夫变换(Cascaded Hough Transform,CHT)

在这里要引入paper里面的一个概念:CHT——级联霍夫变换。所谓级联,就是指连续做两次霍夫变换。前面提到霍夫变换的变换关系是:线→点,点→线,那做两次霍夫变换的结果就变成了:线→线,点→点。

要注意的是,霍夫变换有许多种参数化的方法。前面提到的霍夫变换的参数化方法是M-C(斜率-截距)。但在此篇paper里,作者将霍夫变换与平行坐标系结合,提出了另一种叫PClines的参数化方法(可参见作者的另一篇paper:《PClines – Line Detection Using Parallel Coordinates》)。

PClines的参数化方式如下图:

首先,第一次S变换将原X-Y坐标系下的点和直线变换到了平行坐标系(PC)下。可以看到X-Y坐标系中的共线的三个二维点对应到PC坐标系中的三条直线(Xp轴对应X坐标,Yp轴对应Y坐标,将Xp与Yp连接便形成一条直线)。

也可以看到X-Y坐标系下的三条直线在PC坐标系下变成了三个点(因为在X-Y坐标系下三条直线交于B点,因此,在PC坐标系下,它们均在B对应的直线上)。

接下来,为了量化方便和第二次S变换,在PC坐标系下建立一个笛卡尔坐标系U-V(绿色的坐标轴)。将所有的点和直线用U-V坐标表示,于是便有了S变换的表达式:线→点,点→线

这里使用了齐次坐标(x,y,w)。[]代表的一个点,()代表一条直线,d为平行坐标轴间距。

同理可得级联霍夫变换CHT的变换公式为:线→线,点→点

这时应该注意到,前面图中的直线都是斜率小于零的,这时就会发现一个问题,斜率大于零的直线在S空间是没办法表示的,如下图:

如图中的直线L2,在线上有B、C两个点,对应到S空间里是BxBy和CxCy两条直线,但它们的交点并不在S空间内。因此需要引入一个T空间,它只是位于-d的位置,并且方向与Y‘相反。有了T空间以后,L2便能在我们定义的T空间内表达了。因此,S和T空间可以定义X-Y坐标系下的所有直线。T变换的公式如下:

在清楚了S变换和T变换之后,CHT的公式便可得到,例如点→点的公式如下:

二、检测VanishingPoints:

原X-Y坐标系是一个无限大的空间,但经过CHT变换后,无限大的空间变到了一个有限的菱形空间里(diamond space)

并且笛卡尔坐标系X-Y和菱形空间的坐标系有如下的象限对应关系:

既然有上述的对应关系,那么X-Y坐标系下的经过三个象限的一条直线,经过CHT变换后到菱形空间后,就会成为三段折线:

并且这条折线可以由4个端点唯一确定,如下(()代表X-Y空间的一条直线,[ ]代表点):

sgn代表这个表达式的符号(1,-1),需要注意的是当a或b等于0时,表达式的乘积会等于0,这时令对应的sgn=1即可。

例如下面四条直线变换到菱形空间的情况,并且两个VP点也能在图中找出:

VP的坐标可以通过对整个菱形空间进行栅格化,因为VP点是同一方向的所有平行直线的交点,该点的权值最大,所以可以通过voting的方式找到VP点。如果有多个VP点,可以在找到一个之后,对所有该方向的线进行删除,再寻找下一个VP点,直到找完所求的所有VP点。得到VP点的坐标后,可以通过一个简单的公式即可得到原X-Y坐标系下VP点的坐标,公式如下(下表o代表original即原X-Y坐标系,下表d代表diamond即菱形空间坐标系):

三、总结:

以上就是通过基于PC坐标系参数化的CHT变换来寻找消失点的思路,这个方法神奇的地方就在于通过一个简单的线性变换就把原本无限大的空间变到了一个有限的空间。这就方便了我们量化整个空间,使用Voting的方式找出VP点。

这种方法对检测自然图像中的消失点效果不错,此外,对于已知有正交消失点的图像,作者还利用了这一先验知识来优化最终的检测结果。

这里有作者的paper原文以及matlab测试代码:paper&code

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

  1. OCR系列:CTPN 利用连接文本提案网络来检测自然图像中的文本

    译者按:  用于OCR领域的经典网络,CTPN是目前流传最广.影响最大的开源文本检测模型,可以检测水平或微斜的文本行.文本行可以被看成一个字符sequence,而不是一般物体检测中单个独立的目标.同一 ...

  2. R语言使用car包的outlierTest函数通过假设检验的方法检测回归模型中的异常值(outlier)、输出异常值对应的统计量、p值以及Bonferonnii校正p值

    R语言使用car包的outlierTest函数通过假设检验的方法检测回归模型中的异常值(outlier).输出异常值对应的统计量.p值以及Bonferonnii校正p值 目录

  3. 使用Python,OpenCV+OCR检测护照图像中的机器可读区域(MRZ Machine-Readable Zones)

    使用Python,OpenCV+OCR检测护照图像中的机器可读区域(MRZ Machine-Readable Zones) 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何只使用基本的图 ...

  4. 教你如何用Python检测出图像中的黄色?都在这里!

    首先,这里不搞黄色,只搞学习,希望大家好好学习,争取早日变成大佬,升职加薪.当上总经理.出任CEO.迎娶白富美.走上人生巅峰,想想是不是有点小激动. 等等,别跑偏了,接下来开始学习. 有时我们需要检测 ...

  5. 使用(SIFT特征KMeans聚类关键点训练SVM)实现自然图像中的logo商标识别和定位

    (本博客只记录方法,因为本人觉得这是机器学习特征工程中一种比较不错的做法) 上一篇博客中的方法:使用Py-OpenCV(SIFT关键点)实现自然图像中的logo商标识别和定位 当然也能提前欲知该方法的 ...

  6. swt text设置文本宽_应用笔画宽度变换(SWT)来检测自然场景中的文本

    Introduction: 应用背景:是盲人辅助系统,城市环境中的机器导航等计算机视觉系统应用的重要一步.获取文本能够为许多视觉任务提供上下文的线索,并且,图像检索算法的性能很大部分都依赖于对应的文本 ...

  7. linux 环境下安装oracle11g方法及安装过程中遇上的问题解决方法

     Oralce安装教程 1.先安装需要的依赖包 找到哪个没有安装,直接yum install XX,直到所有的都安装完成.注意,可能一个包安装了,再次执行检查,还是提示没有安装,那么就不需要管他们了, ...

  8. python特征点匹配_从特征点检测返回图像中的匹配值

    我使用的是我在教程中发现的一种特征点检测算法,如下所示.此代码的输出是在特征点匹配的两个图像之间绘制的线.在 我想知道的是:有没有一种方法可以返回一些值(浮点值)来确定这两个图像是否几乎相同.有点相似 ...

  9. python图片目标检测_图像中的目标检测(HOG)

    我想探测显微镜图像细胞内的物体.我有很多带注释的图片(app.有对象的图像为50000,没有对象的图像为500000).在 到目前为止,我尝试使用HOG提取特征,并使用logistic回归和Linea ...

最新文章

  1. 关注CIO 3.0:企业CIO的最佳时代到来
  2. bzoj1038 [ZJOI2008]瞭望塔
  3. 理解word2vec的训练过程
  4. java后台日期怎么去重,JAVA后台业务实现去重
  5. 答CSDN关于建模的系列问题
  6. 牛客练习赛89--牛牛防疫情
  7. Bash脚本教程之启动环境
  8. springboot 使用mybatis-plus 配置乐观锁
  9. 为什么红黑树查询快_面试被问“红黑树”,我一脸懵逼…
  10. Xshell评估过期处理方法(下载个人免费版本)
  11. 贝塞尔曲线-曲线拟合
  12. 免费在线pdf转word
  13. 【巨人的肩膀上制造世界】——5——Unity3D实用插件之Mouse Interaction-Object Highlight,快速构建模型的悬浮高亮!悬浮提示!悬浮动画!
  14. 崩坏三精准池python模拟
  15. EXCEL或者WPS excel 某列从某行开始以上或以下全选的操作 ,某行从某列开始的以后全选
  16. Xshell连接服务器
  17. 创新数据库技术 成就IOD愿景携DB2 25载创新 IBM推新“信息议程”
  18. (转)CPU/GPU/TPU/NPU傻傻分不清楚
  19. 关于class-c vco的基础理论(一)
  20. QT——从阿里云数据库中读取特定图片做成动图

热门文章

  1. Jquery3 常规选择器
  2. 《礼仪73》、《处事22计》、《心态24条》、《伤心50句》、《学会长大20》
  3. 【年度福利】聚宽2019年度评选+精选文章合集
  4. winform生成桌面快捷方式
  5. 基于JAVA的幼儿园家园共育平台设计与实现源码(毕设)
  6. kubernetes系列之《构建企业级CICD平台(四)》
  7. MicroPython 交互式解释器模式(REPL)
  8. 支付宝的收款码和收钱码究竟有什么区别?
  9. 盘古开源解析:2021年中国汽车行业运行情况总结及2022年汽车行业走势预测
  10. [Hadoop] 实际应用场景之 - 阿里