- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567081 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175347
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
+ ^. O S* W9 M/ K- x# C- f
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。; s5 y$ A% S' n! I9 T+ u X
6 O; [9 p8 b, b& {( i
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置* ~- P0 R" t$ w+ B
import cv2 as cv #导入openCV库& m [6 | q7 ]
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
1 T# w4 ^- M3 ?( S7 V #必须首先安装numpy,scipy,matplotlib0 S6 Y/ v5 o F# m$ U
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
. ^, |' B' @- b( T+ w7 y% `6 e2 ? V* G
; F! {7 a7 Z1 d$ |8 Pdef boxBlur(img):5 ^; H5 D2 E6 I4 L+ {% ]. m5 T+ U% K+ }
# 使用5x5的滤波核进行平滑
3 L% D) p1 C" {4 \: O- k* B" Y1 q blur = cv.boxFilter(img,-1,(5, 5)) 7 |& r8 ?/ B7 Y: P! y" L; i
return blur
. N6 E* h! u% L
% F4 n( s9 l6 A4 u
0 |0 c( }; N- Hdef gaussianBlur(img):7 y: k1 v$ O- F! T0 S+ i- J. X
# 使用高斯核进行平滑
7 P! S) L1 E* J6 ^ h; @$ U* G" e blur = cv.GaussianBlur(img,(5, 5),1.5)
( H7 p9 t$ ~% o* ~* s3 i O return blur
) t2 w% X! O; \$ R. E1 g8 _
0 e. w4 ~. S5 L$ z" Z( S$ r. n) \
def main():" f: O% ?# w/ a, g7 ]- v& O' Z
# 2. 定义图片类img# `" b+ b; O( J; b
path = r"C:\Users\98238\Desktop\Lenna.jpg"
2 j, t6 n8 U3 B. ~' n img = cv.imread(path)2 A$ ]+ M3 Z8 O, r0 h
start_t = cv.getTickCount()& E! y( T8 {: c4 I
# 5. 加噪声,绘图; \/ s' P( F/ O) c
##############################################3( x, G3 b& `2 K
# add gaussian noise
. l' h# ]# i- T8 s
2 M7 `6 }# l4 u7 p8 f! i! P gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声1 V" G( d. ?, K. Y$ o
gauss_noiseImg=gauss_noiseImg
2 V% r6 n4 V$ Y3 V salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
8 |# A0 F) c5 ?. n+ i! _4 d9 {: ?* M8 i% c% m9 R( H
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波( g; v1 t9 L8 {. s1 I) M
$ K; x0 c2 o, U: f0 @1 O0 w7 a6 \ lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波( n, q' g1 e" U( }
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
% B: Y; c, ~2 r print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释- {+ a. B9 n5 v. a- W3 k. @
5 b4 `7 X6 ~/ }1 |5 }. I
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释# g. S# [, H* L1 A
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
0 g; D) [3 G, S/ U/ { S
2 o- ?, F4 E2 [; ~
; s3 z S" @+ m1 W+ N cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题2 A1 R) C5 j, A( l W' J, o
cv.imshow('Original Image', img)#输出原图片3 R3 `+ s' K0 K" T3 ~% W% x# a
1 }5 N! h9 i; p8 q4 X6 ~/ f4 ? # Gaussian noisy image
* @! x+ |; O6 r2 N" P cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
, Z" ^3 Z! @" N( G8 l cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片1 _% t- T. P) y4 Z% J
1 G! P0 X( |+ q1 r
# Salt noisy image' h( w& \7 @9 Z
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题
. ~; P. E8 G! V b( J9 G. p! l3 {, i# c3 y cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
' _% I. G% |7 W0 \6 [
8 t) L, k8 T( X% _5 m6 D #滤波后的图像
" E- B7 ~7 ?( n! T5 C% d& X$ d cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题% Z6 _6 r& \- n6 ^' i$ h- z
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片. {* k1 e6 {/ L$ l8 N
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
7 X8 A2 h6 @7 ^! D4 h/ Z% ] cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
7 I O; j5 [- [8 v& E4 V9 ^7 d6 X3 \4 Z r
#####################################################' A* B4 u3 ?, m% v
/ v- F2 t7 M3 A ? stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
4 d7 k0 U9 ?* X- K9 Z" Y& L
' t6 \9 ?5 `/ y$ M; ?/ x print(stop_t, "ms")#输出时间并加上单位 P! j' ^/ t, t; D" I" B8 i3 y
5 R* g4 F, l1 O! N c3 s, T cv.waitKey(0)3 A4 f/ u t3 U% n$ D
cv.destroyAllWindows(); G8 R m. M. L4 @1 d+ {# m
1 U, p; l0 T9 n$ u; P% g1 U! f; B: b3 p( U
if __name__ == "__main__":; L2 y+ f* Q/ E4 {' n. o
main()' L# \* ~, F4 h3 ~) a. A! W
' y# ]6 V: N$ Z' I0 v# N% g! H/ t
原图如下
7 }7 c- w5 V. E2 Z! D7 c
?, u, A1 \9 i4 z8 d/ E1 h( E
. T6 f& C9 k# \& s% L* Q9 R4 u! n. W" d4 K
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
( }3 C! c+ U( y# x
% D; ~6 a$ g# Y. Q8 h. A: A
添加椒盐后的图片
# _# y* A$ ~( R5 g) i# j) u7 C
- ?% W% D( x3 ?1 l9 J
, i" g, p" i2 E) L8 z3 x
r5 u8 Z8 P' W) `4 Z3 N8 i使用中值滤波3滤波后的高斯噪声图
) i- y' Z: \. m
0 v! o7 D0 y( K# E/ O/ x
- C! \) j& t3 v2 {使用中值滤波3滤波后的椒盐噪声图9 A6 y) U7 H" c# p, @+ k" O: ^# i3 d5 T
0 `. c6 `7 T! ~. Y: b: V
s& ~" B; t! ? k' T/ B, c; z改用中值滤波5 滤波滤波后的高斯噪声图
2 r1 _6 g8 h" V0 \' Z p. |, M! k# k# m# T7 T
% f$ T. E" Q9 T4 G1 E" V/ T2 a) A( e) U: D, w6 k, n
滤波后的椒盐噪声图$ j8 a" @) A. Z! l. y M
L1 i9 I0 j! a3 P
5 y. j( w! M9 j$ Y! I! z1 i% Z
; _# \! u; l) ?% d7 ^! s+ {8 d: v" C结论:
5 j p e8 Y2 T2 b) G$ P( \" R- @5 j经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
' `5 k. B& u% L% d" r/ s4 M, ?( _' E; ~7 r1 t* G6 f% _! p
|
zan
|