简单二值图降噪


Reference:

 

如何用C++读取bmp图像:

http://bbs.csdn.net/topics/340208546

bmp格式图像结构:

http://www.cnblogs.com/kingmoon/archive/2011/04/18/2020097.html


一、问题描述

给一幅二值图,在其中加入一定比例(这里默认是10%)的噪声,然后使用相应的降噪搜索算法,对噪声图像进行降噪处理,获得噪声图像和降噪后的图像,并对比原始图像和降噪后的图像,评估降噪的效果。

 

 

二、算法与模型描述

在进行搜索的时候,用到了如下评估模型:

其中,xi表示在搜索得到的当前状态,即当前处理的二值图,yi表示噪声图像,由于图像为二值图,我们设每个像素点的取值为 {-1,  1},这里的三个参数都是正数。

则图中第一项指,当前图像像素点值的综合与参数的积,至于这项的物理意义我不是很理解;第二项指,当前图像每个像素点与周围点(例如周围的八个点)的乘积和与参数的积,如果这一项越小说明,当前的像素点与周围的差异越小,也就越不可能是噪点;第三项指,当前图像与噪声图像对应点的乘积和与参数的积,因为噪声图像的噪点一般较少,所以我们搜索得到的图像要和噪声图像尽可能拟合,如果这一项的值越小,说明拟合效果越好。

        

         关于实现的算法:

         这里实现了两种降噪算法:

1.      遍历噪声图像的所有点,对于每个像素点计算周围八个点中,其值与当前像素点值不等的个数count,如果count > 4说明当前像素点为噪点,则改变像素值。

这个算法虽然简单,但是高效而且降噪效果很好,但是容易丢失图像细节。

 

2.      类似于“爬山法“的局部搜索算法,对于当前图像,随机选取一个像素点,根据前面提到的评估模型进行试算,判断改变这个像素点的值,会不会使得评估模型的值变小,如果是则改变它,否则进行下一次选取。对于随机选取策略,首先在全局范围内选取一个像素点进行试算,接下来的200次都在这个像素点周围随机选取另一个点进行试算,每进行200次就在全局范围内再选取一个点重复上面的操作。

这样也有点类似,在宽度优先搜索的基础上进行一定深度的深度优先搜索。

 

三、降噪效果

 

这里我定义了一个降噪结果的评估函数,具体就是比较一下降噪后的图像与原图像像素点匹配的比例,这样就可以初步判断降噪效果。

 

下面是测试样例:

简单遍历算法:

src0.bmp

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值