- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566317 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175118
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
! _: m2 K2 R2 ? S. \# H X
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
. s$ S* P+ j0 ?2 n: w: \! {& M9 R- c* a7 l: o
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置! C0 z$ I* P$ P% w" J& E! S. i# g
import cv2 as cv #导入openCV库
: g a: C8 `9 n' j/ ?8 D6 E% Z% Oimport skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
( ^, b/ ?+ ^7 N6 F- g #必须首先安装numpy,scipy,matplotlib
9 \) e, \6 Y2 }$ I1 C. _import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
) n/ `# C1 L0 w1 ?1 R# x
$ g$ d& S) a1 A8 N5 q, v/ j
1 d; c0 _9 _8 F0 d; A/ ~( s# [def boxBlur(img):
% T& K( v* ]! ~7 T; K: n # 使用5x5的滤波核进行平滑4 W3 [$ ^2 q) Y
blur = cv.boxFilter(img,-1,(5, 5)) # G0 V$ m7 R w: H1 s! ]
return blur: R: H. Y* m- ]5 j/ D
& d& g; x$ G( |+ @# s. y/ N8 U. [! d% [; z9 x
def gaussianBlur(img):5 [5 e( a2 n* c& w4 W9 W( k
# 使用高斯核进行平滑
) m( A8 r, g8 y; `% d* P7 Y( q) C" E blur = cv.GaussianBlur(img,(5, 5),1.5)# v1 y: t' K( S. E, N& Q: k
return blur
: X- N+ h7 [ J) e* r/ g. J- p6 E; I# |. ~" S8 J' Q0 I( x
* ?4 A7 [0 a7 H& x$ p, P' |$ X+ i* {def main():
" ]+ o4 P9 U' e # 2. 定义图片类img4 `) J; D/ F J5 y* p
path = r"C:\Users\98238\Desktop\Lenna.jpg"
0 W: J# r0 f9 ^! P! t img = cv.imread(path)# Z, E$ G( h% T9 \' i7 O$ T
start_t = cv.getTickCount()
, d7 q; u2 n/ r# C # 5. 加噪声,绘图
7 ~3 @5 ~0 W0 S2 _' O1 _0 l+ k4 ? ##############################################3
$ ]2 o" m$ x0 n3 G # add gaussian noise6 D/ Y2 [6 U* N2 _6 z0 f
) K# t' T* t- r/ f9 T5 ]$ x
gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声8 o J+ _& v' e( s* x2 s
gauss_noiseImg=gauss_noiseImg
2 F9 ]4 N* j. b4 |6 ]; a salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
0 h: _ J5 s1 o# r
' q& I) l9 J; O lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波, d( X( T* V/ A0 m- v3 }
e, W) D+ @5 G; K lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
/ S4 r6 b$ F$ w ?9 Y print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
1 Y% J l# d2 n/ h8 v7 i. D print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释& N* O6 n' w( Q0 l# C, Q
0 C' g5 L% k/ n ?) Q; A
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释+ J6 J* S( J9 C; K# S* g
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释+ h$ F" Z$ Z+ X; m
9 m" G9 f2 n6 h& E5 ~; w) [
* V/ D' o1 N& h4 u1 c9 X# _
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
2 F) ]) u9 [, }8 L) {! F; }* i: c cv.imshow('Original Image', img)#输出原图片
1 [. }2 j1 D' \& N
, J( I3 [0 w( W # Gaussian noisy image
5 I( G) h' {3 I, N) g, @: K cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
$ Z- G1 b% x, I cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
8 m8 k4 k+ T0 H9 w! q4 W9 G- I1 s* R) `! ^. ?
# Salt noisy image: ^) x# s' Y+ ~, n/ j
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题. [) D' j; [4 C& C" c" W k
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片- N0 N. c) L3 Y% L3 J. K* F* o" ^
! P+ O0 O- m/ p' N9 J" |: \ #滤波后的图像
7 f: |; w' O! }: k cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
0 |. R/ o4 [# H) T. ]: ~" d cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片/ X- D; p. N5 F7 a/ U
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
7 e3 w1 X5 C- J cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片 e7 {; K* E$ ?9 p
1 P, X; |7 l$ l9 U( Y4 E8 Z #####################################################
3 ^1 f6 p3 i* V6 L3 h
# \- [) u* ~+ v- i stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
* j! k4 h: w" Y9 H% ~- \0 j5 [$ I# D$ I9 P5 G4 ?7 x& {
print(stop_t, "ms")#输出时间并加上单位
% Z. W% u) ?5 i% @1 S7 b ?: I+ y& M* ]& `- C6 g3 w
cv.waitKey(0)1 ]% |+ X' a% D U8 I
cv.destroyAllWindows()/ W9 H1 w/ P$ g+ q" Y( _* q# k
+ P5 i! K2 s; k* A
0 W1 ?: D! {9 p6 m7 b
if __name__ == "__main__":! S: X% K/ t1 V# u& s
main()/ q' L) P. @7 a1 l; d
2 m9 c8 ^* Z' Y W/ j/ G `7 E
原图如下
. n) R3 a2 ~$ ~: S" r3 g
! s; L; n( C- S7 n/ ], z- b
* k r- J+ ^4 j( Z, {
. l. s, Z4 h3 \, h# S
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
* V$ {* h* M% Q. c5 E2 H1 K" S
! P! H& Z9 @' g0 Q( m
添加椒盐后的图片/ W5 b# d2 Q) k/ K. M6 `
3 s _" @( b& A2 _3 I( O
5 v0 l5 J: p! A: n* |" h
8 E9 C [5 S8 ^! ?! @' G6 e
使用中值滤波3滤波后的高斯噪声图4 S% ~9 r1 Y# e
- p( ?* u+ `& f
5 u$ m8 n" r8 b2 p: J; @使用中值滤波3滤波后的椒盐噪声图0 {8 E5 y [2 S* l# R/ n
2 F ~4 L; A2 V. O3 s+ ?: h
3 Z1 J( G% u) y, n: k3 R改用中值滤波5 滤波滤波后的高斯噪声图$ P$ Q+ b" x1 I% Z" Y, K& E
4 H* }7 H; ~6 Y+ }) `8 j
3 g. o. G& u) i! V3 G4 m+ f; Q" w( Y/ J+ l: C
滤波后的椒盐噪声图9 ^& |6 F+ A% i) e6 }
9 y' D- C. l- a' f |: ?0 R
, a% _# N& u" Y4 |% i/ F6 A
) @, |7 D, K b/ C, y6 v5 {4 H8 A结论:
1 t# r: h$ t( C# L; h经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。' t( w3 Y' \3 Y7 F7 C# m
; B: |1 W9 d) V: Q- y |
zan
|