码迷,mamicode.com
首页 > 其他好文 > 详细

关于中值滤波

时间:2016-05-08 13:18:24      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

本文参考至这本书,不是打广告,是分享,真不错的书

技术分享

技术分享

中值滤波---用途是去掉图像中的噪点

原理,列如:依次选取图像3x3邻域内的9个像素的灰度,然后按照从小到大的顺序排列。

2 3 3 4 4 5 6 6 10

用中间值(第五个像素值)4代替上图红圈中的6,然后接着向右选取,依次选取图像3x3邻域内的9个像素的灰度,

然后按照从小到大的顺序排列。然后选取中间值,替换掉绿圈中的3。然后又接着向右移动替换,当然还有向下移动替换。

程序如下

/*
    中值滤波
  image_in  原图像指针
    image_out 滤波图像指针
    xsize     图像宽度
    ysize     图像高度
*/
int median_value(u8 c[9])//排序
{
    u8 i=0,j=0,buf=0;
    for(j=0;j<8;j++)
    {
        for(i=0;i<8;i++)
        {
            if(c[i+1]<c[i])
            {
                buf=c[i+1];
                c[i+1]=c[i];
                c[i]= buf;
            }
        }
    }
    return c[4];
}
void Median(u8 (*image_in)[image_line], u8 (*image_out)[image_line], int xsize, int ysize)
{
    u8 i=0,j=0;
    u8 c[9]={0};
    for(i = 0; i < ysize-1; i++)
    {
        for(j = 0; j < xsize-1; j++)
        {
            c[0]=*(*(image_in+i-1)+j-1);
            c[1]=*(*(image_in+i-1)+j);   //
            c[2]=*(*(image_in+i-1)+j+1);
            
            c[3]=*(*(image_in+i)+j-1);
            c[4]=*(*(image_in+i)+j);      //
            c[5]=*(*(image_in+i)+j+1);
            
            c[6]=*(*(image_in+i+1)+j-1);
            c[7]=*(*(image_in+i+1)+j);   //
            c[8]=*(*(image_in+i+1)+j+1);
            *(*(image_out+i)+j) = median_value(c);
        }
    }
}

 效果

去噪点前

技术分享

去噪点后

技术分享

 

关于中值滤波

标签:

原文地址:http://www.cnblogs.com/yangfengwu/p/5470339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!