- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564695 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174631
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
q9 E2 ~2 a, ], R
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。8 Q, Q1 c/ n: B& g: Z9 |! i
2 ?% T* A" f) q
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
$ a3 {' A3 P( Oimport cv2 as cv #导入openCV库
+ K; ^ I: j7 ~. d$ Rimport skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。9 U. E) o( h$ W; [. J: O5 e6 l
#必须首先安装numpy,scipy,matplotlib
2 [, W0 V% D5 d6 X& {% uimport numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
) R# D/ {3 T' N4 R
0 j' g; x) D% @ t$ F$ I6 S3 C* e7 V {5 N
def boxBlur(img):) X& t+ b0 `( e0 v; [; r, p
# 使用5x5的滤波核进行平滑
0 C+ \1 ~7 M1 h' J$ D6 [, m7 I blur = cv.boxFilter(img,-1,(5, 5)) & H( _ m0 l. q" \+ R% u& h9 D s2 u) y
return blur* H$ f' b0 c5 j
2 J6 j# ~- i7 w0 i B
% A9 Q) g" u4 ?9 A% [( V
def gaussianBlur(img):
. w' D1 D3 |3 p* U, s # 使用高斯核进行平滑, G' L# F' _; t% A9 x9 ~# t; {
blur = cv.GaussianBlur(img,(5, 5),1.5)( w6 X w) C/ T( @# l/ i/ o) n% e( {2 K
return blur
; h: O* z( g- b k6 z+ U; e$ _9 c, f* a* t3 l! L$ \
$ E) U& e+ ]5 l! V. gdef main():3 M" U1 E! S9 _; p
# 2. 定义图片类img5 }( k! i* M# `. c/ z8 S5 ]5 V! U
path = r"C:\Users\98238\Desktop\Lenna.jpg"
5 L) t; N1 w/ d" N img = cv.imread(path)
; Q& K* N: b" ]$ r1 X4 x start_t = cv.getTickCount()
3 \! T' ~, e5 z" f% T # 5. 加噪声,绘图; |0 \ {2 z9 A: u
##############################################3
. H% n0 y* B0 G5 U # add gaussian noise
, H. o) @7 m4 |9 U
, N5 L- y0 ?0 U- K R8 x l# ?7 o+ t gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
& M6 n2 Q' @: n! y gauss_noiseImg=gauss_noiseImg
$ ^6 c+ z9 K( F5 n salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
D& e. B, d0 f
% e3 l+ p2 `0 y6 t* F- b lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波: l* {8 j; ~# l3 U6 B
9 o2 ]- S5 \) O8 V1 W. R% U* W2 C- a lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
. R s/ v5 g4 `& K$ ]& `8 k& G print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
8 R" K2 X. Q D# d9 P- F$ H print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
' t* b; O; d% i! |9 M
# \/ R. U' p4 W3 T" n' ` print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
, Y0 q- U; C; y" |5 \ print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释0 ~8 l; [6 Z' b f' V: l$ p
6 }, b. M: @) h" W
" ]( e* b* O/ |( z- R R0 m8 R
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
# d# [) N- ^6 j, I) ` cv.imshow('Original Image', img)#输出原图片
5 ~: P6 W, y& ^. d. w) U1 L( ~: {. Z1 j
# Gaussian noisy image
6 J+ n- j5 F$ n+ A cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
/ S5 Z* ^; Z: e7 j# R cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片2 ?/ N$ J7 B0 s) P
: Z* ]# V8 X1 l( A3 w. U
# Salt noisy image
- l2 g+ l' N" }; S7 Q0 w cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题4 i! x; N7 n* o" Q @
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
5 U- X0 U: _5 I/ m! M% l: f; b% u* B
#滤波后的图像0 i" W! I3 ?6 H3 U; C4 ~2 W: \
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题1 B: R. [. l9 T% ?2 V b! F5 v
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片' \- r$ d; ]$ } x8 L3 a; T" S
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
) }9 j) A8 G2 ?9 R- C, b7 `3 N cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
3 e- I( S8 G; {4 ~3 N, D- r/ ]4 A+ E
/ _) b2 N1 j$ O #####################################################
5 P. O& o2 @4 p) C) i/ [1 K4 g
. v4 E/ U V$ D; T, w3 o stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
6 y" R. g4 t- I; c' G0 I/ m+ n
5 x9 I( J! E% u6 x- c/ T6 G- ~ print(stop_t, "ms")#输出时间并加上单位
6 q9 ~4 d% V* k- y9 ~. ]1 v
) o) `8 c+ R2 C* L cv.waitKey(0)
- J" r* M8 y f9 `2 [- p7 o& U cv.destroyAllWindows()" u% a4 Q+ w/ |9 v5 j$ x8 {
! u3 i) n% K& F: |, ]: s
' O/ P! R0 |4 a w) e; G8 Zif __name__ == "__main__":( v5 M" [ X2 A
main()
! a" u! I: }" [$ _3 R# J; g* n2 z Y. n! w9 ]
原图如下1 l) Y: U" F- c% K- m
. W" @+ Z2 l( T1 c7 v* Z& s
( R. E7 d. z2 ^' }& D+ y9 o& r
& h& H9 }' d( H, D. ?使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
: W! Q* x# P$ t: X$ b+ E* B' O# I9 d/ V: b
添加椒盐后的图片: M! E% }( @# H% @) E& C8 M& \ c5 O3 E
3 u$ c# P" k- u% V9 |
7 v' O/ l* K$ T. B7 W
& N. s9 M& l9 f3 C使用中值滤波3滤波后的高斯噪声图
3 f3 `. \ e2 A' G1 R
- [0 p9 z6 h4 [# i
; {: _' o8 |, o5 h' w& S使用中值滤波3滤波后的椒盐噪声图
- [$ E" e: T' M. L
a' @6 z% @3 {. f6 J3 }) I2 W- T6 C/ L d' P) ~( k8 k5 B+ n0 a
改用中值滤波5 滤波滤波后的高斯噪声图' p" m3 L+ \9 n1 G+ ^
4 V5 S* h+ I. U6 k
" x& y0 J0 u9 ~4 {. c/ X
+ z% Y1 v- g' N
滤波后的椒盐噪声图
. U) Z; ?6 } p5 B3 W4 ? r# i1 _6 K; c L
& }: Q& |9 E& t1 `. X; L: x- Q. G$ X6 ]$ u: @
结论:% N& n; x. Z" f! E& ]0 d
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
2 j$ b; R! I& p4 z7 o6 o2 Z
1 e. P2 K. P3 I2 l |
zan
|