- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 561556 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173840
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
8 e4 } B8 v3 G$ j. U5 D, a0 l3 h图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
6 c; f1 N. F8 c l1 w' b) S7 p7 ?: h3 q0 X- X% l3 N
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
( \6 L. ?; _6 L* X; q& oimport cv2 as cv #导入openCV库
: P: v/ }( W9 ?import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。/ O! o2 ^. d# R( C" D$ T0 h9 o( V3 L
#必须首先安装numpy,scipy,matplotlib
, S/ U0 D R5 {) vimport numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
2 {' a, c0 L3 \- T
# }' [* N# Z7 u5 d/ r; c2 A
7 j# M) ~# L- E3 f1 U7 l: @def boxBlur(img):$ M; R3 T" D# _, Q
# 使用5x5的滤波核进行平滑
& j* J4 V0 ~$ \1 f( h8 F blur = cv.boxFilter(img,-1,(5, 5))
& k& o3 z) p) @* N3 A) x return blur3 s1 V& X& Y' u% W1 D
; G$ y' V' D7 {# y4 U9 g8 c
* z1 R( E8 }$ ?# \0 i! a( Udef gaussianBlur(img):
$ P: G' j/ P, O5 _5 z3 s. e# I # 使用高斯核进行平滑2 u% R# _% C' [9 w+ u4 O
blur = cv.GaussianBlur(img,(5, 5),1.5); t2 l8 X& J) r5 F5 v4 V
return blur& u! l$ A; |' W9 f) W2 F- n5 z: p
# l, D0 ^6 I {6 e- b: s
m# t0 [# I, v7 w% o( V/ zdef main():, |; r' D2 M% X4 t8 r/ C) B
# 2. 定义图片类img
2 x) v7 @! I5 h1 c% r8 | path = r"C:\Users\98238\Desktop\Lenna.jpg"8 j$ r2 ^. R( @% ]7 ?7 J ?# O
img = cv.imread(path) |& J9 v4 X2 E
start_t = cv.getTickCount()
6 Y" w( u2 P6 @- Y" K # 5. 加噪声,绘图2 w# R2 b2 J% k- C
##############################################3
5 y0 C4 H7 U/ X/ o8 b/ t # add gaussian noise* b8 q( E6 H- Y
3 a! I2 K# A6 X2 l* @
gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
" A5 R! i; K4 Z \7 ^/ x gauss_noiseImg=gauss_noiseImg4 E1 U, R( J N: L
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声8 b. x" P' M" Z- P# [4 l
* d6 s. ~3 x1 f! j, F2 r
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
: f3 I4 ^) K8 V! B+ T' E# k0 V& W
& ]( ~& l. F5 _& U lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波 ?4 T- l; }& Q
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
- q/ f2 U4 M1 k1 L {# C print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释7 Q" ^ O, G, P/ N
2 `% T( e6 j6 [. x7 P+ a; T
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释- B; a+ Z8 q, |4 W; z' K
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释! k0 q, j4 q! s/ l
* U* v9 ~4 P$ ?8 K5 f& Z
$ D: M( I! v! C cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
5 {3 G" i _6 H cv.imshow('Original Image', img)#输出原图片- `" O) A# q' t4 N4 Y* O* V
7 J6 d l$ x+ m0 K7 A7 R
# Gaussian noisy image
" o2 ~" O( w: p( T3 f9 k0 E' y cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题; ?+ I7 u$ p1 G5 G
cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片' b% @8 Q1 v9 x# h1 F. Z, b4 j
* c* [$ C9 Y4 o# A" l
# Salt noisy image/ p, |- k0 @# M: C. w$ p! W v
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题
! F$ w7 U0 r- I" O: p0 o cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
4 J c6 y! _8 {
. y! }* U- x1 ^. k #滤波后的图像. x! p& M a; n* X+ k; s& X% ~
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题& i% f* Y" i, [1 g. R1 z# k8 N" L
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
2 g' S- Z" x) B5 Z7 h- X cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题. @# G3 @" y. q- E& J) j
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片- o% O% M7 s6 o/ x$ R! u8 @
- A7 C6 l/ f- p9 {$ S% [ #####################################################
* B z6 }& D8 R& F
& b, t! V0 g- d6 R# }; x$ O6 X5 T9 d stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
( x" k1 l; k0 F0 g9 X' z! c- [0 v6 R/ T: i: i" p O- w
print(stop_t, "ms")#输出时间并加上单位& I: b" @; } w+ h
8 c5 C! W: g/ X" \& l- N; D, L
cv.waitKey(0)
/ [% G1 m1 L% y* m" u u+ u' o cv.destroyAllWindows()
5 Q2 N8 H; q: w, z) b& n8 Z! ^. W5 x5 l5 p" u
5 T1 _7 o" W0 I! N: a iif __name__ == "__main__":2 i U$ u" B% \. ?. }
main()7 g0 b$ C, ?& \7 u5 ]( e
: c6 C% ?# b8 |, [4 Q
原图如下
n3 D" u& x! e. X0 l }7 f8 C* R* ~. n# j3 @" J& I! J5 t
- }8 f* u8 A1 L, c
! r4 ?) k& c' C. O0 l2 e' p; H- D
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
0 ^7 V$ b8 B* b5 I7 S
+ ]: P9 e6 s+ L
添加椒盐后的图片
$ [8 _9 h$ }$ I
( e* g: _! [( h
# o+ z# _! P; o* A. C/ W+ `4 Y
- L' O. R( C' @! o使用中值滤波3滤波后的高斯噪声图
" v0 n% a- T7 x) W7 r
7 Z# M% g' R" ]: F: t9 v
3 X. n: E" Q, y使用中值滤波3滤波后的椒盐噪声图1 V; u1 y& P" `& j
* b9 p7 e. F* l( @' R) e* F8 \1 M' |: n: V
改用中值滤波5 滤波滤波后的高斯噪声图
( j* U1 I0 F2 m( r. e( U& O
% p8 \4 E1 X9 d! w2 D0 h1 M7 b3 s8 N. |
6 X/ i' u( H8 M( D7 F; m
5 M7 g d z; |7 ~7 f
滤波后的椒盐噪声图4 g( C/ T1 u) C
9 `. ?2 O( i" S9 E2 I9 t
2 r6 O; R# @+ ~. F ~
! M* d6 r0 q& k6 w/ z- v4 t
结论:! g w2 c# a& z# F6 e1 V
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。& Z0 I+ W9 j$ E& B
3 {" C" Q% A0 y' H ] |
zan
|