- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563349 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174228
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
& ^ o) p- c# g/ e) _2 R; ]图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。) h& ?5 W& S$ Q
. {+ O4 q" X- S3 y#import os #import语句的作用是用来导入模块,可以出现在程序任何位置. ?1 ^% v4 w9 U9 e9 N8 L) D2 @
import cv2 as cv #导入openCV库0 H: m" j V5 c# r1 E- \. g# w4 N: u
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
1 v; v0 P- q! `6 i2 |4 m! F7 } #必须首先安装numpy,scipy,matplotlib* N( T. n' R( r6 [0 }" P
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
% p$ ?0 k; n+ F& K. Z# b* {$ N4 L# K! E, {' {) E; v" Y. c
- x& |/ S) _: w/ B" A( w8 I& tdef boxBlur(img):- F2 b- f3 |8 r3 |7 p
# 使用5x5的滤波核进行平滑/ x0 S/ r. [2 g/ R7 E
blur = cv.boxFilter(img,-1,(5, 5))
/ M" t5 D' l; h6 ?9 A8 y/ l0 `* T, G. w return blur
" I' z9 o J7 a# ~
/ @, q) S: x, ` {
' b" x+ w3 K$ w+ s# h0 fdef gaussianBlur(img):
! Z: B) m0 G- Y2 A- ^' P" [ # 使用高斯核进行平滑
2 h5 C; l% j7 M8 t3 m blur = cv.GaussianBlur(img,(5, 5),1.5)
% X& c- G! N8 Y! q: C6 C2 r% ? return blur
# t) w: K: n; d0 A# u1 E( l( P' F. _0 U4 d9 l5 B
6 n: `' e: \. e% Bdef main():
@$ ~$ z0 S( r1 Q- o' O2 U # 2. 定义图片类img
; d( B, h: i+ F+ F- ^+ ? path = r"C:\Users\98238\Desktop\Lenna.jpg"; V5 t& W1 C" [. j7 o) @7 J
img = cv.imread(path)
' J/ m* K4 b. ? start_t = cv.getTickCount()
' r- s, w/ `1 N: B # 5. 加噪声,绘图
4 M8 r6 H* H1 v- N6 B ##############################################3
" t) W+ v) Q# G+ u # add gaussian noise
$ t* C9 H# D1 X6 O4 A' m
. [5 g- Y( ?* e* h! ^8 i- @7 | gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声. o& I. F$ z% T
gauss_noiseImg=gauss_noiseImg
) N2 E2 v/ a' n1 o! h salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
; ~6 F& l2 Y7 A7 z: B j" ` H6 a' ~4 I! j, ]; }/ a* N
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
3 Z. T& N6 V8 H! n, I* ~4 n. V
' N$ d7 ^% v# v9 Z% k' V s/ M& g lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
1 y: f& M1 `$ I3 U; e print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
) Q1 n L$ Y k2 [ print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
5 a+ A% a/ u* } _; l
# P; F0 b" \! b print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释5 |9 {# \8 I' ]! }" R; V
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
1 b) Q) k0 A" j; j
' p/ X# f9 ^/ C. |+ q3 P. _4 G! n" b+ W/ E
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
2 A! f% g+ X, D+ n* E7 O, X/ k/ | cv.imshow('Original Image', img)#输出原图片3 f$ j) O& v( P" Z( l( e
! }) I" Y: g- G j Z/ u # Gaussian noisy image2 n6 f% A# @' Y/ i) U; D! [
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
, J' Y8 b1 t7 \7 O) H cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
. y7 P' s. f: G* V+ [! a
$ A( U0 K7 v& w( ^2 n # Salt noisy image
: N1 ^- ?' E6 K- |( [# D cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题
1 b+ Z9 Y W( B6 k2 B* p cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片8 N% N' o& l8 V5 U$ A C
' f! x1 G4 [* D5 I. v
#滤波后的图像
( i8 y2 e, {- p/ U# _ cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题& G/ S+ S$ i0 @8 L/ g0 @% C- r
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
0 w' U" J7 J R% J* I cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
$ D7 _! R: C* M2 D/ K) J4 a cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
! B" M6 w/ m0 p9 A1 X$ ~. E+ F0 T% d( a9 ~0 S3 W
#####################################################
6 v5 a5 Q+ E, ~; M& d. f% s6 a
: r' E& {8 T7 D5 k J0 k9 J9 `% ` stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
4 s. T; j. |6 [) l- V3 T
2 U9 |# p* T* r- x s print(stop_t, "ms")#输出时间并加上单位
* ]1 P& T; A% f& {- K' E& q4 y( d2 ]/ P
cv.waitKey(0)' a4 }/ y3 R; l5 F6 J! }% ~7 \
cv.destroyAllWindows()) ~* Y, |/ o W1 i7 x3 u" R) R5 F
# ^ M8 S9 _$ l1 Q8 s, l% o5 N6 R& z. f9 d. ^
if __name__ == "__main__":
+ V% w9 |; P! [ c. @ main()
4 @5 c5 u" n+ H* f: A0 n! j- ?7 r& c, i
原图如下
' K- O( `1 n8 _9 B6 T0 k$ s7 o
; D9 U' s' T) @5 f2 l
4 I" u, ]* x3 z+ Y0 f, t! W" z% F: l C) W5 \
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
: P0 c0 v. q; J$ g3 v4 ^ E" R, }- X( ~; _+ w' W4 f$ u- ~
添加椒盐后的图片
, ^4 \' P* Q1 v! X; t
$ _9 f i; S3 ]4 |3 T
% ]) R A# `1 C! i, i( r J7 ~/ v% h) y2 Y+ |
使用中值滤波3滤波后的高斯噪声图 G+ w: S: m, Q* k
$ l* I `$ Z( R' ]& W" c9 s, |& V: @9 F! \
使用中值滤波3滤波后的椒盐噪声图2 r- ]: X& U* v/ S
' A: `5 m; e' a/ K- x. B; [9 d- A3 ]# _3 ~
改用中值滤波5 滤波滤波后的高斯噪声图) m0 e8 [8 g% J( }. m
) G4 B: B+ v$ P6 I+ [0 \+ A
Y2 M- v9 S K7 G8 ?7 ?' h
% H; }+ d+ J6 }; ~7 W! j3 q P滤波后的椒盐噪声图/ b$ R6 d( N- F4 Z9 c& P
; D+ h+ O0 E' W% ?! C
1 z% _0 ~) D$ _2 s3 H4 ]
, P9 I( t# [* \ |5 E" f% i& U7 T% j2 R
结论:4 K+ y* x0 N$ F0 J/ y& ^6 L
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
/ K6 y4 g9 j- i$ z- K. O* }' |: ]) A, {8 S. T
|
zan
|