sobel算子里的阈值是怎么设的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sobel算子里的阈值是怎么设的相关的知识,希望对你有一定的参考价值。

我做的C程序是sobel算子实现数字图像的边缘提取,结果都实现了,但是里面sobel的阈值还是自己设定的,没有一点依据,完全凭感觉,希望高手教我一下这个阈值到底是怎么设定

sobel算子的阈值指的是其各像素经过偏导计算后得到的grad=fx+fy,对grad进行阈值分割得到边缘的。
由于在sobel算子中加入了权值所以所得的结果会导致所得边缘较宽。
fx=abs(Data[i+1][j-1]+2*Data[i+1][j]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i-1][j]-Data[i-1][j+1]);
fy=abs(Data[i-1][j+1]+2*Data[i][j+1]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i][j-1]-Data[i+1][j-1]);
上面两个即为加权计算的偏导计算公式。
sobel函数如下:
/***************************************************************
sobel算子
***************************************************************/

void sobel(unsigned char Data[][256],unsigned char xData[])

int i,j;
int fx,fy,grad;
for(i=1;i<255;i++)
for(j=1;j<255;j++)

fx=abs(Data[i+1][j-1]+2*Data[i+1][j]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i-1][j]-Data[i-1][j+1]);
fy=abs(Data[i-1][j+1]+2*Data[i][j+1]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i][j-1]-Data[i+1][j-1]);
grad=fx+fy;
if(grad>100)
xData[i*256+j]=255;
else
xData[i*256+j]=0;

return;

上面的值100即为阈值。
这是本人完成数字图像处理实验的程序,能够运行。
参考技术A 可以自己设。
因为图像处理里经常是,没有很通用的方法。
一类图像用一种处理顺序+处理阈值有好的效果。
换了一类图像效果就不好了。

Sobel出来的应该是灰度图。你是后面再进行二值化。
可以用大津法(OTUS)对Sobel的结果图进行二值化。
还可以用大津法求出阈值后,做点变动,比如-5 什么的。

如果是写文章,那么就要把各种理论扯进去。
如果是做项目,就不管理论了。只要这一类图像效果好,
不要管阈值的设置有没有道理。

要保证这一类图有同样的照明和焦距。否则边界强度
会不同就讨厌了。本回答被提问者采纳

以上是关于sobel算子里的阈值是怎么设的的主要内容,如果未能解决你的问题,请参考以下文章

图像边缘检测基于matlab自适应阈值的八方向和四方向sobel图像边缘检测含Matlab源码 2058期

图像边缘检测基于matlab自适应阈值的八方向和四方向sobel图像边缘检测含Matlab源码 2058期

sobel和canny

sobel边缘检测优缺点与canny算子的优缺点?

Opencv-图像处理理论与实例操作

解决OpenCV滑动条变换轨迹而图像变化后不能归位的问题