- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558923 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173050
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
) X6 j- L8 ?& D* o' A图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
8 L+ j7 e. g0 v
9 a- |6 c3 d; J& t#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
$ P% W% V2 _ {! _ P, Y. v# Rimport cv2 as cv #导入openCV库) t% c2 _. R2 y3 ^4 C/ F. j
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
/ d7 [; `$ U$ S2 H/ V! m/ Z #必须首先安装numpy,scipy,matplotlib
! Y7 N8 [ A' H5 y/ L4 aimport numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。$ C' h9 L7 n% t- d* r
, f; b( }$ g0 d" O- z0 X [5 u
$ L% M4 R1 |) Xdef boxBlur(img):
( |2 Z& n* G9 Z# i7 n5 } # 使用5x5的滤波核进行平滑2 M& n$ x/ C' ?4 J- O/ c
blur = cv.boxFilter(img,-1,(5, 5))
7 U2 o* _" Q0 U( M return blur
, B+ K2 a; D) Y: Y) l) P( h+ I
9 n; N+ Q; Z" p1 c& n3 udef gaussianBlur(img):: s9 z/ V; N$ r6 E1 R/ X A. K; l
# 使用高斯核进行平滑/ l/ K; q0 R% M; \1 J
blur = cv.GaussianBlur(img,(5, 5),1.5)5 `! b5 Y8 ~. D
return blur
{7 J' z. F% q7 k( d) G& Q T4 i% f C, d( A! m- a. @4 Z/ W
" V: D; l$ J( c( E& c8 u# @def main():
; ?/ O' ]+ z f7 | ^0 g9 [0 x # 2. 定义图片类img
$ T8 P* C7 Q& ]& x- B$ I path = r"C:\Users\98238\Desktop\Lenna.jpg"% B0 N9 Q, K1 l+ L: U9 o9 H: l O
img = cv.imread(path)) |+ l' f# ?7 H2 s* M7 H
start_t = cv.getTickCount()
l" ^1 e! i% q n3 q& l # 5. 加噪声,绘图
8 m* p4 }- \3 j! {2 v% ?5 S4 J2 @ ##############################################3
* j' U b! j7 I1 m: b% N6 Y # add gaussian noise5 Z6 |$ H1 d5 t; H! ]1 j
8 }% B5 H* c* g4 D1 D! }, M gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
) e% Y+ \& A7 ]) E& g4 A gauss_noiseImg=gauss_noiseImg2 i; y/ |1 L9 [: M
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
6 C( y$ |4 I' Q; P: R& `4 X) Q2 N) S: C b. K# ?5 n
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
* o {" Q8 J; X8 H5 O
/ d! z" k9 @; l J- Z3 _9 Y8 N lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波% y/ r; m6 E- D+ A% W
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释$ N0 ?3 ?+ T# ~3 i; m' f
print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释# E" j" a9 D6 W6 a
5 z$ x; \! H0 P& K" k3 I1 j+ L print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释- ^* p* h4 c% m! J
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
$ U# ]* @4 ^- K
+ z3 r: x; t9 o$ q1 j `( i, z1 x* b9 R# {& m$ s% d n. h
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
0 H7 X8 b c, c: S4 z cv.imshow('Original Image', img)#输出原图片
- ?* E% K. T2 j4 Q% e/ R( @. X8 Y' t$ ?# c+ \2 N# I! _8 I
# Gaussian noisy image9 C+ l: y2 r4 t
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题" L( `/ N, f% o' j" J9 G5 O
cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片( S8 r7 E# H0 |) v: `
+ J q- y2 P$ o! |8 a
# Salt noisy image
2 E) ?5 R% t6 R8 M' @: _ cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题0 U! j! ^9 [6 T( x- f) [4 g
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
+ s- A4 W1 z& ]3 l; \/ Y' ^+ H" H
% O1 H) `0 v8 p" b5 Y0 T #滤波后的图像+ A2 H/ H1 x2 b+ y# }4 W
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
% p; \, O5 g7 z) ^. s3 k cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
B+ Z* L% B# J2 y* B8 b9 P, D cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题6 a5 x# N1 H* _0 F& `
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
2 l8 I8 G( |; W- F O. d: q* p& Q9 g8 B, {8 e2 u8 R
#####################################################
7 a, ^/ r" v& B- b4 T' y2 j5 C, A7 s9 {+ g: W
stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
u+ P; ^# s6 \8 S3 n) c
( I) y/ d9 p" r1 q- f+ M print(stop_t, "ms")#输出时间并加上单位6 S V+ a4 ]3 ^ j# S: I
4 U, p' k2 Z M* ]' ]( Q5 [ cv.waitKey(0)
3 a% R: c' r+ j2 p4 s/ Y cv.destroyAllWindows()" w& p# d7 p8 i& L- }6 r1 P+ ~1 _
! u* ` L: ^7 x. g2 Y; B- g1 a# t0 w1 A" A( }
if __name__ == "__main__":+ H' J# Q5 B8 Q) O
main()6 O h+ l2 M0 J4 \( Q
1 q1 |- K2 `; |7 |9 j3 ]' {5 c, y原图如下7 k S* `0 b! S( d. ?+ H4 `
* W5 R! h. w$ w+ _! G: P
( E1 |/ u& S2 Y' A) w! P; N. m, e' O9 H6 `- K
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
, p; H% M, [3 u- s( J
0 J. F5 B; J D; S' h, t
添加椒盐后的图片+ {- ~$ B! s! n6 h
6 L9 f) P/ q( z
' I. W- ^' G# `9 |
. b+ F( Y7 a& z+ g1 k; |. F
使用中值滤波3滤波后的高斯噪声图) p$ x5 W, K l$ W
6 U8 o4 Z5 I$ V$ B; c7 k1 N
& P5 }: r8 e+ Z' P9 @
使用中值滤波3滤波后的椒盐噪声图
( \& A: Y# n: m c4 h: k @
* D7 z$ h; Y9 Z% @6 r/ Z
( J; H) o7 }1 q7 Q% x8 H. k* N# `
改用中值滤波5 滤波滤波后的高斯噪声图. [4 f4 e, n, V
! @8 a0 t% G8 R4 R
/ v2 Y% d) N& j0 O9 o& r2 Z8 b+ E/ Y! a1 n3 q
滤波后的椒盐噪声图
: `2 \7 F1 F3 c3 W' _$ Q3 \9 g0 r; p# k% U3 L9 P0 o, I
+ N' P K9 R r+ q; R
: `% j( @; g8 L+ c结论:
F& r8 d: E+ B9 M& w) T经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
) Z# V; e5 E) i6 v2 {' Q6 f7 O4 Q. m7 o
|
zan
|