canny边缘检测
(1):高斯滤波(平滑图像消除噪点)
(2):使用算子计算梯度强度(计算像素点的梯度强度和方向)
(3):使用非极大值抑制(Non-Maximum Suppression),消除边缘检测带来的杂散响应(如:一张人脸检测出现多个框,此时采取概率最大的结果,1/0.99的那个,其余的全部清除掉)
(4):应用双阈值检测(Double-Threshold)来确定真实和潜在的边缘(滞后阈值处理)
(5):孤立弱边缘抑制,通过抑制独立的弱边缘最终完成边缘检测
解读:非极大值抑制
一个像素点周围有着8个方向,上、下、左、右,左上、左下、右上、右下
↖↑↗
←·→
↙↓↘
这八个方向一定是有着对应的像素点,而其他方向如37.72°则未必有实际的像素点,此时该方向的边界上的像素点为亚像素点,可采取插值法求得该亚像素点,也就是该亚像素点周围(垂直于该方向)两个像素点采取权重求值得出该亚像素点的值
canny算法到目前已经完整写完,其效果换算理想,但比起matlab自带的函数,还是相差甚远。总结有以下几个缺点:
(1) 高斯滤波中标准差的选取全靠认为的主管意识,没有一下合适的标准,因此导致滤波不太合适,存在大量的噪点。
(2) 双阈值检测中高低阈值的选取不太合适,没有一个合理的标准,造成局部边缘丢失,边缘断续,边缘不突出。
(3) 如何matlab自带函数相比,存在噪点过多,边缘丢失,边缘断续,边缘不突出等缺点。