- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567083 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175348
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
5 c/ K2 E) B/ z图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
' l1 c1 Y# S7 l" f0 B; O# N
Q0 S+ h7 G Z$ z! \! B1 D) R5 ]: w- D/ l#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
, }- g) A* ]2 S# G) z6 ?6 I: `- Mimport cv2 as cv #导入openCV库( W. a% ^ P! [$ C' e+ N
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。2 I& u ^ d( v: V
#必须首先安装numpy,scipy,matplotlib. F1 B/ E6 F4 `1 ^6 X6 L. x6 M6 Z
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。1 B* }& Z: G# O) I" C& c, v3 Z
# G3 \( k( ^+ G% P8 V9 h, P5 Q3 g
- v m" f8 H) z( r& adef boxBlur(img):5 z$ i0 G6 o. g& L* L& f& v$ h0 s
# 使用5x5的滤波核进行平滑/ ]6 A4 o2 X G# H y3 V
blur = cv.boxFilter(img,-1,(5, 5))
5 t& F* N* Y# |: g$ f return blur
% ~- t& m2 E: e
! j- M- j% |+ W+ h6 }5 x( S0 ?: M. I
6 A! w5 A; j0 N$ Vdef gaussianBlur(img):7 S2 {9 ]; G6 T$ Z2 S
# 使用高斯核进行平滑 z+ n4 `% P. t8 {. }5 [
blur = cv.GaussianBlur(img,(5, 5),1.5)
. Q/ B `& q0 M: ]9 o- C, L1 U return blur; y( j$ D% |' S, H" _4 n+ K* x. Y& p
& d7 m3 |; E6 [4 B4 ^
( ?4 r9 }" R+ M: ~% ]! n7 F& T
def main():) h$ w+ M4 Z+ `. I
# 2. 定义图片类img8 B) K( W9 U' H$ G4 f" ^
path = r"C:\Users\98238\Desktop\Lenna.jpg"
, Z( u8 {5 W) u. d& M# g/ z. {7 J8 ^" F img = cv.imread(path); e; c% S8 v, P" b2 w; q
start_t = cv.getTickCount()3 R2 Z2 Z. v6 x* N
# 5. 加噪声,绘图
3 K' b/ E* C# W0 [* I ##############################################3
2 n" o: L3 z" v. c$ n, H% u # add gaussian noise9 C. B( ~9 B) N+ H c5 K, L
3 t+ F! P3 j" M l" b+ c* I. M$ ] gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声" l$ D" d- k }2 ^& j7 `5 A
gauss_noiseImg=gauss_noiseImg$ b9 q/ ?" K; ^( i% g. s, i
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声7 R8 A' [$ G; c( l' A% c8 G R
$ y8 [! F7 D0 [% l( Z7 X* T lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
& M4 |1 I" i- c3 ^7 a A
( W. d+ H: S4 f" v4 [- s( e- V t lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
7 h; q8 }5 D6 x8 r print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释" ?. [! j! z5 u
print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释5 f' [. x0 Y2 H1 i
. K0 N3 D/ z5 i2 h6 x' } print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
% U" e5 H' ^- D h: d print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
- `* a( f- b" \4 [( k
8 y, T! R$ ~" c2 p }1 Z5 A$ r% M f7 {/ ~ ?8 f
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
0 C3 {; f+ A) L/ }; L- A cv.imshow('Original Image', img)#输出原图片: _1 ?& ]: q W9 q9 E
2 f! A& M, Y% t1 i- {9 G
# Gaussian noisy image
6 w! t6 S+ V4 h: K3 b [ f cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
2 d" x% F% W' @: U2 e! r cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片2 F; X9 i2 h, b* m5 I6 |
3 `4 \5 q9 d# Y" @ # Salt noisy image
( V4 T$ {: J$ E& m2 \4 T% K3 Q cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题% ^& h9 Y) }( w, ~; p/ X& I% M) r
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
2 R; F I! \! j8 t/ {" B. k7 j v) u' P" {
#滤波后的图像
2 E, Z( S3 K1 D/ A: C cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
0 v( Z) G* `+ a+ ]! T cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
$ S- h! p" O* l! O$ @ cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题4 V; }; P V/ }" z# G ^1 j
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
) l# _* A9 u# j0 t J9 A1 P
) c3 e) A4 T: i2 ?4 S5 _ #####################################################. t2 n# `: t: p$ {8 J. f
7 O& h: Q9 ^9 A6 _% |
stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间. n- p& R3 w, Y5 d3 I- s1 c
/ z" y; ]) l, }, p print(stop_t, "ms")#输出时间并加上单位. X1 i% h, T& k6 u
}0 r# i3 g+ T+ ?
cv.waitKey(0)
6 y, N. L" |9 r# a7 M cv.destroyAllWindows()- o# n# n4 r9 T
8 ~' Q) @- a5 L. `% ~' o& u
0 ^& Z, X; U. H- b0 f" qif __name__ == "__main__":" L1 I2 R* G! Y y$ T
main()7 f$ i \; v2 h% Q. p3 x
: }" j; b( a. T- q6 b, z" m原图如下
4 h9 H% O! O) u! w+ v3 k$ q, o
1 x$ @0 L/ C, m! \+ K4 T
7 @0 Z$ I X2 L6 F# f
' L( p. ~. u- L$ | C3 `* y! y
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
" A) x I; ? T3 l9 k
* h; v6 W7 C0 r5 O4 @/ t添加椒盐后的图片
5 ], L/ A2 A; Y) G1 T1 E* M) G7 o U1 V2 S' a* d$ q
& L4 M3 \3 k5 ~, i& [* y$ I9 M9 {2 \
D' ^6 i. P* m. D6 B' E6 t( l
使用中值滤波3滤波后的高斯噪声图
5 {. Q% n4 L9 M$ {
1 `' z9 d+ I! m; x& A8 \' j7 K; m
使用中值滤波3滤波后的椒盐噪声图# r0 z8 g: T6 l
; `2 d; o6 j7 m$ L0 u! L
9 \$ b3 H& ], R- p+ B, l$ d8 z3 B1 \
改用中值滤波5 滤波滤波后的高斯噪声图
3 K$ Y! m% |' r9 Y
* a* K; c4 E* K: j+ ^/ b4 M- Z( Q
- b$ P2 j! f0 H: n% \9 L
, I; ?$ a: C0 T滤波后的椒盐噪声图
% E6 z- K* B& W/ ?4 ?! F
) v' n: }$ W( x8 D7 P! L; N! R
, F* u: v, G, |" P" F' p; y* M
0 n+ M. Y. _) N. y! b结论:
( O) [' P* ]' g# i d! L0 b3 c4 ?经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
+ O0 u0 ], Y) Z' P; U( C0 H& }$ W4 d
|
zan
|