- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566309 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175116
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
# E% f7 k( V2 l+ t4 H7 ^, q+ _
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。, m2 B* N1 Q0 C8 {, l# o+ _
$ U' N3 ^$ R/ B4 m, L#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
) d* B6 p/ h! N! kimport cv2 as cv #导入openCV库
# u# {# @* @) `8 Eimport skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
3 n" ^( ~5 s" t, D #必须首先安装numpy,scipy,matplotlib& _* T* @% L4 i+ W! U, g9 L
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。9 e. s1 \ ?# ]8 v$ ?
Z0 }1 R# C) n: d, Q9 ?+ |6 S, j& I7 O3 G2 F
def boxBlur(img):
" I/ T7 n8 g7 u # 使用5x5的滤波核进行平滑
1 ~; F+ p: R- P+ T: ^ blur = cv.boxFilter(img,-1,(5, 5))
1 C8 Z5 {5 P9 b- r5 D return blur
/ c/ M' N( X" H1 S4 R- V! m2 w% ?# B; j& [* j, {, J& O
" o. o4 H7 v7 y+ H, H o2 ^( B- s
def gaussianBlur(img):
1 u& Y' P& I2 g( Z # 使用高斯核进行平滑 K6 L# q, Y: |* I
blur = cv.GaussianBlur(img,(5, 5),1.5)# o2 [ ~6 q* ?+ f2 B8 x
return blur
5 ?+ w% N; L% B0 K) q: [( K, ]6 g1 [" N3 t8 D* T5 L3 y6 k
( H7 z4 e! E5 O, B, j4 Q H8 b, Q5 @def main():: @, a8 a' P' o- [
# 2. 定义图片类img
- k3 F' I. L. X; J path = r"C:\Users\98238\Desktop\Lenna.jpg"
" b. ~+ b% ?7 \9 O6 f img = cv.imread(path)
- v" m5 b8 l! L% ]: w: D5 U; h start_t = cv.getTickCount()
! K( B5 O7 b+ R # 5. 加噪声,绘图 Z8 }' N4 z7 f% P
##############################################3
7 p2 `' B$ t4 Y- y7 F # add gaussian noise. s4 q4 i; a& y$ ~) |
$ X& D, H% S8 y2 S( } gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
9 b' ^8 {6 C1 m2 \$ G% M3 Y gauss_noiseImg=gauss_noiseImg3 y$ h4 v" b6 K6 o" Y
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
7 h% x0 C' t1 }3 Y; {/ n' [. Y; k; O" `
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波 y' j) r1 ?- n, ]+ q' e9 W) b
- c( n/ h& w6 { O0 v/ a) {+ p
lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
7 V& b7 S; n/ ?2 @% L print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释8 i/ r) l1 Q0 ^4 g$ k4 y6 l
print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释6 ~5 B; q/ D% c9 _$ d4 g
$ O0 k$ [+ B" c" n+ h
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
' A. Z, E: r' v: `8 S print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释/ P! {. G* L8 z
- c" ^. Q6 B, C- w7 b& w) P8 D% i @: s ^' @* h
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
9 A7 f. S' D y# k cv.imshow('Original Image', img)#输出原图片
0 g2 ]3 F. C- U' B- Z/ ^, c, c5 R8 G; f+ j* x, F( F1 S
# Gaussian noisy image4 m& r C- f; g6 k! j( S% a# X
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
( s: V) p$ n% w cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
9 u- A/ G9 a$ G Q* c5 R( N P' c7 l( _
# Salt noisy image% m9 @, K# D. C6 h- Q* ?, p
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题% w5 {. ~5 N7 Q X3 n
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片- Y" j/ ^% V0 g* C2 p% [
8 }) b) c J9 a! }+ Q) C
#滤波后的图像
* }/ {4 Z* }- z% ? cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题$ y. h6 c" ]. U& ^
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
& i8 T. v# }! ]/ D9 x cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
3 U P. B! |2 H+ P b cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片& i1 Q- s' J0 _; x* i! H0 Y
) L* Y& D. M! `" B' \- v) D9 F
#####################################################) Z1 ?, M; K2 }6 p
0 k `0 k. S: H# e stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间/ o' u8 }6 A) W9 r/ q
# R1 i/ d, R* b) ?5 C4 C1 z
print(stop_t, "ms")#输出时间并加上单位3 q9 P U7 h. Q
( g2 e- V! u# m* U! l; \
cv.waitKey(0)( `; E( l9 r6 _+ m d! E
cv.destroyAllWindows()
r9 D) {- |' |# e$ G9 x& h7 e [* p, ]6 `
) \1 u0 v% i. W) M' t w
if __name__ == "__main__":8 W1 U# H/ A3 z/ d4 x' Z
main()9 Y1 k* F6 F! Y3 o$ Z
3 Y* @3 ^# ]: U- B+ z1 Z
原图如下7 l% E! P* K: r; F
; J' f& U' H6 G$ A
8 _5 ~9 o3 T& w) Q; L; A( {% w$ S! X0 J) ?- c
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
0 }* S- w4 m/ |# F
`# M7 U7 Q( F9 U& C3 L
添加椒盐后的图片
$ L9 T: M' K, u, g7 o
% r! H, r: N3 L8 Z) W' V
' E2 o7 T% Z0 R8 U8 K9 m! D% \
' M- y* {/ K3 b% c% H
使用中值滤波3滤波后的高斯噪声图
9 W6 g M! @! b3 C2 Y, j+ H! D
7 y" x: {$ y2 K+ U1 j( l/ ]) g
, D* E+ m: {8 D8 E- V( ^; {; B
使用中值滤波3滤波后的椒盐噪声图6 a4 Y# j3 R+ U1 {' j: _1 h
( d1 T* f2 I6 Y4 _; t2 Q4 n# S9 R6 C! E5 @1 _
改用中值滤波5 滤波滤波后的高斯噪声图4 G# K% y1 O7 i* `+ @
& i# s2 e0 i$ [' d0 b* v- @
# S+ l3 ]( d0 n8 t$ A* Y
' A; [2 v1 H$ |9 t! x9 x滤波后的椒盐噪声图( n/ v+ i1 J* f% e% F/ R! ?' _
% ` L1 D9 n* z3 m! C: o' [
- ?: L4 z7 E f# `: y
! K3 U9 c& [% h) y5 d+ s5 C0 K" V* v2 _
结论:
. B+ O: K( t8 u1 x( @ r2 `经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
6 o* ]. H3 l( `# d! o9 A( m9 W
- ]5 o+ O& R; P- ~ |
zan
|