opencv 图片处理



一, 图片处理去噪

1, 图片处理去噪

图像处理——去噪

(1), 定义

图像去噪是指减少数字图像中噪声的过程称为图像去噪。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。

(2), 噪声分类
按照噪声组成来分:

f(x,y)表示给定原始图象,g(x,y)表示图象信号,n(x,y)表示噪声。

1)加性噪声,此类噪声与输入图象信号无关,含噪图象可表示为f(x,y)=g(x,y)+n(x,y),信道噪声及光导摄像管的摄像机扫描图象时产生的噪声就属这类噪声;典型的加性噪声有高斯噪声,

2)乘性噪声,此类噪声与图象信号有关,含噪图象可表示为f(x,y)=g(x,y)+n(x,y)g(x,y),飞点扫描器扫描图象时的噪声,电视图象中的相关噪声,胶片中的颗粒噪声就属于此类噪声;

3)量化噪声,此类噪声与输入图象信号无关,是量化过程存在量化误差,再反映到接收端而产生。

按照噪声密度分布:

1)高斯噪声:指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。

2)椒盐噪声(脉冲噪声):类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果。

3)均匀噪声:是指功率谱密度(信号功率在频域的分布状况)在整个频域内是常数的噪声。 所有频率具有相同能量密度的随机噪声称为白噪声。

4)瑞利噪声:噪声分布为瑞利分布。

5)指数噪声:噪声分布为指数分布。

6)伽马噪声:噪声分布为瑞利分布。

(3), 图片加噪
# -*- coding: utf-8 -*-
图像添加噪声,去除噪声
'''
import matplotlib.pyplot as plt
import numpy as np
from skimage.util import random_noise
from PIL import Image
?
img = plt.imread('F:/python编程/自己的博客园代码/picture_process/example.jpg')
?
fig = plt.figure(figsize = (8.0,6.0))
ax1 = fig.add_subplot(2,3,1)
## show the original picture
ax1.imshow(img)
plt.title('original_picture')
?
## gray_picture
gravity= np.array([0.299,0.587,0.114])
#red*0.299+green*0.587+blue*0.114
img_gravity=np.dot(img,gravity)
ax2 = fig.add_subplot(2,3,2)
## show the gray_picture
ax2.imshow(img_gravity,cmap='gray')
plt.title('gray_picture')
?
img_gaussian = random_noise(img, mode='gaussian', seed=100, clip=True)
ax3 = fig.add_subplot(2,3,3)
ax3.imshow(img_gaussian)
plt.title('add_gaussian')
?
img_salt = random_noise(img, mode='salt', seed=100, clip=True)
ax4 = fig.add_subplot(2,3,4)
ax4.imshow(img_salt)
plt.title('add_salt')
?
img_pepper = random_noise(img, mode='pepper', seed=100, clip=True)
ax4 = fig.add_subplot(2,3,5)
ax4.imshow(img_pepper)
plt.title('add_pepper')
?
img_sp = random_noise(img, mode='s&p', seed=100, clip=True)
ax4 = fig.add_subplot(2,3,6)
ax4.imshow(img_sp)
plt.title('add_sp')

2, 去噪方法

(1), 中值滤波:

中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

(2), 高斯滤波:

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

(3), 均值滤波:

均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。

(4), 维纳滤波:

维纳滤波(wiener filtering) 一种基于最小均方误差准则、对平稳过程的最优估计器。这种滤波器的输出与期望输出之间的均方误差为最小,因此,它是一个最佳滤波系统。它可用于提取被平稳噪声所污染的信号。

(5), 傅里叶滤波:

简称fft,是通过对图片信号在频域里进行滤波,从而达到去噪效果。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
from skimage.util import random_noise
from PIL import Image
import cv2
?
img = plt.imread('F:/python编程/自己的博客园代码/picture_process/gaussian_picture.jpg')
fig = plt.figure(figsize=(8.0,6.0))
ax1 = fig.add_subplot(2,3,1)
ax1.imshow(img)
plt.title('blur_picture')
?
### 中值滤波
median_filter_img = cv2.medianBlur(img, 3)
ax2 = fig.add_subplot(2,3,2)
ax2.imshow(median_filter_img)
plt.title('median_filter')
?
#### 高斯滤波
Gaussian_filter_img = cv2.GaussianBlur(img, (3,3), 0)
ax2 = fig.add_subplot(2,3,3)
ax2.imshow(Gaussian_filter_img)
plt.title('Gaussian_filter')
?
#### 均值滤波
mean_vaule_filter = cv2.blur(img, (5,5))
ax2 = fig.add_subplot(2,3,4)
ax2.imshow(mean_vaule_filter)
plt.title('mean_vaule_filter')
?
#### 双边滤波
#9 邻域直径,两个 75 分别是空间高斯函数标准差,灰度值相似性高斯函数标准差
blur = cv2.bilateralFilter(img,9,75,75)
ax2 = fig.add_subplot(2,3,5)
ax2.imshow(blur)
plt.title('bilatral-filter')