- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 559100 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173103
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
, n7 y8 ^' Q! j H
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。4 x! U" ?5 D+ M' n0 Y! l
2 p' V/ J# w1 h' d1 k+ `0 @#import os #import语句的作用是用来导入模块,可以出现在程序任何位置, K/ E6 Z, m: C6 l6 X# g& ?
import cv2 as cv #导入openCV库; A8 p: q; D+ {4 p0 u5 K- _9 C
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。$ @0 R% |) m9 y0 \/ g! Z
#必须首先安装numpy,scipy,matplotlib
% S6 Z* m$ z& C$ A, ]" ^import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。% O$ C2 W- u" X2 `& f
3 z/ j4 L4 G! u/ x2 G h
* \3 \3 X+ j& E' T! K b6 l+ vdef boxBlur(img):
1 g, i i/ J! ^ # 使用5x5的滤波核进行平滑
0 \6 v, v" s0 H+ c+ C blur = cv.boxFilter(img,-1,(5, 5)) 1 k& E2 r' ~. }5 W
return blur
# f4 v4 f, ? J. r: b2 c: _( r1 r/ j3 _2 F4 C
9 b' R2 d" e& f! ?7 T. b
def gaussianBlur(img):
5 ^6 g, ~1 t# H: I4 G$ B' O # 使用高斯核进行平滑# }. p8 P( w2 v9 ?- \
blur = cv.GaussianBlur(img,(5, 5),1.5)
* k7 R2 M4 R( y, g return blur
5 |3 e! u$ B0 h# W
3 f; i: `: d1 K: i$ _' h2 k5 B. f4 V( j
def main():4 O$ G# y1 P8 |9 [- z- [$ k
# 2. 定义图片类img
0 ]! U, F3 H. C$ k; F, m" L T path = r"C:\Users\98238\Desktop\Lenna.jpg"
0 f2 s: }" S- |; x' ]) q img = cv.imread(path)1 W3 k c/ }/ e* X" H3 R: B
start_t = cv.getTickCount()! Q6 Q, G) I( R+ m
# 5. 加噪声,绘图
1 e z+ Q5 l5 F7 a ##############################################3
$ F' D3 w* u$ @ # add gaussian noise
1 t5 |# V; P* m" Y/ M% T( j; l
2 {& {* o9 a! C$ H4 X% | gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
5 X, I! M" S q2 t% V- ^# d+ ~ gauss_noiseImg=gauss_noiseImg+ U i2 X+ Y* F4 s
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声3 Q' u' G, f( C, v: l5 ?
0 j: L# B; Y% l" A
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波% M+ \* l8 k3 J2 G
( ^9 y7 s& Y5 ], v+ x2 U J lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波# h' |, b* V) n% D0 [# C9 E
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释9 g) |+ o) A/ G+ L, u+ J/ @
print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释$ a; T' R0 x& d* O" p8 c* i) A; @% Q; c
$ s+ U8 q" Q( Y, H: v2 r print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释! Q: _3 H5 D7 c4 r# f& E
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
/ E4 m0 b, ?- K9 M6 L$ Q6 |2 v; p5 {* e5 {' t
2 r$ S/ s3 D' ^. v8 V cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题' M! R3 `1 D3 d5 D+ o: ?: m
cv.imshow('Original Image', img)#输出原图片
2 {; u7 K |, a8 H& I
9 @5 c8 o. J6 h! y5 R* j # Gaussian noisy image
) @3 s5 ~$ c9 R& B cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
/ x/ ^0 Z7 v. X cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
8 b- W% r' }; s0 y3 b
+ z) E& _1 [3 |" a. W! M # Salt noisy image
0 v4 ~) l. |2 `4 J; Y1 t cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题5 k* `9 J" [) y, Q% K" \
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片# S- g% r# o$ T) B+ r+ T
$ a( n0 M5 b4 C #滤波后的图像, y1 P( y' l6 o# G' } O* h3 R: E5 M8 a
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
1 c- T: V2 O0 }8 n2 _( Z B cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片. N6 Y1 s4 M+ G+ B" S
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
; Q: |8 q0 C8 d6 ^6 u8 Z cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片6 B' H( B8 _, w N% p2 t6 |
" {% S; ?6 n: V c6 O& x% X
#####################################################
2 r. i' c6 p; I' V
% H. k2 `' C! d7 T stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
+ l3 e6 p! K$ b; v" s. D7 c
2 K7 E6 |/ U( a; S, f/ T print(stop_t, "ms")#输出时间并加上单位
3 e4 Z/ J* X/ R; Q7 ]2 v3 @) f$ \. }' p# }7 k- D2 G/ Z& C
cv.waitKey(0)
0 O8 y" D6 b/ O4 J9 \: { cv.destroyAllWindows(): z- d& L" u0 h
8 u* G. n- g/ R R$ [7 m: S
% P% I7 O; p, s; O' uif __name__ == "__main__":
7 Q. U1 Q1 F7 p, N main()
' M! T$ L+ T4 e% w5 M
2 v: I7 r, O* G* m$ ~原图如下
* l I( m4 v# T( M0 l( i4 ^0 B- J' V$ {
2 m- W; ^3 }* X7 D
- f7 @9 l$ u6 _6 ^/ v4 e使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
; z2 T- A& c2 x% c/ e, `9 j1 G
: L, G1 F. @+ y( k添加椒盐后的图片. H5 ?% ]* [; x/ `7 {% B3 ?
: R n4 k. N. k/ Y$ X2 h9 `
# p+ F' o/ H" R' d) y, ?% o+ o% J( ?2 V
使用中值滤波3滤波后的高斯噪声图
9 p2 b$ {& f' _7 v
, z! u* L! w0 x' l! A2 e [8 r' \
, Y& H) e9 m% W! y1 U9 Q使用中值滤波3滤波后的椒盐噪声图
7 m, w. U) f4 e
9 m1 h9 y" Z% e! h) ^8 j2 L Q* o9 r8 L' U: `; Q
改用中值滤波5 滤波滤波后的高斯噪声图2 S0 E. T" ]+ Z% z0 A
* P% i0 n1 r$ ^. ]) |% A$ z- }( ^: P
1 p: G+ y% s. C& x3 B
) |/ _: X7 U% Z1 D& S! m: P滤波后的椒盐噪声图8 P: B* G$ z4 p1 m: U* k0 j
% R; {4 X9 h n. z
7 b. n) _" ` s- F
! w) O4 u2 @( B" H& J7 r! ?. }" E结论:
, Q8 Q& k* T; T% I: z经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。7 m4 O! { \" y5 W
& ^& e' q; u0 D7 c( J1 M) u0 n
|
zan
|