为什么用加权平均来降噪

原文:https://blog.csdn.net/saltriver/article/details/78883904

前面提到,我们想到了用平均操作来降低噪声。降低噪声的意义是显而易见的,当我们需要图像增强,以提升图像的质量时,必须降低甚至消除噪声。

用平均操作来降低噪声是一种好方法,其基于的原理是:每个像素点的值与其周边像素点的值比较接近。

但是,我们进一步分析,如果一个像素点的值没有被噪声污染,那么用这种操作就改变了像素点的真实值,带来了副作用。同时,在像素点的8领域周边像素中,其水平和垂直方向的4领域像素与中心像素的距离是1,而对角像素与中心像素的距离是根号2,距离中心像素更近的像素的值是不是与中心像素的值更接近呢,重要程度更高呢。同样,中心像素的值本身是不是有更大的可能性接近原始值呢,它本身的重要程度是不是也更高呢。

于是,我们很自然的就想到是不是不用绝对平均,而是用加权平均,重要程度高的赋予更高的权重,重要程度低的赋予较低的权重。例如下图所示:

中心点象素的权重是0.25,水平和垂直方向像素的权重是0.125,对角方向像素的权重是0.0625,当然,这些权重的和必须等于1。

我们用加权平均来看一看效果。下图是带有盐噪声的图像。

import cv2
import numpy as np
salt = cv2.imread("salt_lena.bmp", 0)
row, column = salt.shape
reduce = salt[:]
for x in range(1, row - 1):
    for y in range(1, column - 1):
        reduce[x, y] = 0.0625 * salt[x - 1, y - 1] + 0.125 * salt[x - 1, y] + 0.0625 * salt[x - 1, y + 1] + \
            0.125 * salt[x, y - 1] + 0.25 * salt[x, y] + 0.125 * salt[x, y + 1] + \
            0.0625 * salt[x + 1, y - 1] + 0.125 * salt[x + 1, y] + 0.0625 * salt[x + 1, y + 1]

cv2.imshow("reduce", reduce.astype("uint8"))
cv2.waitKey()
 

输出结果:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值