Opencv图像添加椒盐噪声、高斯滤波去除噪声原理以及手写Python代码实现方法
作者:泡泡怡 发布时间:2021-12-30 00:21:40
标签:opencv,椒盐噪声,高斯滤波
一、噪声
我们将常会听到平滑(去噪),锐化(和平滑是相反的),那我们就会有疑惑?什么是噪声呢?图像噪声是指存在于图像数据中不必要的或多余的干扰信息,噪声的存在严重影响了图像的质量。噪声在理论上是”不可预测“的,所以我们只能用概率论方法认识“随机误差”。
二、噪声的分类
光电管的噪声、摄像管噪声、摄像机噪声、椒盐噪声(数字图像常见的噪声,椒盐噪声就是在图像上随机出现黑色白色的像素)等等。
三、图像中添加椒盐噪声
椒盐噪声又被称作脉冲噪声,它会随机改变图像中的像素值,是由相机成像、图像传输、解码处理等过程产生的黑白相间的亮暗点噪声,其样子就像在图像上随机的撒上一些盐粒和黑椒粒,因此被称为椒盐噪声。
代码如下:
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)
结果如图所示:
从图上看出,sp_number越大,噪声点越多。
四、基于滤波器方法去噪
高斯滤波(手写代码):滤掉噪声的代价就是图像会有所模糊。
计算过程:
此时还要确保这九个点加起来为1(高斯模板的特性),这9个点的权重为0.4787147,因此将9个值都除以0.4787147,得到最终的高斯模板。
再与图像像素进行乘积,四周加和代替中间的。
(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高斯滤波调包
aussian = cv2.GaussianBlur(im, (5,5), 1)
cv_show("aussian",aussian)
结果如图所示:
总结
来源:https://blog.csdn.net/m0_72662900/article/details/126799509
0
投稿
猜你喜欢
- 后台数据库: [Microsoft Access] 与 [Microsoft Sql Server] 更换之后,ASP代码应注意要修改的一些
- 介绍据官方所述,mango Cache是对Guava Cache基于go的部分实现,同时mangoCache参考了Caffeine以及go-
- Paramiko是一个用于执行SSH命令的Python第三方库,使用该库可实现自动化运维的所有任务,如下是一些常用代码的封装方式,多数代码为
- 核心代码function convert2utf8($string) { return iconv(&
- PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用uinx
- 在面向对象的理论中,有两个核心的概念:类和实例。类可以看成是一个模板,实例就是根据这个模板创建出来的对象。但在 Python 里面,类和实例
- 很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速。下面我来举几个例子。1. 删除重
- 如何优雅地解析命令行选项随着我们编程经验的增长,对命令行的熟悉程度日渐加深,想来很多人会渐渐地体会到使用命令行带来的高效率。自然而然地,我们
- 谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类。下载链接: https
- 一、套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它
- 总结了5个关于css布局的常见问题,并附有解决方法,供参考。float的3像素问题及解决办法当使用float浮动容器后,在IE6下会产生3p
- 1.字符串函数 长度与分析用 datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 substring(ex
- 关于在asp中不使用组件使得脚本sleep的办法还比较少见,可能比较好的办法是创建同步的xmlhttp request,直到获得的时间达到某
- 网页广告 Banner 设计图文手册:采用以下要点来改善你的BANNER。广告并不便宜。 确信你的广告被第一时间读到。使用像这样的Sans
- 蚁群算法简介蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agen
- 前言在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引
- Python字符串拼接的几种方法整理第一种 通过加号(+)的形式print('第一种方式通过加号形式连接 :' + '
- 对文本类文件(*.txt;*.html;*.doc;等等),图片类文件(*.jpg;*.gif等等)直接点击链接时会在浏览器打开,而无法出现
- 录入身份证信息是一件繁琐的工作,如果可以自动识别并且录入系统,那可真是太好了。今天我们就来学习一下,如何自动识别身份证信息并且录入系统~识别
- 这个效果本身难度不大,主要在程序结构和扩展中下了些功夫,务求用起来更方便,能用在更多的地方。程序特点 1,同一个提示框用在多个触发元素时,只