hough直线检测,是我用的图像检测方法中的另一个重点。hough的原理说起来比较简单,就是对原图中每个点可能经过的直线都进行累积,这些累积是在一个“可能经过的直线模版”即“RT模版”上进行的,最后根据累积值找出最可能的几条直线即可。
我首先还是先阐述一下自己对matlab中直线检测步骤的理解。matlab中实现hough直线检测用到了3个函数,也是3个.m文件,分别是hough、houghpeaks和houghlines,三者也是按照这个顺序出场的。hough函数的作用就在于在一个离散的“RT空间”上完成累积,离散是一种无奈,因为我们的计算有限制,也是一种“相应的便利”,因为我们的原图像素也是离散的,RT空间的离散导致四舍五入,才可能对离散的原图像素点累积出可能的直线;接着是houghpeaks,它主要是用来找出“RT模版”上累积出来的几个最大的累积值,从而确定最可能是直线的直线,matlab在这个函数中加入了累似图像“非极大抑制”的处理,如果一个很小的RT区域中出现几个很大的累积点,那么会留下最大的一个舍弃其他的,这样的作用反应到原图上,我觉得应该是对较粗的直线起到防止反复检测出几条平行或者相交的直线来;最后是houghlines,这个函数得到真实的直线,它一方面考虑到“直线最小间隙”,另一方面考虑到“直线最小长度”。
观察matlab中hough的实现,我根据自己的应用需求作了一些小的修改。首先是在matlab的hough函数上,我觉得仅仅离散的“RT空间”还是不太够的,我们把“RT空间”离散的越细,检测的直线就越精确,也可以说在原图中“需要检测的区域就越狭窄”,这一点matlab的hough函数可以办到,但是过细的“RT空间”,可能造成检测到的直线不连续,本来连续的边缘直线,由于存在角度T上的微小波动,可能会被认为是不用的直线来检测,当然,houghpeaks中的“类非极大抑制”可以防止对这样的一条真实边缘直线检测多次,但归根结底,不利于最后houghlines函数连出真实的直线来。基于此,我对“RT空间”采用“双精度”的处理方法,首先就像matla