数学建模社区-数学中国
标题:
图像的加噪与去噪(python)
[打印本页]
作者:
杨利霞
时间:
2020-4-28 15:43
标题:
图像的加噪与去噪(python)
0 e( ~! W1 q6 Y, ~' s
图像的加噪与去噪(python)
高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
- s2 b/ Y0 v, V* m. N
1 A% Y& a |* J; P9 J, Y4 e2 _
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
- B: }: k9 A6 y$ v# G: X
import cv2 as cv #导入openCV库
! J0 Q6 i+ H6 d8 A* V5 J8 x- ]! ]
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
& x1 H9 s; u! W w ?$ l5 X9 A
#必须首先安装numpy,scipy,matplotlib
5 f0 H8 U. o4 ?1 J+ o3 f1 f
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
( ?" `1 R+ t! ~$ R3 f/ E0 V
. Z3 y2 I( I$ T4 [9 H3 E
& o F/ W; ^( U5 w; `' q* c7 E* E
def boxBlur(img):
" A8 p6 y; h* P/ p, A
# 使用5x5的滤波核进行平滑
# Y4 N) F3 F; d0 H* c
blur = cv.boxFilter(img,-1,(5, 5))
+ X/ \! w9 k* c: `: l
return blur
( g! Q5 ^& ~8 _; n
5 ~( ]6 I/ F! V1 e5 f/ U: \! m4 U, w
* B R! @2 S% E; _6 V2 d O
def gaussianBlur(img):
# {2 O; C6 @6 F; @8 ^+ J
# 使用高斯核进行平滑
, `3 h4 t( H/ I, R: [6 y2 Y
blur = cv.GaussianBlur(img,(5, 5),1.5)
" t# b }, |- [4 @
return blur
( G8 O$ t8 G$ `
$ \6 p! ^; e* v7 ~9 g: f' C
% E1 B8 n/ Z% r9 w9 d! Y0 f& l. P
def main():
# ^3 K9 F" W- @# T! D' v, |
# 2. 定义图片类img
9 t/ S8 M- H8 L* H- o5 K/ v
path = r"C:\Users\98238\Desktop\Lenna.jpg"
6 T& O$ ]( K/ \( L& K
img = cv.imread(path)
- \2 h8 v8 ~3 ]3 P, X: z' U& \ M- S
start_t = cv.getTickCount()
. `) K' [* D- c5 F$ S9 N
# 5. 加噪声,绘图
4 o6 L) h* J x; W# j' j
##############################################3
& R7 Z& h" _9 q8 d' q
# add gaussian noise
. p7 Q# w# F* }5 }9 L! s0 T) D
- A' X+ [; s# C u
gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
3 b# [0 _; |+ B& b5 s
gauss_noiseImg=gauss_noiseImg
& a7 o- l1 }1 H
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
* ]8 [; N+ ~& s/ l" t3 j
# r F& m* Q5 m
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
; a2 r7 w6 x, m: f/ T1 W/ F
" V: |! F. \* f- @/ V) w
lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
0 u, R4 J7 l# P m
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
& B. ]4 j" ]3 H
print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
6 b6 V& ]2 h+ F# z7 a
2 i5 M& n( V: L5 Z5 z2 T
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
! T. @* g! c3 m4 M" e
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
3 L% U1 h( P) q& d
1 D7 J9 I- F# I& L; X, _* m
' n1 t/ Q4 X9 u5 y9 K' ^
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
% N/ |$ Q' B6 }" t7 s7 j+ T
cv.imshow('Original Image', img)#输出原图片
8 ~3 o* H6 o4 t8 M$ B
: l; E- k9 f3 u4 D
# Gaussian noisy image
R& d8 W* Z6 _5 o1 U
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
- a! H2 s( \7 v8 _2 |# p& |# v, \
cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
5 B) s( k8 W# V
% J9 N; b. H: @0 l' }$ t( P, e/ h
# Salt noisy image
* _1 N+ ^6 N+ v8 O) ]- F) E# S
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题
" v% N6 B" F' I7 ~9 f9 S
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
0 I/ g& Y% _+ {! V
$ L" x. u6 ?& a1 V# S/ b
#滤波后的图像
+ r3 i- ?; z* O) y p8 i
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
5 x6 Z. O1 N: a% q9 i. P
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
) O6 u( a1 M/ B, A! Z
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
' y7 S8 F- E. Y: T" k
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
6 |0 i/ i, h/ J' w
$ y3 X0 j8 O' c
#####################################################
- N9 y2 U% E+ c( K% B
, _1 ?: ~( l4 L Z: W' Z2 w7 V
stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
, z% |# A3 J9 ], P; P" Z
% ~7 F7 G0 ]! V* |
print(stop_t, "ms")#输出时间并加上单位
$ z3 y* Y% Z, A# I2 W- `
' c& ]; U* ]9 V5 m: Q2 t9 |* K
cv.waitKey(0)
0 a! I; l; i* @
cv.destroyAllWindows()
+ N1 Z8 x* ^: {6 m" R
( E5 R: b$ u0 q- b! c$ A
0 ]& w5 _- m# C0 [" b
if __name__ == "__main__":
3 q3 Y, \, I1 T! q, ?
main()
' C5 s' j- E+ A0 R x
* _3 |. x8 K; z7 N; R
原图如下
' E e, V9 X/ A; P
3 \0 ~. o9 m% ~2 }/ y* J1 x
2020-4-28 15:39 上传
下载附件
(264.67 KB)
) W! o: D2 y9 G0 {, P& {; w
2 T: d' t; E- J! |8 p7 O- k
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下
添加10%高斯噪声后的图片
2020-4-28 15:40 上传
下载附件
(405.19 KB)
) P2 D9 T1 T/ V5 H" k6 ^( j
5 M" [4 Q1 a) L. K# F7 o/ t" ^( O/ Q- v
添加椒盐后的图片
; @0 Y6 i4 `/ N; r k3 t9 P
" B6 X( ?' n$ D- ?; l. j
2020-4-28 15:40 上传
下载附件
(352.86 KB)
# J. d9 [& [7 Z* k
! d) ]1 t& `! k* I8 h3 G. Q* Z
使用中值滤波3滤波后的高斯噪声图
; |0 n. F$ g! c- d: C! J
2020-4-28 15:41 上传
下载附件
(318.37 KB)
8 F! y: A1 G0 W5 n! l
3 W% C' v1 f |7 a) r; F [
使用中值滤波3滤波后的椒盐噪声图
% P' Y- ~7 r8 X1 c; F
2020-4-28 15:42 上传
下载附件
(239.79 KB)
( d0 z) u) b7 i/ ~' A
4 J7 O$ r1 U( o: Y$ n1 N* B- u
改用中值滤波5 滤波滤波后的高斯噪声图
) K) g) Y, a' }
" o; V4 B2 s9 W. D
2020-4-28 15:42 上传
下载附件
(234.62 KB)
/ e& p' c# M( C2 P0 x9 g1 y( B; X U
4 P, R" m0 K4 A: L9 u
滤波后的椒盐噪声图
w Z1 [0 i5 P5 _ p" f
3 A5 I& T9 `' V
2020-4-28 15:43 上传
下载附件
(185.09 KB)
( P5 w& N" @9 _4 R1 a$ ?9 K# N# L
0 H& [* ` X; @6 I7 p( \ _! a
结论:
+ _8 i. X# G {: k$ a) H' ^3 l: Y
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
& |- e2 R2 R' m9 q' i
8 N2 b; H& [) G2 v( z( v
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5