- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 561573 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173845
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
2 I$ \. b. u5 P! @6 F% v( x
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。( G g& j0 d* A+ y$ }/ q
# R* B: y& n" D$ G8 x1 ^#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
' F5 q; P) Z* |import cv2 as cv #导入openCV库+ t. L7 T" g& y, r) e5 P
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。% c8 n# j* q% y4 {" V
#必须首先安装numpy,scipy,matplotlib2 ~2 [+ j2 w$ m4 V3 ?4 }
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
/ e8 R. Q/ a/ T8 H4 k2 J& J
0 r7 C+ k) a" l. Y r; z% s6 u5 A% l5 e' b% [1 m6 k$ O5 F
def boxBlur(img):
# j! \! j1 t) A3 W# p* h1 D7 y2 [+ C # 使用5x5的滤波核进行平滑
" B4 b4 S# i! [9 u+ t blur = cv.boxFilter(img,-1,(5, 5)) $ A) _& U! }# R, G) h% w
return blur# ]* P# h7 Z3 z, L, y) t
' i3 s/ \ n1 X
5 t& y( [) K1 h5 M3 `* V
def gaussianBlur(img):
" a N: t) M$ @: G' X8 m # 使用高斯核进行平滑+ l; {3 h( b7 Z2 s
blur = cv.GaussianBlur(img,(5, 5),1.5); s2 A% `# s3 t! v1 O
return blur& V6 w7 r( ^6 h3 E! r; h7 J: ^
! U; w- S0 p& q- X( S3 l6 q8 X# v. Z' U, K+ L! d% h
def main():% ~2 ~! M6 Y4 i c( z% v/ p
# 2. 定义图片类img( m7 c, K0 h) N1 I. ^ z
path = r"C:\Users\98238\Desktop\Lenna.jpg"
' F0 T% g! x+ @ img = cv.imread(path)) Q6 y4 G6 i1 w1 v& B! L
start_t = cv.getTickCount()
: W9 m( r# @# M& }! Q$ C' J # 5. 加噪声,绘图
/ v6 w$ x% u+ X% g' T. ^3 K; d/ S ##############################################3
4 O( W* D/ t% s. ?% H; [; | # add gaussian noise0 D+ D- x8 C( I/ A% F+ Q7 J
/ X& }0 e7 N k) o) K9 |+ K gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声. h: g- {6 t) T, Y% a
gauss_noiseImg=gauss_noiseImg. j$ L7 P8 F: b, H0 s$ t5 h' X4 R1 M9 [
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声5 P: Y [. P* i8 q2 w
8 }& v8 H+ j$ p$ J: P& g& [ lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波& Q1 N8 i* ~! a# ?/ C4 C$ z
* c* ^- e' Z/ e
lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波# Q! b! b9 n, H0 d; W! X$ h
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
, u$ C/ ^! f0 D' z% i# O' k2 i print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释- E+ B7 r. w5 e6 u3 d- h+ H3 S
* a+ t$ S6 x' k4 U4 L. I7 d/ B
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释4 q9 I* W( P3 c" ?
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释4 x# j! g. B0 [9 x
1 M$ o( J- Z: e6 x/ T9 f0 T$ _/ g I* ~% f" G- J ~& A
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题) I; X2 J ]' P5 ]9 i+ m3 W
cv.imshow('Original Image', img)#输出原图片8 w( }: f) h% ]& s- _: h- o4 p
# Z. _. L! Z" o/ \5 { d
# Gaussian noisy image: b9 G% A1 @1 N; e$ g
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
% [! r) ?2 F- Y0 e cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
; ^0 Z; f& Y6 _0 w- W9 ]4 h
2 G2 P! ?2 a5 H7 T6 L- J/ j # Salt noisy image
* t4 R) I$ Z8 B4 \ L- ~0 m& J cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题7 r% n6 W! g& |; g+ S! _: Q1 ]
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片& ?- u F9 F6 ?. x$ i' g* U
% i2 ]. x1 X: I( Q4 V7 Q- d #滤波后的图像# K: V0 Y* O: ~, {
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题0 _; [3 C/ M. b0 k; b4 q+ M) H3 u
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片, S" O! L" J1 E6 \
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题 k' e4 J- T$ R) V; w
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
$ i, K2 T1 o' ?3 J1 b0 E4 @: f8 t
7 p9 |! U/ R, O3 @, `" m6 J( V# U #####################################################/ \) [. x3 Y3 ?* |8 X
* o. |1 d2 K7 B$ J: \ stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间* I1 C7 I3 P0 d2 n
# S: H, G% c$ w, ~7 |- I
print(stop_t, "ms")#输出时间并加上单位: T2 ]6 W8 V; @7 Z
- _- O4 p$ _1 M) b cv.waitKey(0)8 d; g5 C6 D1 C7 I( x$ m
cv.destroyAllWindows()0 R; |# ? u8 [0 U
* N: T" c0 v8 o, V- Q" A
& ^8 G# U/ a+ R$ c0 [if __name__ == "__main__":
y' X! E7 r' a" f7 r main()
9 L. y1 o$ Y% [/ B6 [1 P
. ~) T% i9 a7 Q J; w原图如下
- G8 W: x/ }' |2 c# S
7 S) q# D2 }. _" y b0 y3 w& S }! ]
3 Q9 G: G5 x/ w% v2 N4 M6 r
$ J4 v- A( O: r4 @8 H( C使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
8 ^" |( Z( [" _$ V4 N! Q
) `3 f# v s# x$ Q# z; ?0 _& b- D$ ?& W
添加椒盐后的图片' K! t4 @) G3 h' v
$ U# K, F9 B# t6 Z+ H1 X
# k# i5 _7 G5 J8 x
# n7 c9 ? A* w: l+ m! i: f# Q+ u使用中值滤波3滤波后的高斯噪声图
% _. I; w% y2 s
% Q D, u5 ]0 k, S2 y6 R
! H. a! f! g* {/ K
使用中值滤波3滤波后的椒盐噪声图/ Y, u9 }& s0 r w: Q" t
4 I, k8 n: b' X' v3 A: k' m. U, M: ^* K4 A
改用中值滤波5 滤波滤波后的高斯噪声图; F& M1 G% r9 r6 y8 I9 f9 l& d9 } [
2 M+ s, ?! j" H$ X6 A# J
6 `, \" H: e# a+ G m) s, ^# K' U1 T% N% j% a
滤波后的椒盐噪声图: s$ u4 c( z/ O; f! X" ]
2 Z2 E: I5 r- q% Z- D( _
7 [& w5 P% y: N
) H+ ~6 I! p( _+ d! S
结论:8 ?! z8 s8 u1 t* j1 E0 g
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
7 M5 K; f: U+ _8 b) E! f0 V- M
4 Q$ B2 }5 U1 }; g7 {- | |
zan
|