- 车牌检测算法:灰度图转换,边缘检测,形态学膨胀腐蚀。
- 彩色图像转换为灰度图像的计算公式:
gray=rx0.299+gx0.587+bx0.114
- 领域:
- 4邻域:假设有一点像素p坐标为(x, y),则它的4领域是(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)
- D邻域:假设有一点像素p坐标为(x, y), 则它的D领域是(x + 1, y + 1), ( x + 1, y - 1), (x - 1, y + 1),(x - 1, y - 1)
- 8邻域:将4领域与D领域的集合取并集,即表示为8邻域
- 边缘检测本质就是一种滤波算法,区别在于滤波器的选择,滤波的规则是完全一致的
- 几种基本边缘检测滤波器: Sobel、Prewitt、Roberts算子
-
reberts算子:
s_x=[ [1,0], [0,-1] ] s_y=[ [0,-1], [1,0] ]
-
prewitt算子:
s_x=[ [-1,0,1], [-1,0,1], [-1,0,1] ] ] s_y=[ [1,1,1], [0,0,0], [-1,-1,-1]]
-
sobel算法:
s_x=[ [-1,0,1], [-2,0,2], [-1,0,1] ] s_y=[ [1,2,1], [0,0,0], [-1,-2,-1] ] K=[ [a_0,a_1,a_2], [a_7,[i,j],a_3], [a_6,a_5,a_4] ]
-
s_x,s_y分别表示对于x轴,y轴的边缘检测算子,从s_x算子结构可以很清楚发现,这个滤波器是计算当前像素点右边与左边8连通像素灰度值的差值。
-
-
- 直接用基本的边缘算子如Sobel求得的边缘图存在很多问题,如噪声污染没有被排除、边缘线太过于粗宽等
- 较为先进的边缘检测算子:
- canny算子
- 具体步骤:
- 高斯(Gaussian)滤波:高斯滤波目前是最为流行的去噪滤波算法,原理为根据待滤波的像素点及其邻域点的灰度值按照高斯公式生成的参数规则进行加权平均,这样可以有效滤去理想图像中叠加的高频噪声。
- 计算梯度图像与角度图像:角度图像的作用:为非极大值抑制的方向提供指导。
- 对梯度图像进行非极大值抑制:
- 从上一步得到的梯度图像存在边缘粗宽、弱边缘干扰等众多问题。可以使用非极大值抑制来寻找像素点局部最大值,将非极大值所对应的灰度值置0。可以剔除一大部分非边缘的像素点。
- 具体:假设C表示为当前非极大值抑制的点
- 第一步先判断C灰度值在8值邻域内是否最大
- 如是则继续检查图中梯度方向交点dTmp1,dTmp2值是否大于C
- 如C点大于dTmp1,dTmp2点的灰度值,则认定C点为极大值点,置为1
- 因此最后生成的图像应为一副二值图像,边缘理想状态下都为单像素边缘。
- 需要注意的是梯度方向交点并不一定落在8领域所在8个点的位置,因此dTmp1和dTmp2实际应用中是使用相邻两个点的双线性插值所形成的灰度值。
- 使用双阈值进行边缘连接:
- 由上得到的还是存在很多伪边缘。
- 具体思路为选取两个阈值,将小于低阈值的点认为是假边缘置0,将大于高阈值的点认为是强边缘置1,介于中间的像素点需进行进一步的检查。
- 根据高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8邻域点中寻找满足低阈值的点,再根据此点收集新的边缘,直到整个图像闭合
- 由于寻找弱边缘点的计算代价过大,因为使用的是递归思维,且所找寻到的弱边缘点为数不多,因此实际应用中常常舍去这一步骤,取而代之的是基于形态学的边缘细化操作
- 实际应用中Canny一般是边缘检测的首选项
- 具体步骤:
- 基于二阶导数法的Marr-Hildreth边缘检测算子,具体思路:
- 高斯滤波:基本所有边缘检测算法前面都会加一个高斯滤波来去除高频噪声
- 计算拉普拉斯(Laplacian)二阶导:最满足图像处理需求的算子是滤波器拉普拉斯高斯(Log)算子:
[ [1,1,1], [1,-8,1], [1,1,1] ]
- 计算零交叉(Zero crossing):由于零交叉点意味着至少两个相邻的像素点的像素值异号,一共有四种需要检测的情况:左右,上下,两个对角,其中如果滤波后的图像g(x, y)的任意像素p处的四种情况其中一组的差值的绝对值超过了设定的阈值,则可以称p为一个零交叉像素
- canny算子
- 一些总结:
- 滤波器的大小应该是奇数,这样才有一个中心点可进行赋值操作,常见的滤波器或卷积核(Conv kernel)有3*3、5*5等,因此也有了半径的概念,例如5*5的卷积核的半径为2
- 滤波器中所有元素之和应为0,这一限制条件是保证滤波前后图像总体灰度值不变
- Roberts算子、Sobel算子、Prewitt算子运算速率高,对噪声也有一定抑制作用,但检测出的边缘质量不高,如边缘较粗、定位不准、间断点多
- Canny算子不容易受噪声干扰,得到的边缘精细且准确,缺点就是运算代价较高,运行于实时图像处理较困难,适用于高精度要求的应用
- Marr-Hildreth算子边缘检测效果相对较优,但对于噪声比较敏感(因其二阶运算的性质)