- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 559207 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173135
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
7 r+ l- g6 _6 r8 e% |! _- i( R图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
. m( }% N ]4 R) R
6 L- U$ K& f$ _# @#import os #import语句的作用是用来导入模块,可以出现在程序任何位置1 m) q+ E& [! N
import cv2 as cv #导入openCV库
% R5 b8 j' H+ k5 a3 B# U* fimport skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
S/ [2 [% q" D' o; m" M #必须首先安装numpy,scipy,matplotlib7 }/ B+ M* @' T, ?& V
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。; b7 r7 \# y% k' U
& J$ i, v9 E% x; \5 n0 I( H: K
& |! H! p( V# \: ndef boxBlur(img):
1 ?9 c- |) W1 y9 {7 a # 使用5x5的滤波核进行平滑0 I5 f: |: J! ]% U
blur = cv.boxFilter(img,-1,(5, 5)) - f! M8 `( U/ j' d0 {
return blur) z v1 E! i: o2 [- {
9 ~2 c5 j! ~3 _; v$ ?+ O' X! ?! l: R5 t+ x; m/ s( n
def gaussianBlur(img):
+ s, c, a: k/ t/ k" @/ `- J9 c. O2 J # 使用高斯核进行平滑
- u) s/ s" _0 q2 G( B; w blur = cv.GaussianBlur(img,(5, 5),1.5)
" X9 C1 s9 y0 D6 i$ S1 K+ s J return blur! }" E6 ]& X2 a- e# }
8 O, p! J+ Y2 O. S$ G* i- x3 Y
/ a* \* v. l' rdef main():0 R& h8 R& D& z- B
# 2. 定义图片类img" H" _- B, w z2 E; h
path = r"C:\Users\98238\Desktop\Lenna.jpg"
: _! F5 q, e. s6 @ L5 O( b9 X( s img = cv.imread(path)
% |0 ~% _4 {( H start_t = cv.getTickCount()' r1 x+ J* Q7 j+ j. m# d
# 5. 加噪声,绘图
) c8 Y" S$ ]8 z+ v/ P ##############################################3: t! p Q" \6 T4 P* U
# add gaussian noise, J5 N& c' L( H" G3 y2 i1 b
( }1 T6 |, d) c p gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声; n8 [% V( S; R
gauss_noiseImg=gauss_noiseImg/ B e1 ~8 _% ^& Y2 O$ r" Q
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声9 A9 ]1 Q, ~- W/ |3 }
* y( ]1 _0 u6 y5 e! Q V' U
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波0 T4 U5 |6 G/ m& M
' t8 K) N; G& Q A0 `0 } lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
4 V/ b9 |' O, n: l( l print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
8 o- G i: D. C print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释 x$ S3 n3 V2 X" l# M. o
, v1 \6 M* n9 `0 u print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
. C* z! i/ n2 l print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
! ] o* a- D" n
( Y, a& V1 ^" B+ m$ q
, a. P3 ~5 u# b: A9 ~/ `) J cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题6 O2 L4 A. p0 Q6 n2 V+ y& r
cv.imshow('Original Image', img)#输出原图片
Z7 ]2 L8 E! w/ D8 p
7 n9 v* ~# R9 ?* K3 {6 i7 w # Gaussian noisy image
) V9 I" I$ E0 [; V0 C cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
" ^8 f3 U3 f' O4 k$ x, v- X cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
) U: E! I; [* T& h9 J9 O+ j+ W, Q+ r8 \- p4 @+ G
# Salt noisy image
4 n" Q& F7 Z9 E8 j2 C# g cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题( h( F1 |( N# ]* t& L9 k( O
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片. e7 c5 y6 P8 g' u4 D
4 T1 j2 _( {. _$ c7 ] #滤波后的图像
. Y' V# A' j: B6 k2 [$ l cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
0 `( z# o$ l" G3 }* Q- ~6 Y: D% F cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
$ i( A, G- c) Y( I& p5 ]" i cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
. S3 k' N( z; w( o cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片0 S2 ]% D8 n8 f8 F c
, j! _2 k( v3 G' k9 F1 O #####################################################/ h& F& c* {& n7 `' E4 [
+ T! }9 x" H! R4 {; D& s
stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间/ Y: i* s5 ?6 V& z! G4 }. m" j/ e p3 ~. P
! @7 N1 ^ ?6 N
print(stop_t, "ms")#输出时间并加上单位
3 o' X9 K2 Z" e! t/ ]
7 W# |) V, Q7 Z' E, _ cv.waitKey(0)9 P) }" Y& k! z7 T, i
cv.destroyAllWindows()! x9 v8 ]# B! G: F% h! A, [
" ?2 N9 ]3 y" F8 I! S
' X8 f7 @$ e0 L& Q1 Wif __name__ == "__main__":
+ W% X" l8 D2 \$ q main()0 ^8 p0 j5 U1 c9 m( _1 O; n
9 V2 \9 b' _6 e
原图如下9 i9 t/ V! `4 `0 P3 m) Z
/ g. a4 I. C, b6 V1 H
, e& d% H4 ]( ]% N j! } @1 Q' k: |/ E0 Y
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
& X4 s3 T7 [5 h4 x1 U: q# s
$ @/ Q. a2 w9 ?1 v# {添加椒盐后的图片
# W& }$ B1 Q7 \9 K9 Z' I% A, Z7 a
, }$ i4 ~" j" C# Q5 s8 e8 a! G
6 H+ _, @. j/ q1 U m
o- \* D* Y7 [* c4 R$ Z9 v7 ~- L使用中值滤波3滤波后的高斯噪声图& G( Z% m; \- N- a+ ~0 P% U, [
$ a; p' y2 b4 c. Q4 I5 g% n0 s0 \6 o* W, N; M x
使用中值滤波3滤波后的椒盐噪声图
2 z) h- g1 I3 z5 g5 y' l1 Q
$ Z' u. a0 q8 i# n9 R* F
9 l& \6 |. B) X. }
改用中值滤波5 滤波滤波后的高斯噪声图7 q, p/ C( K* i. T% n( L) O9 u
% k7 q. Q' c! @! P3 p
( l+ L8 y! J* L [( x9 ^
4 v, y6 d- ?+ Q4 _( E4 H滤波后的椒盐噪声图
# ]9 e* T$ b+ A9 x4 F
, ]* |; O. s4 D
$ b2 C* m4 h2 H( \4 c
- m8 V2 o& b$ X3 h5 F* d
结论:3 t' n+ o/ P- L; @7 j1 Q0 I1 x M4 q
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
+ X3 J- K' q* O; d8 y8 U6 ^) m3 ]4 M; v& o; R. L' c: Z; J( j+ V7 F
|
zan
|