老铁们,大家好,相信还有很多朋友对于了解Sobel算法的效果和的相关问题不太懂,没关系,今天就由我来为大家分享分享了解Sobel算法的效果以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
2、边缘响应效果好。
有一个核心定义如下:
索贝尔的核心
常用的铁芯有卧式和立式两种。
OpenCV提供API:
oid cv:Sobel(InputArray src,OutputArray dst,int ddepth,int dx,int dy,int ksize=3,double scale=1,double delta=0,int borderType=BORDER_DEFAULT) 参数解释
API参数说明
根据解释可知,当ksize=-1时,将使用核心: SCHARR的改进版本。
当使用ksize=1时,不会进行高斯平滑;其他情况先进行高斯平滑,再进行边缘计算。
研究过Canny算法,知道Sobel的水平和垂直边缘检测是该算法的步骤之一。
(Canny并不是一个简单的算子,而是一个具有一定复杂度的算法;将Canny算法与卷积算子混淆似乎很不专业)
在老版本的OpenCV中,已经固化了Canny算法来为Sobel进行梯度计算,缺乏灵活性。
新版本算法发生了变化:
新版Canny重载接口
这显示了OpenCV在API设计上的进步。由于新版本的API,您可以传递自定义的水平/垂直渐变并重用Canny算法流程。
测试Sobel算法,如下:
const Mat src=. int cn=src.channels();垫子; if (方向==’两者’) { Mat hMat, vMat; cv:Sobel(src, hMat, CV_16S, 1, 0, ksize, 尺度, 增量); cv:Sobel(src, vMat, CV_16S, 0, 1, ksize, 尺度, 增量); if (resType==’abs’) { hMat=abs(hMat); vMat=绝对值(vMat); }else if ( resType==’cast’) { hMat.convertTo(hMat, CV_8UC(cn)); vMat.convertTo(vMat, CV_8UC(cn)); } ret=hMat + vMat; } else if (direction==’horizontal’) { cv:Sobel(src, ret, CV_16S, 1, 0, ksize, scale, delta); if (resType==’abs’) ret=abs(ret); else if (resType==’cast’) ret.convertTo( ret, CV_8UC(cn)); } else if (direction==’vertical’) { cv:Sobel(src, ret, CV_16S, 0, 1, ksize, scale, delta); if (resType==’abs’) ret=abs(ret); else if (resType==’cast’) ret.convertTo(ret, CV_8UC(cn)); } cv:normalize(ret, _dst, 0, 255, cv:NORM_MINMAX, CV_8UC(cn));//归一化为0到255之间2个方向的绝对值之和
2方向投射
2个方向未处理
水平方向绝对值
设置ksize=7 以获得较强的边缘响应
一些算法使用CV_8U作为梯度的输出。这是错误的。最好使用CV_16S。
那么对结果的处理方式主要有三种:abs(绝对值)/cast(截断)/none(不处理)。
Sobel 是一个简单的算法,但是非常有用。它对于图像分析非常有用。
基于梯度分析的算法基本上都会使用类似于Sobel的水平和垂直算子进行分析。
例如:LSD算法、Canny算法等。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/116367.html
用户评论
╯念抹浅笑
Sobel算是在边缘检测中很常用的了,这篇文章解释得很透彻!以前我用这个算法的时候总是遇到小问题,看完这篇博客之后对它原理和实现方式有了更深刻的理解。
有12位网友表示赞同!
浮殇年华
我一直想学习边缘检测,不过总是感觉太抽象了。看了这篇文章后豁然开朗,Sobel算法的运作机制清晰易懂,甚至带图解,真的很有帮助!
有14位网友表示赞同!
此生一诺
确实啊,Sobel算法的效果很明显,尤其是对于那些连续变化边缘的图像,效果非常好。但这篇文章里没有提到一些优化技巧,比如不同核大小的影响之类的,希望作者可以补充一下。
有14位网友表示赞同!
巷雨优美回忆
这篇文章写的太简单了,我感觉完全不适合新手入门看。其实边缘检测的算法有很多种,不止Sobel一个,文章应该介绍一些其他算法和他们的优缺点对比才更全面。
有17位网友表示赞同!
闷骚闷出味道了
对图像处理不太了解的人可能会觉得这篇文章有点艰深,不过如果你想深入学习Sobel算法,它是不可多得的资源!
有11位网友表示赞同!
别在我面前犯贱
我一直以为边缘检测很简单,看了这篇文章才知道原来有很多细节需要把握。图片效果对比很清楚,可以有效地帮助理解Sobel 滤波的效果.
有11位网友表示赞同!
失心疯i
这个 Sobel算 法确实是一个很好的入门选择,它简单易用,但效果也不错。文章讲解清晰易懂,适合想要了解计算机视觉基础知识的人学习。
有5位网友表示赞同!
如梦初醒
我有点疑问,为什么Sobel算法在处理直线边缘时的效果不会像其他算法那样精准?作者能解释一下吗?
有20位网友表示赞同!
寻鱼水之欢
对图像边缘检测这个话题很有兴趣,这篇文章讲解得比较深入。对于想要进一步学习 Sobel 算法的读者来说很值得阅读!
有5位网友表示赞同!
熏染
文章中提到的 OpenCV 库应该也有一些更详细的例子和代码示例,对实际应用更有帮助。
有5位网友表示赞同!
一别经年
我觉得Sobel算 法对于一些图像处理任务来说效果并不是很好,例如检测圆形边缘时就比较弱势。希望后面可以介绍一些针对不同边缘类型的算法。
有9位网友表示赞同!
久爱不厌
这个看懂 Sobel 算法的效果真是个贴心的博文!我之前一直觉得这个算法很神奇,现在终于明白了它的原理了!
有15位网友表示赞同!
青瓷清茶倾城歌
Sobel算法的本质是利用梯度信息来识别边缘,这篇文章解释得非常详细。对于想要学习图像处理的人来说,这是一篇必读的文章!
有12位网友表示赞同!
最怕挣扎
看了这篇文章后,我对 Sobel 算法有了更深入的了解。不过还是希望能看到一些实实在在的代码实现,这样才能更好地理解它的应用。
有16位网友表示赞同!
可儿
文章讲解很不错,特别是对 Sobel 算法的效果分析真的很贴切。我之前也用过这个算法,现在更加肯定它在边缘检测中的优势了!
有8位网友表示赞同!
小清晰的声音
个人觉得这篇文章的内容偏深了一点,对于初学者来说可能有些难以理解。建议作者可以添加一些基础知识的铺垫。
有15位网友表示赞同!
酒笙倾凉
Sobel 算 法确实是一个很有趣的算法,但这篇文章写的有点过于简洁,我希望看到更多的理论分析和实例应用。
有13位网友表示赞同!