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

来源:百度知道 编辑:UC知道 时间:2024/06/29 23:34:33
我做的C程序是sobel算子实现数字图像的边缘提取,结果都实现了,但是里面sobel的阈值还是自己设定的,没有一点依据,完全凭感觉,希望高手教我一下这个阈值到底是怎么设定

可以自己设。
因为图像处理里经常是,没有很通用的方法。
一类图像用一种处理顺序+处理阈值有好的效果。
换了一类图像效果就不好了。

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

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

要保证这一类图有同样的照明和焦距。否则边界强度
会不同就讨厌了。

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++)