求8方向的sobel算子在matlab中的源代码

 我来答
2927zzy
2011-10-29 · 超过12用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:32.2万
展开全部
int t0,t1,t2,t3,t4,t5,t6,t7;/////sobel模板的八个邻域值
int ab1,ab2,ab3,ab4,ma,ma1,ma2;
int m_max_ab=0;
if(m_Img_sobel!=NULL)
{
delete []m_Img_sobel;
m_Img_sobel=NULL;
}
m_Img_sobel=new unsigned char[aLineByte*aHeight];
if(m_iBitCount!=8)
{
// AfxMessageBox("sobel只处理灰度图,请先转换成灰度图");
return false;
}
else
{
for(int h=2;h<aHeight-1;h++)
{
for(int w=2;w<aWidth-1;w++)
{
if(*(aImg_zone+h*aLineByte+w)>=150&&*(aImg_zone+h*aLineByte+w)<=200)
{
m_max_ab=0;
t0=*(aImgData+(h-1)*aLineByte+(w-1));
t1=*(aImgData+(h-1)*aLineByte+(w));
t2=*(aImgData+(h-1)*aLineByte+(w+1));
t3=*(aImgData+(h)*aLineByte+(w+1));
t4=*(aImgData+(h+1)*aLineByte+(w+1));
t5=*(aImgData+(h+1)*aLineByte+(w));
t6=*(aImgData+(h+1)*aLineByte+(w-1));
t7=*(aImgData+h*aLineByte+(w-1));
ab1=(t0+2*t1+t2)-(t4+2*t5+t6);
if(ab1<0)
{
ab1=-ab1;
}
ab2=(t0+2*t7+t6)-(t2+2*t3+t4);
if(ab2<0)
{
ab2=-ab2;
}

ab3=(t0*2+t1+t7)-(t4*2+t3+t5);
if(ab3<0)
{
ab3=-ab3;
}
ab4=abs((t1+t2*2+t3)-(t5+t6*2+t7));
ma2=max(ab3,ab4);
ma=max(ab1,ab2);
if(ma>0)
{
if(ma<=255)
{
*(m_Img_sobel+h*aLineByte+w)=ma;
}
else
{
*(m_Img_sobel+h*aLineByte+w)=255;
}
}
else
{
*(m_Img_sobel+h*aLineByte+w)=0;
}
}
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式