- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 566297 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175112
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
: r# Q9 n9 N' Q3 D& g1 ^
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
' v ~8 e/ I n$ N4 p y, D; w- [, |1 t8 O a. J' e3 j5 |
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置9 Z/ [/ u' P7 n
import cv2 as cv #导入openCV库# d, J e' y" L( V; c" [
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。- f# \" r1 Y. x% ~9 l% L4 O) u
#必须首先安装numpy,scipy,matplotlib
4 s' N. }0 m# a( `: fimport numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
R! A# O. {8 U! u* l
, ]' `" T2 X% @+ z9 O! ^
$ v2 d5 ^/ F* `- A+ z% }5 X9 \def boxBlur(img):
n: e+ V: c( x" W* B ~ # 使用5x5的滤波核进行平滑6 Z: J2 i+ e! i$ c6 m
blur = cv.boxFilter(img,-1,(5, 5))
" f; {8 q* X2 o/ p+ D% D return blur
1 E; T R% j( k0 U
z/ `$ f+ x" m ^) ~* R6 }, S+ o/ y9 y( o( t/ F0 M0 D
def gaussianBlur(img):
; z! ?! T0 v; `3 G. q" W # 使用高斯核进行平滑. z4 I1 w5 Q6 ]" H. b x7 x
blur = cv.GaussianBlur(img,(5, 5),1.5)2 _1 m1 Z7 O4 _" `
return blur6 _5 ]3 L8 Q+ w, p3 Q
8 N6 S( B" j: G5 P8 R9 O7 ^
- ~. @8 C9 p9 c" R4 l* D
def main():- s' d2 H V" _3 ~* T
# 2. 定义图片类img
0 N' z) d1 `5 T( Q# y; C9 ]6 _7 j path = r"C:\Users\98238\Desktop\Lenna.jpg"5 I; q0 Y' \4 ~4 F! @
img = cv.imread(path)/ H* |8 T8 s& U1 O# ~
start_t = cv.getTickCount()
1 \8 L/ C" `9 V. B# j # 5. 加噪声,绘图
, @3 a$ Z* e4 [7 E2 n' S% q& ? ##############################################30 K) H9 }2 \ ~' X# l- A
# add gaussian noise
) A& y ~% P: ?
! r8 \2 a3 ]2 n# O H4 t% l3 |# O; G$ s gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声( D7 Y" d. d. `1 g( h1 `
gauss_noiseImg=gauss_noiseImg
! z, g8 M( r& ?' f/ }! W salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
8 X3 V2 D7 c! Z+ j( D- l2 v0 h8 ^
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波) a4 l# F" K/ u* ]
1 A3 T. |3 U3 p4 q
lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波$ z2 v+ X0 H. ~
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
( C' `- m1 Q, T7 w* D) O print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
: A. R) e0 C/ ~. J0 U
2 Y. K4 D" G5 S8 K! }8 B2 N' O! q print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
& c" B% R: `) j- T( d; i print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释 \7 X: k( b! |1 l9 E9 {
) @$ S5 R$ _5 {" E$ x# e
' J2 X/ ]3 \1 t# x2 p
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题2 L# L( I1 K: p6 W8 @1 x) a
cv.imshow('Original Image', img)#输出原图片+ t j* @, z% C- k- I5 [. m
& O; q. s! @2 g& c
# Gaussian noisy image: z. {5 p3 j1 n5 R7 w1 s* I
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
* S0 ~$ y; J$ k# J( \1 W cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片' E/ h; J( k1 g9 N, l' E' M. C
2 r, [5 P# L. m2 J& O6 G9 }% S& v8 m7 j # Salt noisy image
5 y# |! Y7 z( d& M4 x" P( r2 t cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题
, _3 Z0 [; X5 } cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
, m2 f* I: p8 B* E! q9 C; T
! r# L# O& Q6 D- p% J* [9 P# [ #滤波后的图像, q1 T: r. h9 i- b# z
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
1 v D3 W+ I+ i cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片# w; [/ S* \ V! y" A
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
9 [ o2 K/ l- F5 _- E cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片; H5 c6 Z; P: Y" ?
" r" y# `; z; e4 T
#####################################################
" \ d& h* B1 ^( h
6 s$ C) c; {/ P9 H4 l stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
3 J. L4 m" e) F: P8 T$ g* Q
+ R* y1 x1 l d print(stop_t, "ms")#输出时间并加上单位- S+ t3 v& N4 m. r& H: l
7 O1 N- V8 |. t0 f, \* a U; o0 D
cv.waitKey(0)
: C) b" T& c* w. r. K2 K# A cv.destroyAllWindows()- _ b n: w4 p
' j7 L6 Z6 R; ^: M r* u0 `- K0 V$ R2 Y, P7 ^8 _
if __name__ == "__main__":
7 c1 k; M5 g! O7 b; A main()
7 p* l4 T9 s/ y' r# r& X8 z* h1 F9 [3 \/ e! [
原图如下
' w" F+ c* h: h( h+ @$ q: H: Y, O) c
]: J1 M# ?7 ~
, ]) u( V6 E$ d. x7 f使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
3 P; n6 Q( L* \6 c2 U! ~* J
' {6 f3 s, f+ |: l
添加椒盐后的图片
" g* _! p" X& }( O; l' v- j. y2 r# N$ c3 o- x# ~
$ R. x# ^- e6 H3 c. i6 B9 z1 @, R
使用中值滤波3滤波后的高斯噪声图
$ B* i: F# Y% C. m+ g" E# ~3 t3 O
( y" L4 y9 w H( u& N" N! n
3 f! S( g9 n! W使用中值滤波3滤波后的椒盐噪声图" A# V! i$ q" ~2 t9 P4 E
) Q7 V+ ` A" Z% d* D2 K8 l2 F' a5 e" l9 v, `9 Z7 N
改用中值滤波5 滤波滤波后的高斯噪声图, i' L, g* [ m. J
% ?% z' H$ _( u# l) n
) e" |/ i. b4 }
3 b4 S0 O; n% A; E5 V, l8 v0 u; T滤波后的椒盐噪声图
* e% m: D' W2 v" C- ]& G- Q/ }$ U. i5 A% R
9 I7 b% _- R. |( Q
8 o6 {( b- z) Z9 N, A: H结论:' S1 L1 q8 X8 Z; N+ P: Z
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
0 G1 S8 |# e/ K* |5 A& U5 R, I& N" c3 {
|
zan
|