好,我们来捋一下canny:
1,高斯平滑,去除噪点
2,求梯度幅值图像,梯度角图像,并增强边缘(有人使用sobel)
3,找出边缘上的穿越点,并进行非极大值抑制(其中用到直方图统计)
4 ,使用染色算法,连接强弱边缘,搞定
今天分享一下用sobel增强边缘的心得体会:(参考前面的sobel博文)
同一幅图:
很是吃惊吧,怎么会出现这种情况?边缘不明显!
其实关键不在算子,在图像的黑白上,因为黑色靠近0值方向,白色靠近255方向,因为算子是做差运算,所以黑白不同结果就有很大不同,sobel纵向算子也存在这样的问题,那如何解决呢?
就像我们的线图像抓线工具,sobel算子会要求你,选择图像从白到黑,还是从黑到白?可以尝试解决!不难吧!
另一种解决的办法,参考前面的sobel水平处理的代码:
a = image0[n - w * 4 - 4] + 2 * image0[n - w * 4] + image0[n - w * 4 + 4] -
image0[n + w * 4 - 4] - 2 * image0[n + w * 4] - image0[n + w * 4 + 4];
a = a>255 ? 255 : a;
//生成边缘扫描结果
if (a>30)//this is a threshold value,image have only two gray.255 and 0.
{.......}else{......}
其实这个a值是有问题的,比如,当a=-356,那么就不能体现出效果来,这就是你感觉到灰度认方向的根本原因,如果a>30更改为math.abs(a)>30,则问题迎刃而解,这就是找不到问题怪图像,怪算子!人的问题怪房屋风水不好,人生不顺利怪老婆,说到底,这是人性的逃避,人性的逃避没什么不好,避灾趋利嘛!所以这样的人生会很有意思,常常会有一些出乎预料神奇的想法,但若能从自身找原因,从事情的根本问题找原因,这样的人生会更有意思!
关键还要有行动,去思考,尝试!