数学建模社区-数学中国
标题:
图像的加噪与去噪(python)
[打印本页]
作者:
杨利霞
时间:
2020-4-28 15:43
标题:
图像的加噪与去噪(python)
7 _3 M, t% a$ Y# ]4 C
图像的加噪与去噪(python)
高斯噪声(Gaussiannoise)和椒盐噪声(salt-and-peppernoise)均可通过Python库:skimage实现。
- h' g. S: P0 I' {
+ h' j2 E+ z9 X1 X9 v- Q0 l% x
#import os #import语句的作用是用来导入模块,可以出现在程序任何位置
( }2 {$ T1 l8 q+ u9 g! M
import cv2 as cv #导入openCV库
- s) P4 E/ p1 r
import skimage #导入skimage模块.scikit-image是一个图像处理算法的集合。它是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,方便进行后续运算。
" o' e' H7 q2 H7 `+ m& M/ f
#必须首先安装numpy,scipy,matplotlib
$ b. b/ u x: T2 D+ ^ I/ L I# J
import numpy as np #导入numpy模块。numpy是python扩展程序库,支持数组和矩阵运算,针对数组运算提供大量数学函数库。
5 Y2 ]1 \5 p! i7 j
6 s/ c# j$ D5 v. g3 h; _
8 A7 ~+ V' Y! d j3 X: r
def boxBlur(img):
/ O! T3 V$ N6 d8 @& _( w
# 使用5x5的滤波核进行平滑
5 @' h& a4 O' v3 a. \
blur = cv.boxFilter(img,-1,(5, 5))
& Z) s' o/ {' J: h0 j' g
return blur
6 H; R- w- y2 `; c1 {: d
0 ^; M# H r: i9 M5 I/ T5 t
7 ~" j1 h2 K- N u' F8 a: m. u. C
def gaussianBlur(img):
5 k5 P9 @* i1 b7 W4 @) g5 d
# 使用高斯核进行平滑
# s4 |/ W1 w& g) _" j
blur = cv.GaussianBlur(img,(5, 5),1.5)
) H Q/ U4 r: w; `* r5 T
return blur
& ^/ d3 n$ y$ a5 H# Z) D5 k
9 |* o/ l! b9 f7 A* e$ b
: ~% c0 }! V+ b R
def main():
8 o' x- g4 I. y9 v/ {! X' T
# 2. 定义图片类img
$ @# Y( \ i/ f( g- l
path = r"C:\Users\98238\Desktop\Lenna.jpg"
1 |4 c4 D! i2 p* O+ A5 Q0 ]- P Q) H7 C
img = cv.imread(path)
' T" `4 @8 ~% k( Z: G0 Q9 e
start_t = cv.getTickCount()
$ K9 B: ~( q t# O' x0 F3 Y2 a: c6 i
# 5. 加噪声,绘图
, F% a6 D+ c- C; d2 z0 |3 M# c7 ?: L% z
##############################################3
/ T1 I' I5 R8 V X
# add gaussian noise
, h" X6 N/ f2 Z
. E+ n Z }7 R0 b$ {6 v- X4 p1 x
gauss_noiseImg = skimage.util.random_noise(img, mode='gaussian')# 添加10%的高斯噪声
- F4 i( B# s+ j3 i! a# N
gauss_noiseImg=gauss_noiseImg
8 E% b* j( k/ r# a# E7 _
salt_noiseImg = skimage.util.random_noise(img, mode='salt') # 添加椒盐噪声
4 g% \/ |& Z8 {5 B1 h
- t! w5 n$ `/ n# t, z; a) n
lb_gauss=cv.medianBlur(gauss_noiseImg.astype('float32'), 1)#中值滤波
5 J: H, d5 |+ r$ C
2 \' m0 B6 ?+ l
lb_salt=cv.medianBlur(salt_noiseImg.astype('float32'), 1)#中值滤波
* y9 j$ \8 _- C5 Z* Z) N
print(gauss_noiseImg.dtype, "gaussian noisy image dtype")#输出一个注释
& @' g9 o% C; v: G$ t
print(gauss_noiseImg.shape, "gaussian noisy image shape")#输出一个注释
. A/ N4 O1 ^! Z
' k, `% Z' C, s" N! J
print(salt_noiseImg.dtype, "salt noisy image dtype")#输出一个注释
1 [/ u; |1 u% [9 i
print(salt_noiseImg.shape, "salt noisy image shape")#输出一个注释
, A- Q: j: ^9 i" Z
( G# j+ I9 j3 J0 n5 s
. f' w* j/ W \+ A# N2 j! f& d* \
cv.namedWindow("Original Image", cv.WINDOW_NORMAL)#输出原图片的标题
( i) [4 u3 l( }4 ?3 t$ a
cv.imshow('Original Image', img)#输出原图片
- x3 c w& a% \/ S
- E7 @. m) o. b
# Gaussian noisy image
" ?" k- \: j" k( P8 s1 \
cv.namedWindow("Added Gaussian Noise Image", cv.WINDOW_NORMAL)#输出高斯噪声图片的标题
. |- U' x! n+ y; r; Y+ k
cv.imshow('Added Gaussian Noise Image', gauss_noiseImg)#输出高斯噪声图片
8 w6 }6 O; _; `- m
( B/ H/ H8 N' c* L, C8 i) T
# Salt noisy image
# p/ ]* r; T3 V9 n/ G# k; A4 |8 o* E
cv.namedWindow("Added Salt Noise Image", cv.WINDOW_NORMAL)#输出椒盐噪声图片的标题
8 [8 W6 {3 Z, t1 [1 a
cv.imshow('Added Salt Noise Image', salt_noiseImg)#输出椒盐噪声图片
) j6 K) K0 k: M- M7 Y
8 Y& v" d% o, W5 F6 j
#滤波后的图像
/ y8 x s. c& D' u: [3 A: N2 l+ S
cv.namedWindow("lbguass Image", cv.WINDOW_NORMAL)#输出滤波后高斯噪声图片标题
0 k8 j! D% V1 C3 z! @1 u. t
cv.imshow('lbguass Image', lb_gauss)#输出滤波后高斯噪声图片
( ^. @6 g4 Z1 E; j% [
cv.namedWindow("lbsalt Image", cv.WINDOW_NORMAL)#输出滤波后椒盐噪声图片标题
/ P1 o$ i7 k7 T0 D G; |
cv.imshow('lbsalt Image', lb_salt)#输出滤波后椒盐噪声图片
: d% t" e# ?" J0 f# l% c8 E
& M2 N0 _. ^0 ], C# P( X9 K
#####################################################
9 V8 I, I( Q2 L$ H* p/ O
; @. l" ~- ]9 M
stop_t = ((cv.getTickCount() - start_t) / cv.getTickFrequency()) * 1000#运行时间
3 U" {* S# s6 m P8 [( j
' a) s* g9 L5 E1 I0 C
print(stop_t, "ms")#输出时间并加上单位
: O% W9 {) f' X7 S) z$ v% U
, M Y* Z0 @8 C, u2 `% }
cv.waitKey(0)
6 @6 B h3 [- x) x+ B" c S5 e
cv.destroyAllWindows()
( f0 c4 v3 B8 L8 D3 q3 }
& H( @ l8 x( ]& d2 ^
/ y7 u2 ]) \* A3 w3 u; s
if __name__ == "__main__":
( b$ y. H, n9 u) J; ]4 ?: n6 `% r
main()
8 E/ }2 b% C) _
- [+ f% }" ?! @" ~" T0 q1 b: x
原图如下
. O/ e9 q+ m, B* y& h/ l
- N$ \* x- \3 J0 o
2020-4-28 15:39 上传
下载附件
(264.67 KB)
* @8 b+ V- C: j3 B2 a5 c
6 e4 `* G+ Y0 r& c
使用10%的高斯噪声、椒盐噪声,以及中值滤波为3 结果图如下
添加10%高斯噪声后的图片
2020-4-28 15:40 上传
下载附件
(405.19 KB)
2 i# Z( u7 r0 b2 N8 x4 G$ w
* X; s; i* m' m+ P
添加椒盐后的图片
% G- G! r4 ?9 Z* l# |1 A
$ @3 L5 `' N9 D2 _* A% E; J! Y8 T- x
2020-4-28 15:40 上传
下载附件
(352.86 KB)
& a& k- N# k0 C: j6 J" g, W
* D! K6 ^* K$ o$ X
使用中值滤波3滤波后的高斯噪声图
8 d: `* X2 z+ d
2020-4-28 15:41 上传
下载附件
(318.37 KB)
( f7 Q f. z. O- l% }4 ]
4 ^) O. J& M1 z2 @: ~
使用中值滤波3滤波后的椒盐噪声图
& ?9 C. `9 \; m1 f) m
2020-4-28 15:42 上传
下载附件
(239.79 KB)
8 a7 }$ I" g1 T
- P' T1 r5 T0 P' m- L* t
改用中值滤波5 滤波滤波后的高斯噪声图
2 a! C# |& t5 |7 \! d
6 a& |) w {& T, H7 O
2020-4-28 15:42 上传
下载附件
(234.62 KB)
- u3 j8 M6 _% h- F
, l+ A, L! {- n% x& M% ~: b+ N
滤波后的椒盐噪声图
9 ?! V# |% [$ y1 i+ Y) s
; s1 L3 v/ K+ O! ~+ o3 k( t. s# v
2020-4-28 15:43 上传
下载附件
(185.09 KB)
0 w2 H0 ^5 S4 E0 c9 `
: D8 r0 _6 B0 J; g
结论:
6 M8 X+ a+ r- ?# R0 M
经过中值滤波5的滤波后噪声比中值滤波3滤波后的图像少,但是图像也更模糊一些。
4 D6 c: k% U* n6 W- [
9 Y, }. i9 t& k6 e
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5