机器视觉——OpenCV案例分析基础(五)(图像的噪声产生与去噪)

12 篇文章 3 订阅
12 篇文章 8 订阅

一、理论分析

图像在生成时,受到环境、设备本身、光线等因素会导致图片产生噪声,这些噪声过于随机,处理起来十分复杂。处于学习的目的,我们首先学习一些简单的噪声与去噪,比如高斯噪声,椒盐噪声等。

二、代码分析

2.1 高斯噪声的产生与去噪

高斯噪声主要根据高斯分布(也就是正态分布)的边缘值,被认为是噪声。在高斯噪声的产生中,对图像添加给定高斯分布的边缘值,这样就对图像添加了高斯噪声,去噪的方法也很简单,对每个核去除边缘分布的噪声。

from cv2 import cv2 as cv
import numpy as np

def gauss_noise(image,mean=0,var=0.0001):
    image = np.array(image/255,np.float32)
    noise = np.random.normal(mean,var**0.5,image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1
    else:
        low_clip = 0
    out = np.clip(out,low_clip,1.0)
    out = np.uint8(out*255)
    return out

img = cv.imread('./CV-Pictures/036.jpg')
gauss_noise = gauss_noise(img,0.0,0.00002)
dst = cv.GaussianBlur(gauss_noise,(9,9),0,0)
pic = np.hstack([img,dst])
cv.imshow("picture",pic)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下
在这里插入图片描述

2.2 椒盐噪声的产生与去噪

椒盐噪声,个人理解,顾名思义,胡椒–>黑色,盐–>白。加入0和255像素的噪声,去噪的方法也很简单,应用中值模糊去噪方法。去除最小值和最大值,从而去除椒盐噪声,但是我们应该认识到,当模糊处理的核很大时,图像会变得很模糊,所以一般我们取一个权衡值。在去除噪声的前提下,争取图像变得清晰,这就导致核不能太大,也不能太小。

from cv2 import cv2 as cv
import numpy as np
import random

def salt_pepper_noise(image,radio):
    out = np.zeros(image.shape,np.uint8)
    threshold = 1 - radio
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            rdn = np.random.random()
            #rdn = random.random()
            if rdn < radio:
                out[i][j] = 0
            elif rdn > threshold:
                out[i][j] = 255
            else:
                out[i][j] = image[i][j]
    return out

img = cv.imread('./CV-Pictures/010.jpg')
out_sp_noise = salt_pepper_noise(img,0.2)
dst_median = cv.medianBlur(out_sp_noise,5)
dst_blur = cv.blur(out_sp_noise,(9,9))
Gaiss_dst = cv.GaussianBlur(out_sp_noise,(9,9),2,2)
pic = np.hstack([out_sp_noise,dst_median,dst_blur,Gaiss_dst])
cv.imshow('out_sp_noise',pic)
cv.waitKey(0)
cv.destroyAllWindows()

运行代码结果如下图所示,从左到右,依次是椒盐噪声图片,中值模糊,均值模糊,高斯模糊。可以看到中值模糊效果最好。
在这里插入图片描述

三、代码文件

小程序员将代码文件和相关素材整理到了百度网盘里,因为文件大小基本不大,大家也不用担心限速问题。后期小程序员有能力的话,将在gitee或者github上上传相关素材。
链接:https://pan.baidu.com/s/1Ce14ZQYEYWJxhpNEP1ERhg?pwd=7mvf
提取码:7mvf

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值