- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564665 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174622
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& j) ^& t3 u* c" x+ O" P图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。; L/ q0 A7 J" R, B
; |' x5 d9 }9 l5 e" @
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置3 d! E% K' @2 Z* A) V' g# S$ x6 g8 x
import cv2 as cv #导入openCV库& Z/ d9 X) l( h0 N4 _9 Z& F
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
2 u$ ~0 ]% p* E9 T! U% I! y6 S #必须首先安装numpy,scipy,matplotlib
1 I& V+ n( q' b9 [% Eimport numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
8 f% Z: N8 [/ ~5 u0 N5 m
* y4 \0 ]; p# m
" d5 }3 f" o7 e5 Edef boxBlur(img):
; ~ Y; S* R4 C8 s1 g1 ~ # 使用5x5的滤波核进行平滑/ V; \6 l3 ]/ s( Y5 l/ s
blur = cv.boxFilter(img,-1,(5, 5)) + }- p0 y8 x! `+ G- F
return blur
8 E( C! Y( [, r! S
0 m2 Z: V: n' }3 A6 O3 O9 o( E2 I8 D& K$ S
def gaussianBlur(img):
( c2 E1 N3 ]7 L3 B% L # 使用高斯核进行平滑
" t: b+ T1 H% Y; s& P4 v* w blur = cv.GaussianBlur(img,(5, 5),1.5)
3 V( G; P6 z: c: i, T1 r ` return blur
* d2 Q+ ~" y' X0 H/ n, e/ D1 c& ^9 w- r8 [; n& z
+ a( u8 ] }8 a7 w: a7 y) sdef main():
/ @, |3 \( [& A, w8 T+ ~ # 2. 定义图片类img
5 ]" G m* x6 g# Z1 R; _ path = r"C:\Users\98238\Desktop\Lenna.jpg"
- i2 D3 m @3 [7 ?! c8 G& B img = cv.imread(path)9 V8 f( W4 j- X& r. f' a, s6 R
start_t = cv.getTickCount()2 ]7 B4 B4 g" {1 x
# 5. 加噪声,绘图/ }4 O' F& q) J) n* M
##############################################3
6 I' n! P& [# d8 O # add gaussian noise
; n' w1 x/ E" `) _4 p O0 `/ T6 J+ D, K+ | n* q
gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
2 B& r, ]! z( j* q gauss_noiseImg=gauss_noiseImg9 V |. K4 j3 d3 G4 s4 s( ^- s
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声! u+ W0 k1 q! V" n
# j9 F; c$ [3 L: |# A
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
6 J6 j. y$ ^0 D( i
$ W( D& B8 h6 @ lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波+ O* s+ e0 F% I5 n$ X
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
- q3 g' Y, _9 e0 \0 }6 @ print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
* Y9 N1 H9 o; w
; |% E S* H, r6 K# i) j& E# r print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释7 v s/ k* K7 [0 P" w+ w
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释! \5 P: B: Q0 o$ O
8 A$ } |: Q& {% I5 C4 O6 x7 O7 U
; o( d. }) R; l1 w7 b: z& W1 i. d cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
1 _6 Y1 U) x% E# T; G' ]! C cv.imshow('Original Image', img)#输出原图片9 Q: V! }; ]( U
7 m: f7 C, D% \ s- v9 k
# Gaussian noisy image0 M& H2 x+ Q8 A
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题2 a+ v: _1 U& f& W1 R
cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
6 M# }% C4 G# `) i. h" |/ N% x1 N: k: P# u+ Q3 K) k+ d
# Salt noisy image
0 P5 F }( h1 r( S1 J- y6 w cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题5 }" w' {% d4 r6 m, D" Y: V+ O
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
y w. ^& X$ [! t: B
& n/ |5 ?7 [, `' J7 F #滤波后的图像
: q' G7 B9 q( i8 R* m7 b0 e0 X cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题- G: D) B9 o4 A& @: h: X! G
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片& }' I6 O/ H# L# V9 b
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
+ J* ]. C& w( c; r$ `4 o cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
. ]4 S( ~* V5 C
) L, f# ~: O" Q: j8 _* } #####################################################% y( `: H7 l6 Q
- k5 y* T6 a5 V, m, D2 P stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
7 o r' R: r1 a2 ?
+ @5 t+ q9 w4 O: N! a9 O print(stop_t, "ms")#输出时间并加上单位
; a, C3 A0 I) z0 ]
" R4 k( l4 u+ @: R, P9 G( U cv.waitKey(0)
3 ~6 B$ S+ e/ B. `9 N6 m0 r; c8 k/ r cv.destroyAllWindows()
- ^2 P, Y( h+ v# g# {* O: s. ~* ]
' I- b% s6 X3 g z Z% \
if __name__ == "__main__":
! v ^, f! M1 u2 r) n& ~* X5 D main()
" I; O m* h) b4 s7 U, R
" W7 o# j% x; r8 i原图如下
8 `& Q% K. k* j" \! R
C0 h6 _0 w7 X: A; s
( m* C4 O7 ~5 m6 E+ J% D3 H
6 h; L' s% ]- o% X, D
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
0 ^% X$ P/ h, t- x2 }
$ b/ ~% B/ z% g( _2 d- a) V
添加椒盐后的图片) B( z$ A, d% c1 N* q6 [3 q
; T3 a1 q) G' ?4 i
. j0 Z# U, Y6 q$ U
' V& _ {# J. U* \6 @使用中值滤波3滤波后的高斯噪声图: J* D: v+ Z6 s' B
' Z' _8 X1 Q& m* y- f' \
9 R! C# y; J- ]9 M
使用中值滤波3滤波后的椒盐噪声图( p9 a) }* q# }# t& ?
g0 d. `+ V' p2 N0 z( ^1 Z9 E
( b4 J1 J9 f" l4 m9 t改用中值滤波5 滤波滤波后的高斯噪声图' q3 N4 | T% }) T+ y2 h( n) }% e4 G% j
; g' Y1 p7 r* @& d
3 _3 I) }$ n, K( J
3 K( E8 J% G! d0 b ]滤波后的椒盐噪声图; W- A+ E% h" \+ Q
, U6 \! ^7 a7 j$ W
6 H" b5 v, Y2 P
& n+ a/ p3 I# y7 E2 `* K8 W
结论:2 E, e9 i K0 n( \0 V3 r# Z. y
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。* P' s( F! l2 h
# D; w6 y5 G' t; r) V |
zan
|