图像处理算法中,边缘检测是非常有用的。。对提取目标区域特别有用。所研究的数字图像的边缘,一般都在像素值较为剧烈的区域 。利用边缘检测算法可在大幅降低图像的同时,保留图像的系统结构特性。因此边缘检测算子也可在视为一种“滤波算法”,只保留了图像的边缘结构信息。
边缘检测算子一般分为三个步骤。
1.滤波
边缘检测的算法主要是基于图像强度的一阶和二阶导数(也就对应了不同的检测算子),但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波,即采用离散化的高斯函数产生一组归一化的高斯核,然后基于高斯核函数对图像灰度矩阵的每一点进行加权求和。
2. 增强
增强边缘的基础是确定图像各店邻域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定。
3. 检测
经过增强的图像,往往邻域中有很多的梯度值比较大,而在特定的应用中,这些点并不是要找的边缘点,所以采用某种方法来对这些点进行取舍。实际工程中,常用的方法是通过阈值化方法来检测。
根据所基于的图像强度的一阶和二阶导数的不同(卷积核的不同)以及上述三个步骤采取的方法不同,也就产生了多种效果不同的滤波算法。现在对这些算法进行总结。
Opencv内支持的主要有sobel,scarry,canny,laplacian,Prewitt, Marr-Hildresh,后面我单独用个博客来介绍原理和具体实现。