前言:
书到用时方恨少
正文:
边缘提取技术一直都有接触,最通用的莫过于拉普拉斯,sobel几个算子,两个算子都可通过简单的模板运算进行,而现在比较好的一个边缘提取技术是canny,文章中我是用的canny函数参考:https://github.com/azikk/canny-with-CImg 不再另加描述。
需要注意的是↑这个算法计算过后的边缘特征图片的大小常和宽都-6,减去了中间sobel滤波器的大小。
使用边缘提取技术因为噪声、提取函数本身缺陷等原因,可能出现离散的不连续的点,而不是一条连贯的线,这时候我们可以选取hough变换找到这些不连贯的点组成的直线的方程,从而将其连贯的在画布上表示。
这两个技术单独说起来都比较简单,然而当我们真正拿到一张图片(手机拍摄)去做边缘提取的时候就需要不断思考。
首先给出其中一个例子:
这里拍的是一张平放在桌面的纸,我们的目标是提取出纸张的边缘。
一开始我直接使用canny直接提取边缘↓
可以看到canny对边缘提取信息的效果非常好,放大图片的话全部文字基本都是清晰的,然而也有很多噪声引入。
一开始我考虑在canny后使用形态学的腐蚀和膨胀解决噪声点,不过结果不太理想。以下是使用3x3的矩阵,如果矩阵覆盖的范围内特征点小于等于三,就做腐蚀,之后膨胀后的结果。
可以看到噪声大部分的除去都做到了,但是下面的边缘也被大面积腐蚀掉。如果图片边缘提取出来的结果比较稀疏稍,那么就可能四条边缘都被大比例的腐蚀掉,这样结果就十分糟糕。
所以后来我放弃了先提取边缘后使用形态学腐蚀和膨胀除去噪声的方式,我直接把彩色图片转灰度图,然后使用灰度图的去噪工具(中值、均值滤波)先去掉部分噪声,之后使用canny提取边缘。
这样效果就比较好。
这是另一张图片的两种方式处理的效果对比,可以看到基本没有噪声点而且保留了边缘。
hough变换是一个常用的直线、曲线提取技术,核心思想是两个空间平面的互相转换,他的特性网上诉说的有很多,具体可以参考详细说hough技术的另一篇博客:【待写】
然而处理图片的时候发现不论阈值如何选择,对于上面的图片,相对接近垂直的线条总是不能表示出来。经过调查发现这是因为我的canny有缺陷,较为垂直的线条只能出来零散的点,而偏横着的线就比较连贯。