- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 559096 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173102
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
4 `. V1 s5 F! z' e, E$ o, P
图像的加噪与去噪(python)高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
$ d4 {" G- K9 }
, G. C; i( B1 Z% V5 p5 X#import os #import语句的作用是用来导入模块,可以出现在程序任何位置 p3 K, X Z$ o( U
import cv2 as cv #导入openCV库" @# d3 J9 h5 ~/ a, @9 N
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。& s, ]& L! x' d4 O4 q. F% a
#必须首先安装numpy,scipy,matplotlib5 V0 m6 V1 N R/ ?/ S' d5 q
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。 }9 v0 I! r4 w$ K0 _& ]4 {
2 o3 s8 v0 b9 g" m! @1 x7 ]: Z6 ?+ O# E! Z Q; J4 |2 Q; Y) I* f6 B
def boxBlur(img):
$ c# R @& T e- U; y4 L; W. E # 使用5x5的滤波核进行平滑+ V" K3 b! D* w+ v6 g2 `6 R# a
blur = cv.boxFilter(img,-1,(5, 5)) 4 |8 D1 |" X9 x, o. e* |
return blur
* i2 i% o% J1 J/ C1 N( f2 d% v9 w" R& L3 R3 y- T4 W$ S6 Q4 E
0 H# _7 v( B: X% x
def gaussianBlur(img):2 K6 |" m+ y( x
# 使用高斯核进行平滑9 e+ K. G) {9 F/ b Q
blur = cv.GaussianBlur(img,(5, 5),1.5)8 U' F" q) C" b9 i+ C$ v
return blur+ t) |* r+ T. G. \# F4 f
4 I* ] @$ P- p3 O/ h
5 n% Y) P; N% w8 W4 e v
def main():& |+ c/ Z% g' l1 q
# 2. 定义图片类img7 J6 @' z) k: Y, B; y
path = r"C:\Users\98238\Desktop\Lenna.jpg") V$ ` Z p0 I) k# l+ _
img = cv.imread(path)! t3 K& M7 k# q+ G* E8 R" g
start_t = cv.getTickCount(): [8 y4 K8 P/ M6 ~9 I# F; U7 b
# 5. 加噪声,绘图
9 D- o0 z! M/ g% [/ D4 O$ V ##############################################3
" q2 I& t0 i( [, c/ B; E- A/ g' c # add gaussian noise$ l# k( Q& |5 {1 N0 ]3 J
: {% q. w% Q- M0 N E/ g7 @ gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
|4 c- q% T3 T9 I4 p! ^- \2 L6 [ R h gauss_noiseImg=gauss_noiseImg
9 l. d5 @: e2 X& ^+ o% v salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声" \, M0 }2 _6 T; d: r- ^6 o8 H' b
9 n# i1 J- g& {% `( B, r5 C5 x lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波 F9 W) j3 v7 R
4 W2 J( D. t7 N- p2 \6 K# Y2 s lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
7 A: l; h! w. ^0 z# h% U+ W2 C print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释& Z+ o5 c( _ i6 m* q' h9 J
print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
8 s6 k" Y$ y+ P" _" `/ ?
+ E% N) d9 U6 b F3 ~ print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释' [7 N+ K @8 p" M9 a
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释. A, F* r" ]. Q$ w6 ?9 P0 \9 G
% l8 S, ]# e9 E1 K, I
: d6 W3 Y* a N" l- { cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
" G& D2 X' G, K, a: A7 I% P cv.imshow('Original Image', img)#输出原图片; E4 X% M# _- A* m& U' a3 }: ]
/ p& @ v! S" y* U! f, I
# Gaussian noisy image
! N6 a/ |5 Q. ^: s: @1 S9 ] cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
8 j% Z9 ?# n" ] M5 \ cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
) x7 S" g* g" \4 f8 G$ ?+ |
3 O1 x1 ?+ [8 `5 V1 ]9 I+ d. f # Salt noisy image
" _/ l1 b8 e5 l! i& w4 I cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题& T' L) \* J% m' ?' e, `. `
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
9 V' }- Z* R. X1 x, R% t4 Z6 b r/ ~5 ~1 x$ R5 o
#滤波后的图像
; U4 b! j: U/ e cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题( A- a! ^5 @, J
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
' x/ S% d( M. Z# [5 b9 c& J8 L cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题& v: G7 c1 ?6 G, B1 Y$ g
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片9 P' Q. O6 _- y- b3 G! n2 u F, y
& u, ~6 u' B( M$ K- c5 [
#####################################################7 ^- c6 ]2 l# [$ C' j* H5 N' _
7 j. Q5 r& Q& }/ A" v
stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
% k/ z& c1 P; k8 h8 l$ @
1 |6 _: m! q3 F6 i! O) D7 h print(stop_t, "ms")#输出时间并加上单位( m; w, y1 |8 z9 n
& V* y+ {+ [ [+ t
cv.waitKey(0)' }, s& F5 e! ?2 d! L& g
cv.destroyAllWindows()
6 [; I" n) C* c
: R7 y9 X. l P) v$ f* e& \5 e9 H! E. }2 c$ o1 [5 Y
if __name__ == "__main__":
4 Z5 u8 Z' ^) m ^& Q6 F main() S, R) w* @! d% b( Q+ m! H
" w% v) {& O) y' v; u$ h
原图如下
0 O5 v& ?) W/ T, O1 |& M; K* ]
% j( d0 w/ z, X5 B8 y4 Y! g
6 f" `8 c! F, L9 @9 w% X
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下 添加10%高斯噪声后的图片
# m/ p. ] ^: y6 \7 B/ k/ `" U
; U* Z- u; d l添加椒盐后的图片
) V& V3 Q+ R5 f' A! X
. S* V8 ]2 R0 z
7 ~ T7 }' J8 n7 s& u6 _ `, q! f
使用中值滤波3滤波后的高斯噪声图
; A3 J! E1 T& c7 r6 v$ @
" `( q8 L$ |2 \( ?9 [/ l& u% M3 Y6 _- |
使用中值滤波3滤波后的椒盐噪声图
( F9 `' i! h0 f* E* V4 S8 J$ ~
@% X( H8 ^7 I8 G5 b& v4 L6 ]
' k3 I# `/ Q. s) q改用中值滤波5 滤波滤波后的高斯噪声图& t* d! | ~$ X2 a* M9 @. o5 U
' u! ?$ y8 O0 A% s/ _
( V% G2 x" X* e ?5 ?3 T" O' j. J8 M
滤波后的椒盐噪声图
5 t) X" R) v- E) \6 `# s$ G; o8 v$ Z8 `* K! ?
; x! Q* i9 u E: S! |
' s) b8 w9 v+ e( X4 A5 D结论:7 A n8 @; M/ @# _
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。( O G- N/ x: A7 I' l/ n
3 ]# f9 F$ k1 h; B+ N; Q. S3 O
|
zan
|