目录
三、对梯度幅值进行 non-maximu depression
一、用Gaussian filter 平滑图像
RGB-> GRAY
边缘检测是基于对图像灰度差异运算实现的,所以如果输入的是RGB彩色图像,需要先进行灰度图的转换。
Gray = R*0.299 + G*0.587 + B*0.114
注意一般情况下opencv中彩色图像各分量的排列顺序是B、G、R。
1-D gaussian
2-D gaussian
计算gaussian 后还有一个归一化的过程。
二、用Sobel计算amplitude & angle
对于待检测边缘的图像I,分别在水平(X)方向和垂直方向(Y)方向求导,方法是分别图像I与卷积核Gx和Gy进行卷积,公式表述如下:
之后对求得的水平和垂直方向的梯度图像上的每一点执行:
或更为简单粗暴的:
G即为Sobel求得的梯度图像。
角度计算如下。
三、对梯度幅值进行 non-maximu depression
非极大值抑制则可以帮助将局部最大值之外的所有梯度值抑制为0,对梯度图像中每个像素进行非极大值抑制的算法是:
1) 将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。
2) 如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点, 否则该像素点将被抑制。
四、用双阈值算法检测和连接边缘
指定一个低阈值A,一个高阈值B,一般取B为图像整体灰度级分布的70%,且B为1.5到2倍大小的A;
灰度值大于B的,置为255,灰度值小于A的,置为0;
灰度值介于A和B之间的,考察改像素点临近的8像素是否有灰度值为255的,若没有255的,表示这是一个孤立的局部极大值点,予以排除,置为0;若有255的,表示这是一个跟其他边缘有“接壤”的可造之材,置为255,之后重复执行该步骤,直到考察完之后一个像素点。
五 、canny的c++实现
传送门:https://download.csdn.net/download/bluenapa/11831251
转载:https://blog.csdn.net/Bluenapa/article/details/101852645