最近使用OpenCV3.3.0构建了一个识别图形的C/C++项目,可以识别的图形如下:三角形、正方形、长方形、菱形、圆形、五边形、六边形、五角星以及由不同颜色的两个三角形构成的特殊矩形。
中值滤波
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)}
,其中,f(x,y),g(x,y)
分别为原始图像和处理后图像。W为二维模板,通常为3*3,5*5
区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。
中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。此外,中值滤波的算法比较简单,也易于用硬件实现。所以,中值滤波方法一经提出后,便在数字信号处理领得到重要的应用。
Canny边缘检测
Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出,就此拉开了Canny边缘检测算法的序幕。Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。
Canny边缘检测算法可以分为以下五个步骤:
(一)使用高斯滤波器,以平滑图像,滤除噪声
为了尽可能减少噪声对边缘检测结果的影响,所以必须滤除噪声以防止由噪声引起的错误检测。为了平滑图像,使用高斯滤波器与图像进行卷积,该步骤将平滑图像,以减少边缘检测器上明显的噪声影响。大小为(2k+1)x(2k+1)的高斯滤波器核的生成方程式由下式给出:
下面是一个sigma = 1.4
,尺寸为3*3
的高斯卷积核的例子(需要注意归一化):
若图像中一个3*3
的窗口为A,要滤波的像素点为e
,则经过高斯滤波之后,像素点e
的亮度值为: