- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 570093 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 176251
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
7 s v$ t7 g8 }7 N
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。/ f2 N* @/ o" p. ?
6 a9 g9 T2 _$ ]9 A: \
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
9 b: Y) d/ b% m. A8 ]' Iimport cv2 as cv #导入openCV库9 ]& V' Q! @/ K! s
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
9 R0 `/ M" U. l" G' M1 q #必须首先安装numpy,scipy,matplotlib
" `( K% z- g6 u; F, Y/ X3 Timport numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
@# g8 `# E" e+ F* g8 L# G4 S& V/ f* M9 A7 e s5 J8 O
" z# A: w5 H9 {) d- m+ j, w: V: `. Pdef boxBlur(img): c4 [6 g1 x: d2 z1 x
# 使用5x5的滤波核进行平滑
6 t5 B$ J: [" x/ i blur = cv.boxFilter(img,-1,(5, 5))
$ ~; j8 @; R6 G+ |' k- U return blur X( t; l7 b, Y3 H8 |9 |) y9 D' l0 E5 |
- T( c: O) ^& I1 Z
6 i: \, }- ^# t& s6 a5 odef gaussianBlur(img):
! b/ s4 \/ v& M! L' Q* x # 使用高斯核进行平滑
! C" ^3 L5 U* T blur = cv.GaussianBlur(img,(5, 5),1.5)
5 i3 t$ J0 b( h# K) ^! f* j return blur7 i+ a" [; c, J6 T8 p7 B1 T$ C
6 ]& T2 L& R5 z& v( {, ?
3 z; Y4 D5 _) x& p2 ~def main():5 K8 T( D# M/ t& Z" ^; A
# 2. 定义图片类img2 N! t% _: R. D' x7 [# r
path = r"C:\Users\98238\Desktop\Lenna.jpg"0 a* i! v% a1 o8 B! c* s1 z
img = cv.imread(path)
7 |2 n" D" T! K+ x* |. o start_t = cv.getTickCount()! y9 o% A. U" r- |; }" a% s- Q
# 5. 加噪声,绘图6 j$ Q# x. m8 p
##############################################3
7 u2 ]& m+ j# V+ W+ a6 ^ # add gaussian noise
/ X3 K% D$ l8 p
: x5 z% k# P7 k$ ^: B gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
3 ?$ r$ f$ ~% i' \0 v: s9 v gauss_noiseImg=gauss_noiseImg
5 P/ M3 ^0 `7 G) M% Y salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声. l, [6 e5 b$ B: d
5 T- R) y4 r* J4 y& Y
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波: p" ?5 w* i/ p& d# l- D
3 l! I2 h8 u1 [8 p5 y% O% ~' S
lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波 P q6 _6 |: \% `6 H& ?: F
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
: i, j: z4 t& i! L print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释. c1 K! @/ B1 ^ a+ F: X
6 z+ [) v9 p: m- z) y
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
$ E5 e+ w; ]) c/ r- i4 S% @ print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
& I3 Y3 ]4 P3 q& Z7 P
/ r6 D: F$ v4 z4 N6 T! m" M1 h% f; | f+ s$ w
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
7 |2 f( v4 q* B3 E cv.imshow('Original Image', img)#输出原图片) }8 v, n1 p( u% m* Z" y: C6 A
& Q" j" z# t0 @
# Gaussian noisy image
- v) C) M7 y4 V7 b: w8 X cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题, W+ ~/ O" b( R x
cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
; o: Z6 D) ~; A, U) k) y, i g! Q$ W3 n$ i! A3 {
# Salt noisy image. n( S3 C, g7 \
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题 N9 C8 Q( ]% H8 h
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
9 [7 {5 ~; r, v3 c( p. E
9 a, A: X: W" b, B! { #滤波后的图像
& u* R$ L8 W( W# { cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题8 e# P$ S5 ^9 s4 C5 \* U
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
5 S. S' f V1 l7 w cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题& p0 ^! R/ {# k/ l1 m- B
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
# ^ @7 z+ Z1 E% b' q3 o a$ \3 e" u5 k* P M O$ I
#####################################################
7 ]6 N0 C0 _, z( L+ E- _
+ K/ N# h; v) n3 v J4 c stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间* g6 p4 z- H* u% X( E! t6 T
# k/ B* w# @ ~ print(stop_t, "ms")#输出时间并加上单位$ U+ h' j( \5 K8 H0 j
- o* L+ H! h* ?0 ?% D cv.waitKey(0)" N) u$ @8 o+ C ~! C
cv.destroyAllWindows()
/ C4 s2 \0 v; d+ W: v g% ?% j, W6 f2 t
, Z; P" N- u( J! ^! Nif __name__ == "__main__":7 B, Q0 ?- u* y% R; I
main()
7 r, L! @$ K# P- l. d" j1 [/ D
原图如下
' K+ M4 J, S# ^6 y
& z' M, Z) _ T' b) v
w6 e+ }. T5 c1 m. M- u) r
* F2 d4 i) U" ]* _
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
! T3 s9 k+ F$ v$ b* E9 x7 B( X8 [4 b; O
添加椒盐后的图片' e: n9 r9 T' b p1 t( p5 V0 W
6 X3 L; Q: s" A. O
) ]% z5 G! C& y( M2 {
; k4 L! M: @. m& i; s使用中值滤波3滤波后的高斯噪声图
2 y$ U" W8 c) c$ \" G* j
. l2 _' P2 n5 w' H! X/ A
$ c" g. W: J- s6 V8 Z
使用中值滤波3滤波后的椒盐噪声图
8 a7 X, V, q- h' N
9 J* P$ P; Z2 o$ J+ x# R: l. k; d* J* a8 K4 ~5 r
改用中值滤波5 滤波滤波后的高斯噪声图
" {: _' l2 ^# a2 d. o1 t2 |
; ?# }4 g( S7 I7 U1 \! L
% V% n6 l4 L. u8 N- Q
J! D% `6 g* g) w滤波后的椒盐噪声图
/ D' ? |2 M/ r5 J0 {; W* p& P8 y9 Y6 d- k
& L& Z4 N3 }4 \$ T) p
3 P% m& |: l/ a! Z8 b) k0 v结论:, H, Z" B$ }7 b5 D
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。* \( m& q$ F% i1 S, m
?% y: L6 z$ R1 y v$ m
|
zan
|