计算机视觉——canny边缘检测

视觉github:https://github.com/g107904/Computer_Vision_task
canny边缘检测分为:
1. 利用高斯梯度算子对图像进行滤波
2. 根据滤波结果计算每一像素点的边缘强度
3. 计算边缘方向
4. 检测局部最大值
5. 连接生成边缘

第一步:
计算图像𝐼在𝑥和𝑦方向的边缘梯度,并对梯度进行平滑I \bigotimes \frac{\partial}{\partial x} \bigotimes G,I \bigotimes \frac{\partial}{\partial y} \bigotimes G
根据结合律,有

    \[I_{x} = I \bigotimes \frac{\partial}{\partial x} \bigotimes G = I \bigotimes (\frac{\partial}{\partial x} \bigotimes G) = I \bigotimes \frac{\partial G}{\partial x}\]

    \[I_{y} = I \bigotimes \frac{\partial}{\partial y} \bigotimes G = I \bigotimes (\frac{\partial}{\partial y} \bigotimes G) = I \bigotimes \frac{\partial G}{\partial y}\]

可减轻计算负担。
第二步:
计算每一像素点的边缘强度

    \[I_{m} = \sqrt {{I_{x}}^{2}+{I_{y}}^{2}}\]

第三步:
计算方向
梯度方向 = arctan(\frac{I_{y}}{I_{x}})
边缘方向 = arctan(- \frac{I_{x}}{I_{y}})
第四步:
非极大值抑制,沿梯度方向找局部最大值,将非最大值的设为0
限制边缘的方向[0,\pi] \rightarrow (0,\frac{\pi}{4},\frac{\pi}{2},\frac{3 \pi}{4}),分配进四个方向
第五步:
进行边缘的链接,沿边缘方向搜索下一个边缘点
设定高阈值和低阈值,大于高阈值的一定是边缘点,小于低阈值的一定不是边缘点。
对于介于两者之间的,视是否可被边缘点链接而定。
边缘切线方向为梯度方向旋转90度而来,从边缘点出发,沿边缘切线方向寻找点。

发表评论

电子邮件地址不会被公开。 必填项已用*标注