- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564672 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174624
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
' L' F' i% V. m6 x
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
% p8 u9 L0 }$ C
: Q) d( i* K, s! q# f$ I, M6 s#import os #import语句的作用是用来导入模块,可以出现在程序任何位置9 |. N: J9 I) ~- S
import cv2 as cv #导入openCV库! f- J2 y5 x: k$ [- ?3 l
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
" o! }/ f- N1 v# n6 _, g #必须首先安装numpy,scipy,matplotlib
$ t+ m9 l5 ~/ v4 P( Q3 Y5 `5 ]import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
" R0 J c& B+ [! a/ M% D
5 p4 I" F& R& ]3 {/ K% _, u+ W: E0 @* W; h$ y% E8 S
def boxBlur(img):" r7 g/ S7 o8 j; R0 a
# 使用5x5的滤波核进行平滑
9 I$ v: N0 v4 f* I blur = cv.boxFilter(img,-1,(5, 5))
# G* i& n* y; s0 }0 _6 @' I1 c8 p return blur
% e; W) @/ Z7 F; S! a4 C/ T/ L. n: T0 B9 F ^% [9 C
% f5 H3 c0 E. k" edef gaussianBlur(img):
. ^) `( z/ \' N! H: O% D$ c # 使用高斯核进行平滑
* d0 O; b/ D/ U4 K9 P% E blur = cv.GaussianBlur(img,(5, 5),1.5)( P- ?( ?+ Z5 K
return blur
9 c/ \4 \; B' K( y# k, n
: C5 W+ \1 R/ T+ U2 X$ |$ T
) \/ N2 U G' gdef main():
8 ~0 C- r: i& z # 2. 定义图片类img4 `& K" q% ?5 D
path = r"C:\Users\98238\Desktop\Lenna.jpg"
& H4 m8 B! h6 T0 C" g img = cv.imread(path)9 M' L) L* B8 t3 B6 o) v& w
start_t = cv.getTickCount()( H0 X! x! }) V) g8 _8 ^
# 5. 加噪声,绘图* E# ~8 w7 f" r+ e
##############################################3" Z- u' Q3 Q) Q9 e/ @
# add gaussian noise
" z& z. @0 C, I. d2 z2 A% O/ ^0 U; \. w
gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
2 ^) I5 ^' l) I5 Z ^: n gauss_noiseImg=gauss_noiseImg; }% U& ~7 f S5 u
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声( c2 u c# z$ [: e3 g8 z
3 v) K! [& G# X% w$ N8 l4 ~0 R
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波$ W1 {) p6 A- y+ Q% H5 K4 B# U
$ C/ R r$ C- Z S" N- c lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波6 s6 L9 k# F! d* B$ f0 |! P
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
! t7 ~- M* o0 y8 S; c, f- Y print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
0 L" h" s" R) z9 J& X" T0 K7 \8 [
1 B* n9 ~- t M4 ^% V3 g4 z7 Z* x print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
) |3 A% Z9 K' J; c+ w* @7 g* [, m print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
# P l# |8 D, I5 {( D. C' m4 s: l) `0 U6 w! f- c' P0 |
. @5 `0 ]5 l8 ^' f' l G
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题% ^" d( u! q. z) ^# J$ T* u- `5 w
cv.imshow('Original Image', img)#输出原图片
2 I& `: V1 f0 v7 V- m4 c) `5 f4 f/ L( X; K- Z5 w5 [ I: U
# Gaussian noisy image
# |; M3 v& \) Y" h N6 ~ cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题4 y2 }- K" U8 k& C
cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片5 o5 n; Z7 L$ c
# R# J. J+ |& c% b. T) z
# Salt noisy image1 Z I3 j7 U n1 Y( y5 _
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题( |: }9 R V ~, d5 o e7 n
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片, q5 I7 p; k1 G' ^+ _+ h: ~
7 l1 {- a7 ^# _& Z
#滤波后的图像$ i& K/ Z8 [$ E# i6 i# f- Q
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
$ Q" n" C- M$ U+ G2 V5 f/ U4 e* q cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
3 s( m7 F* k# J% G, L/ D' X cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
& h" e' r4 T; V: V" f cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片* J3 I0 S! m5 }
: G6 a6 E. @8 f6 V0 j #####################################################; P' _' x5 j$ J& Y
! f* A5 O' U: n& B. e! n, f5 p' ] stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
1 D) E4 }& K4 H% T' p7 N# ?+ a* r; p2 e1 w5 }- y. Z) L/ l, k
print(stop_t, "ms")#输出时间并加上单位
- v3 d% c# w/ Z# j" ^, Q: Q' e' ~; Z# H M; G; W9 c
cv.waitKey(0)
3 {+ g+ y" p9 ^9 _3 {$ k0 V cv.destroyAllWindows()$ f! x% B- _" k7 i: s/ @3 E k. }
- X/ g# r, D8 M4 D* X
( C$ q+ {1 M; l+ E
if __name__ == "__main__":/ J9 x1 v& \6 o- w6 a
main()) m6 B8 \* P0 @9 u' d
% o0 z+ O( X- a/ i: B2 R4 V
原图如下
9 P2 S2 M% Y4 B) ^
3 A! D+ ~; u- e
2 o" E3 O% H3 q1 ^% b$ X: \
* d8 I( u% C. |) c6 q. h1 r
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
$ J# E# k; [; _& |; Z, i7 ?9 K
: Q+ w- m: I. x k/ Q7 J, ~: p
添加椒盐后的图片
" h6 w# \" p9 Z. U6 n1 l% b/ }8 g# u \& x$ d
v& ]9 L6 G8 t1 N: O% x
% L, E+ Y; m) a使用中值滤波3滤波后的高斯噪声图
: P8 S0 X( ?% b) H! C# S
$ X+ p. E8 \/ C) `( j& ^ ^; a
& J; k- C% l; L% B6 o$ |/ g( E2 I使用中值滤波3滤波后的椒盐噪声图- M" y! s" [# n9 D
9 S& N( B( X) ~! q9 y3 o7 j
2 T; U3 s8 T+ Q5 g改用中值滤波5 滤波滤波后的高斯噪声图
+ V4 d1 O; m; t) m. L. D: r) V% m" \9 I K4 m
% @1 U, V- C0 j; O5 ^( ~3 h8 _! Y
7 p' P6 N: B0 s" }& N$ R
滤波后的椒盐噪声图4 [# v& n1 r( K3 y/ G% t! f
2 e( I" Y: w# C8 l
. j9 y' P* c. v4 m' i! w' O1 D1 @* C1 C
结论:- W: O# t. @, g& b9 _3 E8 U# v0 c
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
8 e7 D9 X& o8 L% N- ?
% }- k" o7 n9 z7 F" i7 \ |
zan
|