首页 > 编程语言 >Python从0到100(六十九):Python OpenCV-图像加噪与滤波

Python从0到100(六十九):Python OpenCV-图像加噪与滤波

时间:2024-11-10 18:20:15浏览次数:6  
标签:imshow img Python 噪声 sp 六十九 加噪 white cv

在这里插入图片描述

前言: 零基础学Python:Python从0到100最新最全教程 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!
欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!

一、实验内容

编写一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 np

img = 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/2
    w,h = img.shape[0], img.shape[1]
    rand = np.random.random([w,h])
    #  标注噪声区域的二值图像,背景为黑色,噪声区域为白色
    noise = np.zeros(img.shape)
    noise[rand<per] = 1
    img[rand<threshold] = 0
    img[(rand<per) & (rand>=threshold)] = 255
    return 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] = 1
    img[rand < per] = 255
    return noise*255, img

white_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()

标签:imshow,img,Python,噪声,sp,六十九,加噪,white,cv
From: https://blog.csdn.net/weixin_51390582/article/details/143029258

相关文章

  • (开题)flask框架高校科研绩效管理系统设计与实现(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展,高校科研活动日益频繁,科研成果丰硕。然而,如何科学、公正地评价教师的科研绩效,成为高校科研管理中的一个重要问题。......
  • (开题)flask框架高校科研信息管理系统(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的蓬勃发展,高校科研活动日益活跃,科研项目数量激增,科研成果丰硕。然而,传统的科研管理方式已难以适应当前高效、快捷的信息处理......
  • C. 小红打怪 (python解)-牛客
    C.小红打怪(python解)-牛客原题链接:C.小红打怪问题分析:小红的全体打击技能对所有怪物造成1点伤害。队友1的单体打击技能可以对任意单个怪物造成1点伤害。队友2的范围攻击技能可以对相邻的两只怪物分别造成1点伤害(可对已死亡的怪物使用)。思路:设定一个函数check(mx)......
  • Python图片链接爬虫爬取图片代码
    importrequestsurl=‘https://desk-fd.zol-img.com.cn/t_s960x600c5/g5/M00/05/0F/ChMkJ1erCYqIQptxAAPESMfBQZoAAUU6QB4oVwAA8Rg091.jpg’headers={‘user-agent’:‘Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/1......
  • B. Replacement (python解)-codeforces
    B.Replacement(python解)-codeforces原题链接:B.Replacement问题分析:我们有两个二进制字符串:s(长度为n)和r(长度为n-1)。根据游戏规则,我们需要在s上执行n-1次操作。在每次操作中,我们选择一个索引k,使得s[k]和s[k+1]不相同并将这两个字符替换为r[i](第i次操作中r的......
  • 【最新原创毕设】基于移动端的助农电商系统+08655(免费领源码)可做计算机毕业设计JAVA、
    基于移动端的助农电商系统的设计与实现摘要近年来,电子商务的快速发展引起了行业和学术界的高度关注。基于移动端的助农电商系统旨在为用户提供一个简单、高效、便捷的农产品购物体验,它不仅要求用户清晰地查看所需信息,而且还要求界面设计精美,使得功能与页面完美融合,从而提升......
  • (2024最新毕设合集)基于SpringBoot的梓锦社区疫苗接种服务系统+42529|可做计算机毕业设
    目 录摘要1绪论1.1选题背景与意义1.2开发现状1.3论文结构与章节安排2 梓锦社区疫苗接种服务系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.......
  • Python 入门-2
    1.函数输出函数:print 1.*values:表示可以一次性输出多个对象,输出多个对象时,需要用,隔开(英文逗号) 输出多个内容逗号隔开,英文符号 print('哈哈哈','嘻嘻嘻','嘿嘿嘿')2.sep:用来间隔多个对象,默认值是一个空格,可随意更换 print('哈哈哈','嘻嘻嘻','嘿嘿嘿',sep=',') sep......
  • Python中输入和输出的详细解读
    文章目录一、输入1.input()函数2.eval()函数3.多个变量的输入(1)split()函数(2)map()函数二、输出1.print()函数2.字符串格式化format()方法3.字符串格式化占位符%一、输入1.input()函数input()可以读取用户键盘输入的值,并以字符串的形式赋值给我们随意定义的变量中......
  • Python实现SSA智能麻雀搜索算法优化BP神经网络回归模型(优化权重和阈值)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后关注获取。1.项目背景随着人工智能技术的发展,机器学习算法在各个领域的应用越来越广泛。其中,神经网络作为一类重要的机器学习方法,在模式识别、图像处理、自然语言处......