Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

一、噪声

我们将常会听到平滑(去噪),锐化(和平滑是相反的),那我们就会有疑惑?什么是噪声呢?图像噪声是指存在于图像数据中不必要的或多余的干扰信息,噪声的存在严重影响了图像的质量。噪声在理论上是”不可预测”的,所以我们只能用概率论方法认识”随机误差”。

二、噪声的分类

光电管的噪声、摄像管噪声、摄像机噪声、椒盐噪声(数字图像常见的噪声,椒盐噪声就是在图像上随机出现黑色白色的像素)等等。

三、图像中添加椒盐噪声

椒盐噪声又被称作脉冲噪声,它会随机改变图像中的像素值,是由相机成像、图像传输、解码处理等过程产生的黑白相间的亮暗点噪声,其样子就像在图像上随机的撒上一些盐粒和黑椒粒,因此被称为椒盐噪声。

代码如下:

import numpy as np
import cv2
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
def add_sp_noise(img,sp_number):
    new_image=img
    row,col,channel=img.shape#获取行列,通道信息
    s=int(sp_number*img.size/channel)#根据sp_number确定椒盐噪声
    #确定要扫椒盐的像素值
    change=np.concatenate((np.random.randint(0,row,size=(s,1)),np.random.randint(0,col,size=(s,1))),axis=1)
    for i in range(s):
        r=np.random.randint(0,2)#确定撒椒(0)还是盐(1)
        for j in range(channel):
            new_image[change[i,0],change[i,1],j]=r
    return new_image

注意:在进行实验的时候,我们需要注意要进行拷贝不然原图会被破坏。

测试:

img=cv2.imread("C:/Users/bwy/Desktop/peppers.JPG")
im=img.copy()
im2=img.copy()
im3=img.copy()
im=add_sp_noise(im,0.05)
im2=add_sp_noise(im2,0.1)
im3=add_sp_noise(im3,0.3)
r=np.hstack((img,im,im2,im3))
cv_show('r',r)

结果如图所示:

Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

从图上看出,sp_number越大,噪声点越多。

四、基于滤波器方法去噪

高斯滤波(手写代码):滤掉噪声的代价就是图像会有所模糊。

Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

计算过程:

Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

此时还要确保这九个点加起来为1(高斯模板的特性),这9个点的权重为0.4787147,因此将9个值都除以0.4787147,得到最终的高斯模板。

Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

(1)灰度图像高斯滤波:

def gaosi_f(img,k_size,sigma):
    ##滤波图片的尺寸
    h=img.shape[0]
    w=img.shape[1]
    ##用0填充边缘
    pad=k_size//2
    transform_img=np.zeros((h+2*pad,w+2*pad))
    transform_img[pad:h+pad,pad:w+pad]=img
    new_img=np.zeros((h,w))

    ##先计算高斯滤波核
    gaosi_filter=np.zeros((k_size,k_size))
    for x in range(-pad,-pad+k_size):
        for y in range(-pad,-pad+k_size):
            gaosi_filter[y+pad,x+pad]=np.exp(-(x**2+y**2)/(2*sigma**2))/(2*np.pi*sigma**2)
    gaosi_filter=gaosi_filter/np.sum(gaosi_filter)

    ##计算滤波后的图片
    for i in range(pad,h+pad):
        for j in range(pad,w+pad):
            ##取图像k_size x k_size的像素值
            p_img=transform_img[i-pad:i+pad+1,j-pad:j+pad+1]
            ##进行高斯滤波
            value=np.sum(np.multiply(p_img,gaosi_filter))
            new_img[i-pad,j-pad]=value
    ##对滤波后的图片中的像素值取整
    new_img=np.round(new_img).astype(np.uint8)

    return new_img

彩色图像高斯滤波:

def gaosi_fS(img,k_size,sigma):
    h=img.shape[0]
    w=img.shape[1]
    imShape=img.shape
    dim=len(imShape)
    if dim==2:
        eim=gaosi_f(img,k_size,sigma)
    else:
        imR=img[:,:,0]
        imG=img[:,:,1]
        imB=img[:,:,2]
        eim=np.zeros((h,w,3))
        eimr=gaosi_f(imR,k_size,sigma)
        eimg=gaosi_f(imG,k_size,sigma)
        eimb=gaosi_f(imB,k_size,sigma)
        eim[:,:,0]=eimr
        eim[:,:,1]=eimg
        eim[:,:,2]=eimb
    return eim

测试:

new_img=gaosi_fS(im,3,0.5)
cv_show("new_img",new_img)
cv_show("im",im)

结果如图所示:

Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

五、opencv高斯滤波调包

aussian = cv2.GaussianBlur(im, (5,5), 1)
cv_show("aussian",aussian)

结果如图所示:

Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

Original: https://blog.csdn.net/m0_72662900/article/details/126799509
Author: 泡泡怡
Title: Opencv——图像添加椒盐噪声、高斯滤波去除噪声原理及手写Python代码实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/786678/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • DataFrame 数据筛选

    近期使用pandas比较频繁,在进行数据处理的时候经常要用到dataframe的数据筛选功能,这里做个小结。 数据有以下的格式: columns = [“blockNu…

    Python 2023年8月16日
    064
  • web前端期末大作业——餐品后台管理系统(html+css+javascript)

    🎉精彩专栏推荐 💭文末获取联系✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主💂 作者主页: 【主页——🚀获取更多优质源码】🎓 web前端期末大作业: 【📚毕设项目精品实战…

    Python 2023年9月17日
    086
  • 机器学习中的特征工程

    何为特征工程? 特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程,用一系列工程化的方式从原始数据中筛选出更好的数据特征,以提升模型的训练效果。业内有…

    Python 2023年10月28日
    052
  • 矩阵快速幂

    by lcx,zjy 基础知识 矩阵:由$ m\times n$个数排成的m行n列的数表其实就是二维数组 矩阵加减法的规则:(A\pm B=C) 其中$ C[i][j]$ 为(A[…

    Python 2023年10月18日
    053
  • UE4 TCP协议连接服务器与客户端

    B站教学链接:https://space.bilibili.com/449549424?spm_id_from=333.1007.0.0 一、TCP原理简介 TCP是传输控制协议(…

    Python 2023年10月8日
    055
  • Wordcloud库的安装

    第一次写文,浅浅的表达一下今天困惑 原来Wordcloud库的安装并不是简单的pip install Wordcloud 1.下载对应的python版本的wordcloud.whl…

    Python 2023年8月1日
    055
  • label studio 结合 MMDetection 实现数据集自动标记、模型迭代训练的闭环

    前言 一个 AI 方向的朋友因为标数据集发了篇 SCI 论文,看着他标了两个多月的数据集这么辛苦,就想着人工智能都能站在围棋巅峰了,难道不能动动小手为自己标数据吗?查了一下还真有一…

    Python 2023年10月28日
    046
  • pandas操作excel,matplotlib.pyplot画图插入到excel,处理复杂excel简单练习

    在数据分析上,一直都在公司zeppelin上敲python/scala代码,进行数据分析,公司内搞了个小考试,操作excel,弄matplotlib画图之类的; 好久没弄过这些了,…

    Python 2023年9月3日
    066
  • Python学习笔记(九)–游戏项目(4)

    文章目录 创建外星人 创建一群外星人 重构create_fleet() 创建外星人 我们将使用这个位图来作为外星人下面我们来编写 Alien类 alien.py import py…

    Python 2023年9月18日
    063
  • vivo霍金实验平台设计与实践-平台产品系列02

    vivo 互联网平台产品研发团队 – Bao Dawei 本篇介绍了vivo霍金实验平台的系统架构以及业务发展过程中遇到的问题以及对应的解决方案。 《平台产品》系列文章…

    Python 2023年10月14日
    041
  • 命令行运行Python脚本时传入参数

    方法1. 在命令行运行Python脚本时,传入参数,并根据参数做相应动作。 先来一个简单的—把命令行输入的参数打印出来。 Step1: 在linux中,建立名字为 t1…

    Python 2023年8月2日
    058
  • Markdown常用语法

    一、标题 使用n个”#”表示n级标题。 #一级标题 ##&#…

    Python 2023年6月9日
    062
  • 分析源码理解GO语言文件操作

    FileInfo接口 在 os包中有一个 FileInfo接口它包含了一个文件的基本信息,如下 // A FileInfo describes a file and is retu…

    Python 2023年6月3日
    073
  • Python 交互式解释器的二三事

    学 Python 不知道何时起成了一种风尚。这里,我也随便聊聊跟Python 的交互式解释器的几个有意思的小问题。 如何进入 Python 交互解释器? 当你安装好 Python …

    Python 2023年11月9日
    029
  • Vue整理

    一、Vue Vue是遵循MVVM架构模式实现的前端框架 MVVM架构 Model数据 View模板 ViewModel处理数据 变量的定义,var,let,const 箭头函数的t…

    Python 2023年6月3日
    075
  • 神经网络量化基础

    1,模型量化概述 1.1,模型量化优点 1.2,模型量化的方案 1.2.1,PTQ 理解 1.3,量化的分类 1.3.1,线性量化概述 2,量化算术 2.1,定点和浮点 2.2,量…

    Python 2023年10月29日
    062
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球