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

我做的C程序是sobel算子实现数字图像的边缘提取,结果都实现了,但是里面sobel的阈值还是自己设定的,没有一点依据,完全凭感觉,希望高手教我一下这个阈值到底是怎么设定... 我做的C程序是sobel算子实现数字图像的边缘提取,结果都实现了,但是里面sobel的阈值还是自己设定的,没有一点依据,完全凭感觉,希望高手教我一下这个阈值到底是怎么设定 展开
dfcxl
2009-06-25
知道答主
回答量:40
采纳率:0%
帮助的人:34.3万
展开全部
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即为阈值。
这是本人完成数字图像处理实验的程序,能够运行。
Laplas
2009-06-18 · TA获得超过1万个赞
知道大有可为答主
回答量:2680
采纳率:50%
帮助的人:2624万
展开全部
可以自己设。
因为图像处理里经常是,没有很通用的方法。
一类图像用一种处理顺序+处理阈值有好的效果。
换了一类图像效果就不好了。

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

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

要保证这一类图有同样的照明和焦距。否则边界强度
会不同就讨厌了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式