继上一章承诺,编写这一章。
原因呢,是这样,在实际项目中,用到canny很少,我总觉得它对于细节边缘过于详尽。
我们知道,opencv提供的算法库,内部核心算法是定死的,你只能通过调节参数来测试。
如果你不知道原理,估计这次调好了,下次又要花大半时间去。简直是无用功。
本着专研精神,还有也方便自己后续查阅,于是乎我就推出这一期的Canny算法。
啰嗦几句,其实要学好算法,看书是必不可少的,很多时候,度娘,必应,知乎啊等等,查不到你要的。
推荐一本好书《图像处理与计算机视觉算法及应用》(第2版)。
根据书本所述Canny的描述:
(1)读入要处理的图像I
(2)创建一个一维高斯掩模G用于对I进行卷积运算,这个高斯函数的标准偏差是传入边缘检测器的一个参数。
(3)在x和y方向上创建高斯函数的一阶导数作为一维掩模,分别称为Gx和Gy。s值和步骤(2)中使用的一样。
(4)沿着行利用G对图像I做卷积运算得到x分量图像Ix,沿着列利用G对图像I做卷积运算得到y分量图像Iy。
(5)利用Gx对Ix进行卷积运算得到Ix',即利用高斯函数的导数对I的x分量进行卷积,然后利用Gy对Iy进行卷积运算得到Iy'。
(6)结合x分量和y分量计算边缘响应的强度(即,是否希望在这一点看到结果)。每个像素(x,y)上的强度结果可以通过下式计算:
(7)非最大抑制。
(8)滞后双阈值化。
其中(1)~(6)的流程如下
(2&#x