计算机视觉基础 图像滤波器

文章目录

  • 1.图像噪声
    • 定义
    • 产生
    • 常见的噪声
      • 高斯噪声
      • 椒盐噪声
      • 其他噪声
        • 常用噪声
  • 2.图像滤波
    • 定义
    • 目的
    • 要求
    • 常见的滤波
      • 均值滤波
      • 中值滤波
      • 最大最小值滤波
  • 3.图像增强
    • 定义
    • 分类
    • 点处理
      • 线性变换
      • 分段线性变换
      • 对数变换
      • 幂律变换/伽马变换
    • 邻域处理
    • 总结

1.图像噪声

定义

图像噪声是图像在获取或是传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号。

产生

图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道受到了噪声的污染。

常见的噪声

高斯噪声

定义
高斯噪声(Gaussian noise)是指它的概率密度函数服从高斯分布的一类噪声。
特别的,如果一个噪声,它的幅度分布服从高斯分布,而它的任意两个采样样本之间不相关,则称它为高斯白噪声。
Note:必须区分高斯噪声白噪声两个不同的概念。高斯噪声是指噪声的概率密度函数服从高斯分布,
白噪声是指噪声的任意两个采样样本之间不相关,两者描述的角度不同。白噪声不必服从高斯分布,高斯分布的噪声不一定是白噪声。
产生原因
1)图像传感器在拍摄时不够明亮、亮度不够均匀;
2)电路各元器件自身噪声和相互影响;
3)图像传感器长期工作,温度过高;

让我们直观的看看高斯函数
计算机视觉基础 图像滤波器_第1张图片
处理步骤
计算机视觉基础 图像滤波器_第2张图片
注意:这里高斯噪声的处理可以对于一个像素点或者是一整张图的像素。
代码部分:

#随机生成符合正态(高斯)分布的随机数,means,sigma为两个参数
import numpy as np
import cv2
from numpy import shape
import random
def GaussianNoise(src,means,sigma,percetage):
    NoiseImg=src
    NoiseNum=int(percetage*src.shape[0]*src.shape[1])
    for i in range(NoiseNum):
        #每次取一个随机点
        #把一张图片的像素用行和列表示的话,randX 代表随机生成的行,randY代表随机生成的列
        #random.randint生成随机整数
        #高斯噪声图片边缘不处理,故-1
        randX=random.randint(0,src.shape[0]-1)
        randY=random.randint(0,src.shape[1]-1)
        #此处在原有像素灰度值上加上随机数
        NoiseImg[randX,randY]=NoiseImg[randX,randY]+random.gauss(means,sigma)
        #若灰度值小于0则强制为0,若灰度值大于255则强制为255
        if  NoiseImg[randX, randY]< 0:
            NoiseImg[randX, randY]=0
        elif NoiseImg[randX, randY]>255:
            NoiseImg[randX, randY]=255
    return NoiseImg
img = cv2.imread('lenna.png',0)
img1 = GaussianNoise(img,2,4,0.8)
img = cv2.imread('lenna.png')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imwrite('lenna_GaussianNoise.png',img1)
cv2.imshow('source',img2)
cv2.imshow('lenna_GaussianNoise',img1)
cv2.waitKey(0)

计算机视觉基础 图像滤波器_第3张图片

椒盐噪声

定义
椒盐噪声又称为脉冲噪声,它是一种随机出现的白点或者黑点。
•椒盐噪声= 椒噪声(pepper noise)+ 盐噪声(salt noise)。椒盐噪声的值为0(椒)或者255(盐)
•前者是低灰度噪声,后者属于高灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。
•对于彩色图像,也有可能表现为在单个像素BGR三个通道随机出现的255或0。(注意:这点的颜色还受到其他2个通道的值所制约,所以可能不是非黑即白
•如果通信时出错,部分像素的值在传输时丢失,就会发生这种噪声。
•椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生等。例如失效的感应器导致像素值
为最小值,饱和的感应器导致像素值为最大值。

处理步骤
计算机视觉基础 图像滤波器_第4张图片
代码部分:

import numpy as np
import cv2
from numpy import shape
import random


def fun1(src, percetage):
    NoiseImg = src
    NoiseNum = int(percetage * src.shape[0] * src.shape[1])
    for i in range(NoiseNum):
        # 每次取一个随机点
        # 把一张图片的像素用行和列表示的话,randX 代表随机生成的行,randY代表随机生成的列
        # random.randint生成随机整数
        # 椒盐噪声图片边缘不处理,故-1
        randX = random.randint(0, src.shape[0] - 1)
        randY = random.randint(0, src.shape[1] - 1)
        # random.random生成随机浮点数,随意取到一个像素点有一半的可能是白点255,一半的可能是黑点0
        if random.random() <= 0.5:
            NoiseImg[randX, randY] = 0
        else:
            NoiseImg[randX, randY] = 255
    return NoiseImg


img = cv2.imread('lenna.png', 0)
img1 = fun1(img, 0.15)
# 在文件夹中写入命名为lenna_PepperandSalt.png的加噪后的图片
# cv2.imwrite('lenna_PepperandSalt.png',img1)

img = cv2.imread('lenna.png')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('source', img2)
cv2.imshow('lenna_PepperandSalt', img1)
cv2.waitKey(0)

计算机视觉基础 图像滤波器_第5张图片

其他噪声

计算机视觉基础 图像滤波器_第6张图片

常用噪声

import cv2 as cv
import numpy as np
from PIL import Image
from skimage import util
 
'''
def random_noise(image, mode='gaussian', seed=None, clip=True, **kwargs):
功能:为浮点型图片添加各种随机噪声
参数:
image:输入图片(将会被转换成浮点型),ndarray型
mode: 可选择,str型,表示要添加的噪声类型
    gaussian:高斯噪声
    localvar:高斯分布的加性噪声,在“图像”的每个点处具有指定的局部方差。
    poisson:泊松噪声
    salt:盐噪声,随机将像素值变成1
    pepper:椒噪声,随机将像素值变成0或-1,取决于矩阵的值是否带符号
    s&p:椒盐噪声
    speckle:均匀噪声(均值mean方差variance),out=image+n*image
seed: 可选的,int型,如果选择的话,在生成噪声前会先设置随机种子以避免伪随机
clip: 可选的,bool型,如果是True,在添加均值,泊松以及高斯噪声后,会将图片的数据裁剪到合适范围内。如果谁False,则输出矩阵的值可能会超出[-1,1]
mean: 可选的,float型,高斯噪声和均值噪声中的mean参数,默认值=0
var:  可选的,float型,高斯噪声和均值噪声中的方差,默认值=0.01(注:不是标准差)
local_vars:可选的,ndarry型,用于定义每个像素点的局部方差,在localvar中使用
amount: 可选的,float型,是椒盐噪声所占比例,默认值=0.05
salt_vs_pepper:可选的,float型,椒盐噪声中椒盐比例,值越大表示盐噪声越多,默认值=0.5,即椒盐等量
--------
返回值:ndarry型,且值在[0,1]或者[-1,1]之间,取决于是否是有符号数
'''
 
img = cv.imread("lenna.png")
noise_gs_img=util.random_noise(img,mode='poisson')
 
cv.imshow("source", img)
cv.imshow("lenna",noise_gs_img)
#cv.imwrite('lenna_noise.png',noise_gs_img)
cv.waitKey(0)
cv.destroyAllWindows()

2.图像滤波

定义

计算机视觉基础 图像滤波器_第7张图片
计算机视觉基础 图像滤波器_第8张图片
滤波和卷积大体一致,不过有旋转180度的区别。

目的

1、消除图像中混入的噪声。
2、为图像识别抽取出图像特征。

要求

1、不能损坏图像轮廓及边缘。
2、图像视觉效果应当更好。

常见的滤波

均值滤波

计算机视觉基础 图像滤波器_第9张图片
大致过程:
计算机视觉基础 图像滤波器_第10张图片
优点:算法简单,计算速度快;
缺点:降低噪声的同时使图像产生模糊,特别是景物的边缘和细节部分。

中值滤波

计算机视觉基础 图像滤波器_第11张图片
优点:抑制效果很好,画面的清析度基本保持;
缺点:对高斯噪声的抑制效果不是很好。

最大最小值滤波

计算机视觉基础 图像滤波器_第12张图片

3.图像增强

定义

有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。(简单的说:就是对图像进行各种不同的操作

分类

点处理技术。只对单个像素进行处理。
领域处理技术。对像素点及其周围的点进行处理,即使用卷积核。

点处理

线性变换

计算机视觉基础 图像滤波器_第13张图片
举例解释:当图像的像素值为(10,20)
当a>1:设a=2,b=0,(10,20)变成(20,40){显然插值变大,从而增强了对比度}
当a<1:设a=0.5,b=0,(10,20)变成(5,10){显然插值变小,从而降低了对比度}
当a=1,b>0:设a=1,b=5,(10,20)变成了(15,25){显然整体值都变大了},同理b<0.

分段线性变换

计算机视觉基础 图像滤波器_第14张图片
解释:和上面的线性变换差不多,只不过分为3个区域。

对数变换

计算机视觉基础 图像滤波器_第15张图片

幂律变换/伽马变换

计算机视觉基础 图像滤波器_第16张图片
解释:通过右边的图片可以看出分别于y=c*x的高低。

邻域处理

直方图均衡化
图像滤波

总结

计算机视觉基础 图像滤波器_第17张图片

你可能感兴趣的:(计算机视觉理论,计算机视觉,人工智能,图像处理)