发布网友 发布时间:2022-04-23 04:47
共2个回答
热心网友 时间:2023-09-28 16:07
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即为阈值。
这是本人完成数字图像处理实验的程序,能够运行。
热心网友 时间:2023-09-28 16:08
可以自己设。
因为图像处理里经常是,没有很通用的方法。
一类图像用一种处理顺序+处理阈值有好的效果。
换了一类图像效果就不好了。
Sobel出来的应该是灰度图。你是后面再进行二值化。
可以用大津法(OTUS)对Sobel的结果图进行二值化。
还可以用大津法求出阈值后,做点变动,比如-5 什么的。
如果是写文章,那么就要把各种理论扯进去。
如果是做项目,就不管理论了。只要这一类图像效果好,
不要管阈值的设置有没有道理。
要保证这一类图有同样的照明和焦距。否则边界强度
会不同就讨厌了。