C# 基于OpenCv的视觉工作流-章13-边缘提取
本章目标:
一、边缘的数学原理;
二、Canny算子原理;
三、边缘提取;

一、边缘的数学原理;
图像的像素值范围通常为0-255,在一幅图像中,像素值从较小值快速变化到较大值的位置称为边缘。
这种快速变化的特征,可用数学中的导数进行求取,即X或Y方向上往前几个像素,对应的像素值差值很大,或说斜率很大、梯度很大。
如下图,用卷积核分别计算图像X和Y方向的梯度后,再计算综合梯度,取得边缘信息。



二、Canny算子原理;
算子内部原理有如下几步:
1、去噪;
2、计算梯度及梯度方向;



3、非极大值抑制NMS
上述计算得到所有的梯度后,再通过如下非极大值抑制,筛选出梯度值较大的作为边缘。


如上图,整体梯度方向上取梯度值最大的作为边缘。
4、滞后阈值
上一步筛选得出的边缘位置,还有可能是误判的,需要进行如下筛选。
1.设置梯度最大最小范围值;
2.大于最大的则为边缘;
3.小于最小的则不是边缘;
4.在范围之内的,则判断该点是否能与前边缘点相连(空间距离),能相连则为边缘,否则不是边缘;

三、边缘提取
OpenCv边缘提取可如下使用:
Mat matDst = new Mat();
Cv2.Canny(image, matDst, threshold1, threshold2);
其中:参数1,image为输入图像;
参数2,为输出图像;
参数3,为最小阈值;
参数4,为最大阈值;
说明:阈值设置为自定义,可结合实际图像逐步调整。
效果如下


参考链接
"VisionTool 探迹"免费视觉工具
下载地址:https://pan.baidu.com/s/11tktKOSnepLNIEqNbvnv6w?pwd=qv5i
"VisionTool Halcon"付费视觉工具
下载地址:https://pan.baidu.com/s/1v832KTonDYS6oNnWG2iZtQ?
对应系列文章"C# 基于Halcon的视觉工作流",欢迎前往阅读。
上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!