前言: Hello大家好,我是Dream。 今天来学习一下如何使用OpenCV实现图像加噪与滤波,欢迎大家一起参与探讨交流~

本文目录:

  • 一、实验内容
  • 二、实验环境和配置
  • 三、实验原理及操作
    • 1. 添加噪声
    • 2.噪声二值化
    • 3. 滤波处理
  • 四、实验结果
    • 1.原图、添加椒盐噪声、添加白噪声对比
    • 2.椒盐噪声二值图与白噪声二值图
    • 3.椒盐噪声处理图经处理后图像
    • 4.白噪声处理图经处理后图像
  • 五、结果分析
  • 六、实验源码
  • 七、实验报告
  • 源工程文件

一、实验内容

编写一Python程序,要求实现以下功能:

  • 读入一幅图像。
  • 使用两种以上的方法分别向图像中添加噪声。
  • 输出一幅二值图像,图像中未加入噪声的区域为黑色,加入噪声的区域为白色。
  • 使用三种滤波方法对上述添加了噪声的图像进行滤波处理。
  • 输出滤波处理后的图像。

撰写实验报告,将上述处理的原理与处理流程进行介绍;并添加原图、加入噪声的图像、描述噪声位置的二值图像以及三种滤波方法处理后的图像;最终对处理结果进行分析,并附加程序。

二、实验环境和配置

解释器:Python3.9、开发环境:PyCharm

三、实验原理及操作

实验中我们使用opencv中imread读入图片,imwrite保存图片。

1. 添加噪声

在本次实验中使用到的两种噪声分别为椒盐噪声及白噪声。
椒盐噪声是将图片中一定比例的像素点随机置为0或255,使图片上随机分布黑色和白色的噪声点。 实验中,我们建立一阈值参数per(添加噪声的比例),随机生成与输入图片相同尺寸的0到1的随机数矩阵,记录随机数矩阵中小于per/2和处于per/2与per之间的元素位置。将原图像中与矩阵小于per/2对应位置相同的像素置为255,处于per/2与per之间的置为0,这就完成为图像添加椒盐噪声
白噪声与椒盐噪声类似,不同的是椒盐噪声可能添加黑色或白色的噪声点,而白噪声只会添加白色噪声点。实验中,我们同样建立一阈值比例参数per,与输入图片尺寸相同的0到1的随机矩阵,将矩阵中小于per的元素对应位置的原图像素点置为255,这就完成了对图像添加白噪声。

2.噪声二值化

实验中将我们将原图与添加噪声后的图片进行减法操作,未添加噪声点的部分即为原始像素与原始像素相减,得到的值为0(黑色)。添加噪声点的部分为噪声点与原始图像相减,无规律的某一特殊值。之后将非0点认定为噪声点所在位置,使用二值化操作将非0点置为255(白色),0点仍保持为0(黑色),这就实现了输出标志位置信息的二值图像。

3. 滤波处理

实验中使用均值滤波、中值滤波、高斯滤波对添加噪声后的图像进行处理。
均值滤波是将滤波器中心的像素点替换为处于滤波器中全部像素点的均值,使用opencv中blur实现;中值滤波是将滤波器中心的像素点替换为处于滤波器中全部像素点的中值,使用opencv中medianBlur实现;高斯滤波的滤波器参数与离中心像素的距离有关,其参数符合高斯分布,使用opencv中GaussianBlur实现。使用滤波器在原图像进行扫描,以实现降噪等目的

四、实验结果

1.原图、添加椒盐噪声、添加白噪声对比

图1 原图(上)、添加椒盐噪声(中)、添加白噪声(下)对比图


2.椒盐噪声二值图与白噪声二值图

椒盐噪声二值图(per=0.02)与白噪声二值图(per=0.05)

3.椒盐噪声处理图经处理后图像

椒盐噪声处理图经均值滤波(上)、中值滤波(中)、高斯滤波(下)后图像:


4.白噪声处理图经处理后图像

白噪声处理图经均值滤波(上)、中值滤波(中)、高斯滤波(下)后图像


五、结果分析

由图1可知,对原图像添加噪声后,添加椒盐噪声的图像上呈现出不规律的黑白像素点,添加白噪声的图像上呈现出不规律的白色像素点,说明添加噪声成功。

从运行结果可以得出低通滤波操作可对图像进行降噪处理。其中中值滤波对椒盐噪声和白噪声降噪效果显著,原因是椒盐噪声点和白噪声点与周围像素点差异较大,当有中值滤波器经过时会将偏差值较大的点(黑噪声和白噪声)置为滤波器中的中值,这就过滤了这些差异较大的点,实现了图像降噪。椒盐噪声点和白噪声点经均值滤波与高斯滤波后噪声点颜色变淡、面积变大,是因为这两种滤波相当于对处于滤波器中的像素值进行加权求和,当噪声点被滤波器处理时,与周围像素加权求和,噪声颜色变浅;当处理的像素点周围有噪声时,与噪声点加权求和,该像素点被“污染”,噪声点变大。

六、实验源码

# @Time : 2022/10/10 16:29
# @Author : 是Dream呀
# @File : 图像加噪与滤波.py
import cv2 as cv
import numpy as npimg = cv.imread('photo.jpg')
cv.imshow('test',img)
cv.waitKey(0)
cv.destroyAllWindows()#  定义sp_Noise()来作为椒盐噪声
def sp_Noise(image, per):img = image.copy()threshold = per/2w,h = img.shape[0], img.shape[1]rand = np.random.random([w,h])#  标注噪声区域的二值图像,背景为黑色,噪声区域为白色noise = np.zeros(img.shape)noise[rand<per] = 1img[rand<threshold] = 0img[(rand<per) & (rand>=threshold)] = 255return noise*255,img#  定义white_Noise()来作为白噪声
def white_Noise(image, per):img = image.copy()w,h = img.shape[0], img.shape[1]rand = np.random.random([w,h])#  标注噪声区域的二值图像,背景为黑色,噪声区域为白色noise = np.zeros(img.shape)noise[rand < per] = 1img[rand < per] = 255return noise*255, imgwhite_noise, white_img = white_Noise(img, 0.05)
sp_noise, sp_img = sp_Noise(img, 0.02)#  使用图像减法与二值化处理获取噪声点
sp_noise1 = np.float32(sp_img) - np.float32(img)
sp_noise1 = np.where(sp_noise1 == 0, 0, 255)
sp_noise1 = np.uint8(sp_noise1)white_noise1 = np.float32(white_img) - np.float32(img)
white_noise1 = np.where(white_noise1 == 0, 0, 255)
white_noise1 = np.uint8(white_noise1)
cv.imshow('white_noise1',white_noise1)
cv.imshow('sp_noise1',sp_noise1)
cv.waitKey(0)
cv.destroyAllWindows()cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
#  cv.imshow('white_noise',white_noise)
#  cv.imshow('sp_noise',sp_noise)
cv.waitKey(0)
cv.destroyAllWindows()img_sp_blur = cv.blur(sp_img,(3,3))
img_white_blur = cv.blur(white_img,(3,3))
cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
cv.imshow('img_sp_blur',img_sp_blur)
cv.imshow('img_white_blur',img_white_blur)
cv.waitKey(0)
cv.destroyAllWindows()img_sp_med = cv.medianBlur(sp_img, 3)
img_white_med = cv.medianBlur(white_img, 3)
cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
cv.imshow('img_sp_med',img_sp_med)
cv.imshow('img_white_med',img_white_med)
cv.waitKey(0)
cv.destroyAllWindows()img_sp_gs = cv.GaussianBlur(sp_img,(5,5),1)
img_white_gs = cv.GaussianBlur(white_img,(5,5),1)
cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
cv.imshow('img_sp_gs',img_sp_gs)
cv.imshow('img_white_gs',img_white_gs)
cv.waitKey(0)
cv.destroyAllWindows()cv.imwrite('white_noise1.jpg',white_noise1)
cv.imwrite('sp_noise1.jpg',sp_noise1)
cv.imwrite('white_img.jpg',white_img)
cv.imwrite('sp_img.jpg',sp_img)cv.imwrite('img_sp_blur.jpg',img_sp_blur)
cv.imwrite('img_white_blur.jpg',img_white_blur)
cv.imwrite('img_sp_med.jpg',img_sp_med)
cv.imwrite('img_white_med.jpg',img_white_med)
cv.imwrite('img_sp_gs.jpg',img_sp_gs)
cv.imwrite('img_white_gs.jpg',img_white_gs)dx = cv.Sobel(sp_img,-1,1,0,3)
dy = cv.Sobel(sp_img,-1,0,1,3)
d = cv.addWeighted(dx,0.5,dy,0.5,0)
d = cv.convertScaleAbs(d)
cv.imshow('img_gs_med',d)
cv.waitKey(0)
cv.destroyAllWindows()

七、实验报告

这里是完整的实验报告–数字图像处理实验报告:图像加噪与滤波 附源码,需要的同学自行取走~

源工程文件

关注此公众号:人生苦短我用Pythons,回复 数字图像处理获取源码,快点击我吧

图像处理--OpenCV实现图像加噪与滤波相关推荐

  1. 图像加噪与滤波处理(python+opencv)

    效果如下: 代码链接:图像加噪与滤波处理(opencv+python) 主要要求: 编写Python程序实现以下功能: 1. 读入一幅图像. 2. 使用两种不同的方法分别向图像中添加噪声. 3. 输出 ...

  2. 图像加噪与滤波【C#】

    文章目录 前言 1 图像噪声的成因 2 图像噪声的特征 3 图像的加噪 3.1 椒盐噪声 3.1.1 什么是椒盐噪声 3.1.2 椒盐噪声的产生 3.1.3 实现方法 3.2 高斯噪声 3.2.1 什 ...

  3. 图像处理------图像加噪

    图像噪声源于现实世界中数字信号总会受到各种各样的干扰,最终接受的图像和源于的数字信号之间总 是存在一定的差异,对于图像噪声,使用均值滤波和中值滤波来消除图像噪声的做法已经是很常见的图 像消噪手段. 一 ...

  4. 图像加噪(OpenCV)

    给图像人为加噪的原理: 将图像若干个像素点的值设为噪声点的值.比如,为图像加上很多像素值为[25,20,20]的像素点,编写代码如下: for k in range(coutn):         # ...

  5. 【图像处理】——Python实现图像加噪(随机噪声、椒盐噪声、高斯噪声等)

    目录 1.随机噪声 2.椒盐噪声 3.高斯噪声 补充:numpy.clip函数 4.其他噪声 1.随机噪声 随机噪声就是通过随机函数在图像上随机地添加噪声点 随机函数random模块参考:https: ...

  6. C++数字图像处理篇之图像加马赛克

    马赛克是一种广为使用的图像处理手段,它是将影像特定区域的色阶细节劣化并造成色块打乱的效果.这种模糊看样子像一个个小格子,所以被称为马赛克.马赛克主要的目的就是使图像内容无法辨认,以保护特殊图像内容.这 ...

  7. 信号处理——MATLAB音频信号加噪、滤波

    音频信号叠加噪声及滤波 一.前言 二.信号分析及加噪 三.滤波去噪 四.总结 很抱歉大家,最近经常有朋友私信问我关于这篇信号处理的一些问题,因为最近比较忙所以没能一一回复,给大家说句抱歉,希望那些给我 ...

  8. 【OpenCV案例实战分享】关于图像处理的一些基本操作之二值化、图像加噪处理......

    导语

  9. 【OpenCV入门教程】图像加噪

    图像噪声使图像在获取或是传输过程中收到随机信号干扰,妨碍人们对图像理解及分析处理的信号.很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述,也就是使用随机过程的描述,也就 ...

最新文章

  1. FreeBsdb FAMP Lamp环境
  2. 静物摄影用光技巧_摄影技巧:冬天的阳光怎样拍才更美?
  3. oracle导入java包时出错,Oracle导入导出的常见错误
  4. 推荐 12 个好用的 React 的开源项目,开发效率又能提升了!
  5. sqlite字段是否存在_学习廖雪峰的JAVA教程---反射(访问字段)
  6. 从单片机工程师的角度看嵌入式Linux
  7. sql 之like 和通配符%,_(mysql)
  8. 将windows项目移植到linux上
  9. java 生成uuid
  10. 网络营销是中小企业低成本建立品牌的必经之路
  11. php定做单城市公交路线查询系统
  12. STM8S003外部中断配置
  13. Cordys BOP 4.3平台使用小经验—数据库连接管理、导出流程模型为XPDL
  14. waf 防火墙限制_waf防火墙
  15. 基于SSM架构的美发店会员信息管理系统
  16. 关于Samsung Exynos 5420 Arndale octa board的HDMI外接显示屏问题。
  17. 计算机网络唤醒技术说明与实现
  18. 使用码云和博客园学习简易教程
  19. 点乘 线性代数_线性代数
  20. linux C语言 任务优先级,C语言中设置进程优先顺序的方法

热门文章

  1. 《碟中谍6》阿汤哥:自律是时间的杀手
  2. 教你写一个ftp协议(文件传输协议)
  3. 用Python操作文件
  4. 网吧的服务器性能共享,网吧内共享服务器搭建
  5. 我希望我早已知道的 103 条建议
  6. 火鸟程序_火鸟网络管理
  7. 旋转矩阵及旋转向量相互转化 Rodrigues矩阵及matlab实现
  8. Java之读写分离实现
  9. LinuxProbe学习笔记(十五)
  10. UDP FLood拒绝服务攻击