Canny(坎尼)边缘检测算法作为数字图像处理接触到的第一个效果较好的边缘检测算法,原理并不复杂。现有很多教程已经对其进行解释,在此不再赘述。
Canny边缘检测的主要过程为
图像平滑去噪
图像梯度(幅度与方向)的求取
边缘图像的非最大抑制(去除未边缘)
双阈值,使用高阈值图像非零点在低阈值图像中搜索,确定真实边缘位置
在过程中有两个参数会影响边缘效果
Canny算法包含许多可以调整的参数,它们将影响到算法的计算的时间与实效。
高斯滤波器的大小:第一步所用的平滑滤波器将会直接影响Canny算法的结果。较小的滤波器产生的模糊效果也较少,这样就可以检测较小、变化明显的细线。较大的滤波器产生的模糊效果也较多,将较大的一块图像区域涂成一个特定点的颜色值。这样带来的结果就是对于检测较大、平滑的边缘更加有用,例如彩虹的边缘。
阈值:使用两个阈值比使用一个阈值更加灵活,但是它还是有阈值存在的共性问题。设置的阈值过高,可能会漏掉重要信息;阈值过低,将会把枝节信息看得很重要。很难给出一个适用于所有图像的通用阈值。目前还没有一个经过验证的实现方法。百度百科
Matlab版代码
% author: BetaHu
% time: 2019/10/23 20:26
% Matlab version: R2016a
clc, clear;
close all;
tic;
img0 = double(imread('lena.jpg'));
gauss = [1 2 1; 2 4 2;1 2 1] / 16; % Gauss平滑模板
sobelx = [-1