图像噪声处理

article/2025/9/30 3:47:17

一、为图像添加噪声

为图像添加噪声可以起到数据增强的作用
对训练数据添加适量噪声,可以使训练后的模型更加鲁棒,对模型的性能提升有一定的帮助。

两种常用噪声:椒盐噪声高斯噪声

import cv2
import numpy as np
import random 
#添加椒盐噪声
def salt_and_pepper_noise(img,percentage):rows,cols=img.shapenum=int(percentage*rows*cols)for i in range(num):x=random.randint(0,rows-1)y=random.randint(0,cols-1)if random.randint(0,1)==0:img[x,y]=0    #黑色噪声else:img[x,y]=255    #白色噪声return img#添加高斯噪声def gaussian_noise(img,mu,sigma,k):rows,cols=img.shapefor i in range(rows):for j in range(cols):#生成高斯分布的随机数,与原始数据相加后要取整value=int(img[i,j]+k*random.gauss(mu=mu,sigma=sigma))#限定数据值的上下边界value=np.clip(a_max=255,a_min=0,a=value)img[i,j]=valuereturn imgimg=cv2.imread('lena.jpg')#转换为灰度图像
gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray_lena.jpg',gray_img)
#需要复制一份,不然是对图像的引用,后面的操作会重叠
gray_img2=gray_img.copy()#保存椒盐噪声图像
cv2.imwrite('salt_and_pepper.jpg',salt_and_pepper_noise(gray_img,0.3))
#保存高斯噪声图像
cv2.imwrite('gaussian.jpg',gaussian_noise(gray_img2,0,1,32))

在这里插入图片描述

二、图像滤波处理(filter)

1、2维卷积

cv2.filter2D(src,ddepth,kernel,dst,anchor,delta,borderType)
  • src:输入图像
  • ddepth:目标图像所需深度,若为-1表示输入和输出图像深度相同。 (图像深度:存储每个像素所用的位数)
  • kernel:卷积核
  • dst:目标图像,与原图像尺寸和通道数相同
  • anchor:内核的基准点(锚点)。默认值(-1,-1)表示取核的中心为锚点
  • delta:类似于偏置,默认为0
  • borderType:像素向外逼近的方法,默认BORDER_DEFAULT

2、中值滤波

cv2.medianBlur(src,ksize,dst)  #特征:中心点的像素被核中中位数的像素值代替
  • src:原图
  • ksize:方框的尺寸,将方框内的值排序,取中值作为当前值
  • dst:目标图像,与原图像尺寸和通道数相同

3、均值滤波

cv2.blur(src,ksize,dst,anchor,borderType)     #取内核区域下所有像素的平均值替换中心像素,核中心区域贡献率相同,对椒盐噪声效果好
  • src:原图
  • ksize:核大小
  • dst:目标图像,与原图像尺寸和通道数相同
  • anchor:内核的基准点(锚点)。默认值(-1,-1)表示取核的中心为锚点
  • borderType:像素向外逼近的方法,默认BORDER_DEFAULT

4、方框滤波

cv2.boxFilter(src,ddepth,ksize,dst,anchor,normalize,borderType) 
  • src:原图
  • ddepth:目标图像所需深度,若为-1表示输入和输出图像深度相同。 (图像深度:存储每个像素所用的位数)
  • ksize:核大小
  • dst:目标图像,与原图像尺寸和通道数相同
  • anchor:内核的基准点(锚点)。默认值(-1,-1)表示取核的中心为锚点
  • normalize:bool类型,表示内核是否被其区域归一化(normalized)了。默认值为true,等价于 均值滤波cv2.blur;normalize=False 时,卷积结果>255时,置为255。
  • borderType:像素向外逼近的方法,默认BORDER_DEFAULT

5、高斯滤波

cv2.GuassianBlur(src, ksize,sigmaX,dst,sigmaY,borderType) #核中区域贡献率与距离区域中心成正比,权重与高斯分布相关
  • src:原图
  • ksize:核大小
  • sigmaX,sigmaY:分别表示X,Y方向的标准偏差。如果仅指定了sigmaX,则sigmaY与sigmaX相同.如果两者都为零,则根据内核大小计算它们
  • dst:目标图像,与原图像尺寸和通道数相同
  • borderType:像素向外逼近的方法,默认BORDER_DEFAULT

6、双边滤波

cv2.bilateralFilter(src,d, sigmaColor, sigmaSpace,dst,borderType)  #处理耗时。 作用:在滤波的同时能保证一定的边缘信息
  • src:原图
  • d:邻域直径
  • sigmaColor:空间高斯函数标准差,参数越大,临近像素将会在越远的地方越小
  • sigmaSpace:灰度值相似性高斯函数标准差,参数越大,那些颜色足够相近的的颜色的影响越大
  • dst:目标图像,与原图像尺寸和通道数相同
  • borderType:像素向外逼近的方法,默认BORDER_DEFAULT

图像滤波代码部分:

import cv2
import numpy as npsalt_and_pepper_img=cv2.imread('salt_and_pepper.jpg')
gaussian_img=cv2.imread('gaussian.jpg')#二维卷积
kernel=np.ones((5,5),np.float32)/25
conv_2d_img=cv2.filter2D(salt_and_pepper_img,-1,kernel)
cv2.imwrite('filter_2d_img.jpg',conv_2d_img)#中值滤波
median_blur_img=cv2.medianBlur(salt_and_pepper_img,5)
cv2.imwrite('median_blur_img.jpg',median_blur_img)#均值滤波
mean_blur_img=cv2.blur(salt_and_pepper_img,(5,5))
cv2.imwrite('mean_blur_img.jpg',mean_blur_img)#方框滤波
box_blur_img=cv2.boxFilter(salt_and_pepper_img,-1,(2,2),normalize=False)
cv2.imwrite('box_blur_img.jpg',box_blur_img)#高斯滤波
gaussian_blur_img=cv2.GaussianBlur(gaussian_img,(5,5),0)
cv2.imwrite('gaussian_blur_img.jpg',gaussian_blur_img)#双边滤波
bilateral_filter_img=cv2.bilateralFilter(gaussian_img,9,75,75)
cv2.imwrite('bilateral_filter_img.jpg',bilateral_filter_img)

高斯和双边是对高斯噪声图滤波的,其余都是对椒盐滤波
高斯和双边是对高斯噪声图滤波的,其余都是对椒盐滤波


http://chatgpt.dhexx.cn/article/4Cxx0g9X.shtml

相关文章

图像噪声简介

一、什么是图像噪声? 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块。一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。 二、噪声来源—两个方面…

VS找不到标识符

情况一: 忘记加:: 情况二: 没有包含相应的头文件 #include “xxx”** 情况三: 调用函数没有声明或定义

VS C++程序报错:找不到标识符

报错如下: 原因: cpp编译时是顺序编译的,我在一个函数中嵌套使用了上面报错的InsertNextNode()函数,而把InsertNextNode()函数的定义放在了上一个函数的后面,所以报错找…

c++编译错误error C3861: “xxxx”: 找不到标识符

错误描述 在导入自定义的头文件时&#xff0c;报C3861 “_ReturnAddress”: 找不到标识符错误&#xff0c;错误信息如下 解决办法 在自定义的头文件前面导入&#xff0c;指向的头文件即可 include ""//自定义头文件 include <ppltasks.h> 参考&#xff…

找不到标识符问题

复习动态数组时&#xff0c;出现了找不到标识符的问题&#xff0c;原因是cpp编译时是“顺序编译”的&#xff0c;主函数调用vector_2()函数的时&#xff0c;vector_2()在它所调用的函数printfV()的定义之前&#xff0c;因此找不到标识符。 将两函数调换顺序即可编译通过 &…

编写C语言出现“找不到标识符”

用C语言编写代码的时候虽然是从main函数开始的。但是其中有一个编译的过程。这个过程就是顺序编译。例如函数2调用了函数1。 #include<iostream> using namespace std; void print2() {cout << "调用第一个函数";print1();//调用第一个函数 } void prin…

关于error C3861: “xxxx”: 找不到标识符的处理方法

关于 error c3861:“XXXX”&#xff1a;找不到标识符的见解 在写代码是编译器提醒了找不到标识符的错误下来学习了一下,总结了一下希望对大家有帮助,先来认识一下什么是标识符&#xff08;如果知道就当巩固复习&#xff09;。 标识符:标识符&#xff08;identifier&#xff09…

error C3861: “AT_CHECK”: 找不到标识符

今天跑别人代码时遇到这个问题 会提示我 error C3861: “AT_CHECK”: 找不到标识符 我搜了一下发现在pytorch1.5版本之后AT_CHECK标识符已经不再使用了 只需要把 AT_CHECK 换成 TORCH_CHECK 即可

VS 2022 :C3861 “Covers”: 找不到标识符

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3861 “Covers”: 找不到标识符 CampusGuide 没有声明函数是无法调用的哦&#xff01; 还有还有 如果你的多行注释不是成对出现&#xff0c;它就会这样提示&#xff1a; 错误(活动) E00…

成功解决error C3861: “printf”: 找不到标识符

问题描述&#xff1a; 错误如下&#xff1a;error C3861: “printf”: 找不到标识符。 解决方法 提示找不到标识符“printf”&#xff0c;猜想这可能是由于编译器没能包含进头文件stdio.h造成的&#xff0c;然后我就在代码上面重新写了一行#include<stdio.h>,之后再运行…

“pcl_isfinite”: 找不到标识符

错误信息是&#xff1a;“pcl_isfinite”: 找不到标识符 我搜了&#xff0c;好多网站&#xff0c;搜了好多包&#xff0c;都没有这个“pcl_isfinite”的定义。后来看别人的代码找到了。。。 在我们自己的代码中&#xff1a;添加一行&#xff1a; # define pcl_isfinite(x) s…

VS中使用c++函数显示找不到标识符

VS中使用c函数显示找不到标识符 解决办法&#xff1a;把函数定义在main函数前原因&#xff1a;这个CPP并没有面向对象的结构。所以进行编译时是“顺序编译”的&#xff0c;而main函数的定义又在A的定义之前、自然找不到标识符了 如图使用函数时&#xff0c;出现代号为C3801的错…

VS找不到标识符问题

问题描述&#xff1a; 在我的一个screen.cpp文件中&#xff0c;我调用在这个文件里面定义的一个函数 并且在我的这个cpp文件中&#xff0c;我也明确定义函数 但是却爆出来的错误&#xff0c;注意这个错误不是没有定义 如果我把函数名改为&#xff1a;load_buyer_. 报的错误就…

地理加权回归GWR4.0软件下载与使用

1、GWR4.0软件下载链接&#xff1a;https://download.csdn.net/download/xiaodongfly/7027693 &#xff08;GWR4.0官方下载网址&#xff1a;https://gwrtools.github.io/&#xff0c;但是我打不开&#xff0c;所以从上面那个链接下载的软件&#xff09; 2、软件的安装 双击安…

spgwr | R语言与地理加权回归(Ⅰ-1):线性地理加权回归

地理加权回归&#xff08;Geographically Weighted Regression, GWR&#xff09;经过多年发展&#xff0c;已经具备了多种形式&#xff0c;在R语言中也对应着多个工具包&#xff0c;其中spgwr是一个开发较早、比较经典的工具包&#xff0c;功能也相对基础。 library(spgwr)在该…

地理加权归回模型 (GWR) 参数估计

作者&#xff1a;陈凤 (西安交通大学)   Stata连享会   计量专题 || 精品课程 || 简书推文 || 公众号合集 连享会计量方法专题…… 文章目录 连享会计量方法专题…… 1. 地理加权回归模型简介2. 地理加权回归模型的参数估计方法连享会计量方法专题…… 3. 常用的核函数3.1. G…

基于R语言经典地理加权回归,半参数地理加权回归、多尺度地理加权回归、地理加权主成分分析、地理加权判别分析等空间异质性数据分析

目录 专题一 地理加权回归下的描述性统计学 专题二 地理加权主成分分析 专题三 地理加权回归 专题四 高级回归与回归之外 更多推荐 以地理加权回归为基础的一系列方法&#xff1a;经典地理加权回归&#xff0c;半参数地理加权回归、多尺度地理加权回归、地理加权主成分分析…

多尺度地理加权回归(MGWR)软件官网下载

这两天要做MGWR实证&#xff0c;看到有人拿别人免费的东西来卖钱....发一下下载地址方便后来者 SPARC - Multiscale Geographically Weighted Regression | School of Geographical Sciences & Urban Planning (asu.edu)

Python空间分析| 03 利用Python进行地理加权回归(GWR)

地理加权回归&#xff08;GWR&#xff09; GWR本质上是一种局部加权回归模型&#xff0c;GWR根据每个空间对象的周围信息&#xff0c;逐个对象建立起回归方程&#xff0c;即每个对象都有自己的回归方程&#xff0c;可用于归因或者对未来的预测。GWR最大的优势是考虑了空间对象…

白话空间统计二十四:地理加权回归(九)结果解读(二)

实际上&#xff0c;除了辅助表以外&#xff0c;GWR还会生成一份全要素的表。对回归的每一个样本都给出相应的信息&#xff0c;今天就来看看这些信息代表了什么内容。 生成的新的要素类字段信息如下&#xff1a; 实际上&#xff0c;Coeffcient&#xff08;系数&#xff09;和…