- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 561627 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173861
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
: X, O& p5 `+ u# ~
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。9 {$ _$ ]/ q9 D) I" [, Z1 l. Q
1 n" _; n0 |+ U9 ]" j; \8 u#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
# W" P5 V' R, _! Z. vimport cv2 as cv #导入openCV库
. t, [9 A8 R9 z3 pimport skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
6 {8 U6 j2 x5 {: p' I4 ? #必须首先安装numpy,scipy,matplotlib9 W. J6 L. M: s3 n
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
3 Z0 S1 r& R% |& f# ^6 f
! a {8 q ?( V
7 V) K& D9 T L7 P! l% xdef boxBlur(img):
( Y: B- G; c6 x5 L. H3 }( u # 使用5x5的滤波核进行平滑) Y( x6 |# a1 |+ M2 p4 M
blur = cv.boxFilter(img,-1,(5, 5)) ) T8 d2 k) i: |7 [1 h; w, R
return blur
4 X3 V- o/ w$ D$ t* C8 l& Q1 ^" y0 q, E) B4 V
6 j& b- W: d3 F) G) a8 s/ P( r' l8 L& A
def gaussianBlur(img):+ _ Z' \1 n& [/ e1 w* z9 A$ E* }
# 使用高斯核进行平滑. ?4 Y, i: s1 a5 _( `& V
blur = cv.GaussianBlur(img,(5, 5),1.5)$ e+ [$ V, o( E7 E+ z. L; C* \
return blur# v- @) k6 w$ {7 c l0 A7 v
5 Y1 o& [; q( d! x3 @4 I' F3 X* d( s" W$ j* y
def main():1 \& ^( s: j- b+ h+ y; K/ ~
# 2. 定义图片类img% X% W! X4 Z8 Z4 s3 s( [* @: m
path = r"C:\Users\98238\Desktop\Lenna.jpg"
1 l- s& v& L4 S% |( Q }8 ~ img = cv.imread(path)# ~$ ]$ f# u T( @$ }
start_t = cv.getTickCount()
6 r& r4 Y1 O. D/ u ?! ~5 z, Q # 5. 加噪声,绘图2 c5 D4 Y" I$ A7 p6 k# B! v6 k0 E! h
##############################################3
. d/ U. J3 l- c) d& @- {( |% U* ]' p # add gaussian noise
' y; R+ P9 T8 D* o' J- @
0 D6 _1 Z% h: }2 l. L! }5 u. N# R gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声6 V, a* v/ e! \0 d( I
gauss_noiseImg=gauss_noiseImg
1 f$ V* W1 l- ]3 {4 g% j8 i" f4 s X salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
Y2 V/ c- ^" H* y8 ?. J# J8 m1 Q% Y
4 L H1 f0 I3 A7 I& e lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
& e0 p2 D$ O& D$ s v9 }& o- `, @ W
lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
, Z+ ^1 X, {$ p5 J$ G print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
+ X3 j% v7 G5 b7 x' o3 L print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释% x) ]; ?. U) I4 H( c
" b; n+ V% B7 p! J9 K8 V
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释7 `% d% M6 c' s# O1 y& |0 [
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
2 X* g8 W$ s2 p5 O, E2 R, y3 I' n6 @: W6 `- X8 b' A
1 F, v; Z( S, k, G1 r
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题3 F% [! H' ~; W: K) D0 C" l1 z
cv.imshow('Original Image', img)#输出原图片
9 v; J8 C' i3 v- @
" t, |" l$ G& z5 b M: F # Gaussian noisy image: X% q* G0 x6 Q* v5 D6 K: S/ i: v2 @. j
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
* l0 {% c( E4 X+ s4 K/ |3 W cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片. L9 ?. J+ Q9 t6 _, R/ `# U
3 R( [6 z; @( g9 G$ f3 J! c' P
# Salt noisy image9 p$ F% i- r* J4 e; o
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题
4 ^" B$ w) y9 {) O. u cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片$ ?$ M/ w9 u# p+ D/ Q2 |# @
: S6 Y' h, l5 {! G #滤波后的图像
" ?2 p2 Z, ^% W, h cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
4 q$ G' C, }& `* @. \ O cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片1 c' { C( x/ |1 X1 A) ~
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
) Q) I8 B# Z" D( ?1 W cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片, q% C. l( W$ w+ p) I
8 k# e. y/ \+ X# B1 `
#####################################################; H; ]7 j7 s, E2 O8 p2 r2 e
; Q* f: x' m# ] stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
5 y# \2 H- w% h0 I$ C! n5 X: K/ t8 }9 w1 ]8 }, y
print(stop_t, "ms")#输出时间并加上单位
, D8 Q+ L( g; X0 O6 R, @5 P1 L" l1 p% e# I7 X" h6 d
cv.waitKey(0)
: W k9 K+ Y2 }+ _6 [4 Q3 p cv.destroyAllWindows(): m" {; C p; [! m
6 E- }. c n3 W$ Y+ z2 T" D b' ^8 W2 Q
if __name__ == "__main__":: e% p0 N" R; {5 n: Q! S- G
main()
. i9 h( r) K8 f9 n( x9 |5 M' p. D6 [% d" y" t4 [4 ^: k
原图如下
/ V6 P. S2 `6 E7 t4 P, Y% X, e
, V7 D# v: b% S4 S! r
: y7 l: x# G0 {/ _2 C+ m: Z( g* p
' f7 i" l$ R) d
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
' V% d( p# o3 P, I, v- a2 P+ l8 ]1 @. `# m" F
添加椒盐后的图片3 H# K9 `" W7 ~& I1 o
]9 r: n; z% l# B% b5 B
9 p2 N; d; X& O6 Y* X+ c
+ S3 b, A7 M. w5 A% E: ^7 @' |使用中值滤波3滤波后的高斯噪声图/ D: `$ U. d2 _- k0 \
+ [6 W7 d8 u) ?5 {! R( P. z$ Z9 n
1 E+ @9 v$ }3 P3 |' z" h
使用中值滤波3滤波后的椒盐噪声图7 s2 B! _5 a5 K# e$ \- M9 J
6 \! \# ?8 v1 H; r; P9 b
, _& |6 p# A$ @! q; h. Z: R6 _改用中值滤波5 滤波滤波后的高斯噪声图/ o y5 q/ y( Q8 x! W$ h% B
6 n; F( W% l) m3 f2 Y
" p1 `$ C+ \) u- z9 @. O) j
+ Q6 u% G1 [8 t6 f# s- z; Q6 o5 P( G滤波后的椒盐噪声图; T ~! Q6 H5 _+ _
. u# C- p8 t5 k9 R9 Y, P7 { @
Z8 r2 C) k+ Q, A @% S( G% Y7 c7 |
( o4 C8 h7 j. V" j) W
结论:
& [. P2 ~( E9 g& V) M2 c& f经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
' {; ^" e8 N+ D1 A' S) C
% X8 B' Y5 e3 e% m) M" ^- v' {1 i |
zan
|