数字图像处理笔记(中)

简介: 数字图像处理笔记

3.3.2,直方图匹配(规定化)

直方图匹配(规定化)定义:用于生成具有规定直方图的图像的方法称为直方图匹配(规定化)。

直方图规定化的推导过程较为复杂,请参考原书。本笔记中,直接看特定的一幅图像经过直方图均衡化和规定化的对比结果。

1,直方图均衡化后的效果图如下所示(有噪声):

网络异常,图片无法展示
|

2,直方图规定化后的效果图如下所示(无噪声):

网络异常,图片无法展示
|


3.3.3,局部直方图处理

直方图均衡化和直方图规定化的直方图处理方法都是全局性的,因为像素是由基于整个图像的灰度分布的变换函数修改的。当目的是为了解决增强图像中几个小区域的细节时,解决方法是设计基于像素邻域的灰度分布的变换函数

局部直方图的处理过程:

  1. 定义一个邻域,并将其中心在水平方向或垂直方向上从一个像素移动到另一个像素。
  2. 在每个位置,计算邻域中的各点的直方图,得到直方图均衡化或直方图规定化变换函数,将这个函数映射于邻域中心点像素的灰度。
  3. 然后将邻域的中心移到一个相邻像素位置,并重复上述过程。

局部直方图均衡化效果如下图所示:

网络异常,图片无法展示
|


3.3.4,使用直方图统计增强图像

直接从图像直方图得到的统计量信息可用于增强图像。令rrr是一个离散型随机变量,它表示区间[0,L−1][0,L-1][0,L1]内的灰度值;令p(ri)p(r_i)p(ri)是相对于灰度值rir_iri的归一化直方图分量。即p(ri)p(r_i)p(ri)可视为灰度rir_iri的概率密度函数,并可得到图像的直方图。

1,均值是平均灰度的测度,图像像素灰度的均值mmm计算公式如下:

m=∑i=0L−1rip(ri)m = \sum_{i=0}^{L-1}r_{i}p(r_i)m=i=0L1rip(ri)

2,方差(或标准差σ\sigmaσ)是图像对比度的测度,方差公式如下:

σ2=μ2=∑i=0L−1(ri−m)2p(ri)\sigma^2 = \mu_2 = \sum_{i=0}^{L-1}(r_{i}-m)^{2}p(r_i)σ2=μ2=i=0L1(rim)2p(ri)

简单理解图像灰度均值和方差的意义就是,均值越大,图像越亮;方差越大,图像对比度越高。

上述公式是针对图像全局的,其同样可应用于一个规定大小的邻域空间。结合以上公式和概念可以使用直方图统计增强局部图像,示例如下:

网络异常,图片无法展示
|


f(x,y)f(x,y)f(x,y)表示原图在图像坐标(x,y)(x,y)(x,y)处的灰度值,令g(x,y)g(x,y)g(x,y)表示增强后的图像在这些坐标处的灰度值,具体的图像增强公式如下:

网络异常,图片无法展示
|


更详细的具体操作方法细节参考原书,本文略过。

3.4,空间滤波基础

本节内容讨论如何使用空间滤波器进行图像处理。滤波有时要分多个阶段完成

滤波器一词来自频率域处理(第四章),滤波的意思是指通过修改或抑制图像的规定分量。例如,通过低频的滤波器称为低通滤波器。低通滤波器的作用是通过模糊图像来平滑图像,使用空间滤波器可以直接对图像本身进行类似效果的平滑处理。

3.4.1,线性空间滤波的原理

线性空间滤波定义: 指图像fff与滤波器核www进行乘积之和(卷机)运算。核是一个阵列,其大小定义了运算的邻域,其系数决定了该滤波器(也称模板、窗口滤波器)的性质。

下图3.28说明了使用3×33\times33×3核进行线性空间滤波的原理。在图像任何一点(x,y)(x,y)(x,y)处,滤波器的响应g(x,y)g(x,y)g(x,y)是核系数核核所覆盖图像像素的乘积之和:

g(x,y)=w(−1,−1)f(x−1,y−1)+w(−1,0)f(x−1,y)+...+w(0,0)f(x,y)+...+w(1,1)f(x+1,y+1)(3.30)g(x,y) = w(-1,-1)f(x-1,y-1)+w(-1,0)f(x-1,y)+...+w(0,0)f(x,y)+...+w(1,1)f(x+1,y+1) \tag{3.30}g(x,y)=w(1,1)f(x1,y1)+w(1,0)f(x1,y)+...+w(0,0)f(x,y)+...+w(1,1)f(x+1,y+1)(3.30)

核的中心系数值 w(0,0)w(0,0)w(0,0) 对应于 (x,y)(x,y)(x,y) 处的像素。对应大小为 m×nm\times nm×n 的核,假设 m=2a+1m=2a+1m=2a+1n=2b+1n=2b+1n=2b+1,其中aaabbb是非负整数。一般来说,大小为 m×nm\times nm×n 的核对大小为 M×NM\times NM×N 的图像的线性空间滤波可表示为:

g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t)(3.31)g(x,y) = \sum_{s=-a}^{a}\sum_{t=-b}^{b} w(s,t)f(x+s, y+t) \tag{3.31}g(x,y)=s=aat=bbw(s,t)f(x+s,y+t)(3.31)

上式中 xxxyyy 发生变化,使得滤波器核的中心(原点)能够遍历完图像 fff 中的每个像素。

3.4.2,空间相关与卷积

图3.28以图形方式说明了空间相关,式(3.31)给出了其数学描述。相关的运算过程如下:在图像上移动核中心,并且在每个位置计算乘积之和。

网络异常,图片无法展示
|


以一维例子开始,则式(3.31)变为

g(x)=∑s=−1aw(s)f(x+s)g(x) = \sum_{s=-1}^{a}w(s)f(x+s)g(x)=s=1aw(s)f(x+s)

式中,卷机核为www,图像函数为fff

网络异常,图片无法展示
|


在本书中,当我们使用线性空间滤波这个术语时,指的是滤波器核与图像进行卷机(乘积和)运算。

3.5,平滑(低通)空间滤波器

平滑(也称平均)空间滤波器用于降低灰度的急剧过渡,因为随机噪声通常就是由灰度的急剧过渡组成,所以平滑的一个明显应用就是降噪

本节介绍基于可分离盒式核和高斯核的低通滤波器。

1,基于可分离盒式核的低通滤波器最简单的可分离低通滤波器核是盒式核,其系数的值相同(通常为1)。

下图3.31(a)中显示了一个大小为3×33\times 33×3的盒式滤波器,即一个大小为m×nm\times nm×n的盒式滤波器且元素值为 1 的一个m×nm\times nm×n阵列,器前面有一个归一化的常数,它的值是 1 除以系数值之和(当所有系数都为1时,这个常数为1/mn1/mn1/mn)。

网络异常,图片无法展示
|


使用不同盒式核对图像进行低通滤波的效果图如下所示:

网络异常,图片无法展示
|


盒式滤波器较为简单,适合快速实验,其会产生视觉上能够接受的平滑效果。盒式滤波器有一些局限:

  1. 对透镜模糊特性的近视能力较差。
  2. 盒式滤波器往往沿垂直方向模糊图像,不适合精细细节或具有强几何分量的图像应用。

对应的 opencv 函数如下。

void boxFilter( InputArray f, OutputArray dst, int ddepth,
                             Size ksize, Point anchor=Point(-1,-1),
                             bool normalize=true,
                             int borderType=BORDER_DEFAULT );
复制代码


参数 6 的解释:

  • normalize = true 时,盒式滤波就变成了均值滤波。也就是说,均值滤波是盒式滤波归一化(normalized)后的特殊情况。其中,归一化就是把要处理的量都缩放到一个范围内,比如(0,1),以便统一处理和直观量化。
  • normalize = false 时,为非归一化的盒式滤波,用于计算每个像素邻域内的积分特性,比如密集光流算法(dense optical flow algorithms)中用到的图像倒数的协方差矩阵(covariance matrices of image derivatives)。

均值滤波,是最简单的一种线性滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的像素的平均值( 所有像素加权系数相等),实质就是归一化后的方框滤波。均值滤波算法比较简单,计算速度快,但是均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时,也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。但均值滤波对周期性的干扰噪声有很好的抑制作用。

3.5.2,低通高斯滤波器核

实际应用中要求卷积核是各向同性的(圆对称),其响应与方向无关。高斯核是唯一可分离的圆对称核,因此非常适合图像处理,对于抑制服从正态分布的噪声非常有效。高斯核定义:

w(s,t)=G(s,t)=Ke−s2+t22σ2w(s,t) = G(s,t) = Ke^{-\frac{s^2+t^2}{2\sigma^2}}w(s,t)=G(s,t)=Ke2σ2s2+t2

r=[s2+t2]1/2r=[s^2+t^2]^{1/2}r=[s2+t2]1/2,上式可写为

G(r)=Ke−r22σ2G(r) = Ke^{-\frac{r^2}{2\sigma^2}}G(r)=Ke2σ2r2

这个函数依然是圆对称的,变量rrr表示从中心到函数GGG上任意一点的距离,它必须是正数且是奇数。下图显示了不同大小的核的rrr值。

网络异常,图片无法展示
|


希望产生更均匀的平滑结果时,通常使用高斯核平滑;盒式核平滑则是硬过渡。

高斯核和盒式核平滑特性的比较对比图如下:

网络异常,图片无法展示
|


3.5.3,低通滤波代码示例

盒式滤波、均值滤波(归一化后的盒式滤波)、高斯滤波的 python-opencv 应用代码如下。

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('test.png')
blur1 = cv.boxFilter(img, -1 ,(3,3),normalize = False)
blur2 = cv.boxFilter(img, -1 ,(3,3),normalize = True)
blur3 = cv.GaussianBlur(img,(5,5),0)
plt.figure(figsize=(20,20)) #设置窗口大小
plt.subplot(221),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(blur1),plt.title('boxFilter_normalize_false')
plt.xticks([]), plt.yticks([])
plt.subplot(223),plt.imshow(blur2),plt.title('boxFilter_normalize_true')
plt.xticks([]), plt.yticks([])
plt.subplot(224),plt.imshow(blur3),plt.title('Gaussian')
plt.xticks([]), plt.yticks([])
plt.show()
复制代码


程序运行后输出如下:

网络异常,图片无法展示
|


非归一化的时候,得到图像就是一片白色,对源图像毁坏太大,根本无法使用。而归一化的时候,得到图像是一种模糊的效果,此时与均值滤波一样。

3.6,锐化(高通)空间滤波器

锐化的作用是突出灰度中的过渡。前面讲的平滑(低通)滤波(图像模糊)通过积分运算实现的,那可以推断出图像锐化可以用微分实现。

3.6.1,基础

导数(英语:derivative)是微积分学中的一个概念。函数在某一点的导数是指这个函数在这一点附近的变化率。导数的本质是通过极限的概念对函数进行局部的线性逼近。当函数fff的自变量在一点 x0x_{0}x0 上产生一个增量 hhh 时,函数输出值的增量与自变量增量 hhh 的比值在 hhh 趋于 0 时的极限如果存在,即为 fffx0x_{0}x0 处的导数,记作 f′(x0)f'(x_{0})f(x0)dfdxx0\frac{\mathrm{d} f}{\mathrm{d} x}x_0dxdfx0dfdx∣x=x0\frac{\mathrm{d} f}{\mathrm{d} x}\mid_{x=x_0}dxdfx=x0。例如在运动学中,物体的位移对于时间的导数就是物体的瞬时速度。

导数是函数的局部性质。不是所有的函数都有导数,一个函数也不一定在所有的点上都有导数。若某函数在某一点导数存在,则称其在这一点可导(可微分),否则称为不可导(不可微分)。如果函数的自变量和取值都是实数的话,那么函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率。

网络异常,图片无法展示
|


导数一般定义如下

直观上 f(x)−f(a)f(x)-f(a)f(x)f(a) 代表函数值从aaaxxx的变化量,那么,

f(x)−f(a)x−a\frac{f(x)-f(a)}{x-a}xaf(x)f(a)

代表的是从 aaaxxx 的平均变化率。若实函数fff于实数aaa有定义,且以下极限:

lim⁡x→af(x)−f(a)x−a\lim_{x\rightarrow a} \frac{f(x)-f(a)}{x-a}xalimxaf(x)f(a)

存在则称 fffaaa 处可导。

来源维基百科导数定义

一维函数f(x)f(x)f(x)的一阶导数的一个基本定义是差分

∂f∂x=f(x+1)−f(x)(3.48)\frac{\partial f}{\partial x} = f(x+1)-f(x) \tag{3.48}xf=f(x+1)f(x)(3.48)

同理可将f(x)f(x)f(x)二阶导数定义为差分:

∂2f∂x2=f(x+1)+f(x−1)−2f(x)(3.49)\frac{\partial ^{2}f}{\partial x^{2}} = f(x+1)+f(x-1)-2f(x) \tag{3.49}x22f=f(x+1)+f(x1)2f(x)(3.49)

3.6.2,使用二阶导数锐化图像-拉普拉斯

使用二阶导数锐化图像的方法:首先定义二阶导数的离散公式,然后在这个公式的基础上构造一个滤波器核。对于两个变量的函数(图像f(x,y)f(x,y)f(x,y))其中拉普拉斯算子(核)的定义如下:

Δf=∂2f∂x2+∂2f∂y2(3.50)\Delta f= \frac{\partial ^{2}f}{\partial x^{2}}+ \frac{\partial ^{2}f}{\partial y^{2}} \tag{3.50}Δf=x22f+y22f(3.50)

因为任意阶的导数都是线性算子,所以拉普拉斯是线性算子

由差分和拉普拉斯二阶导数的定义可得如下公式:

Δf=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)(3.53)\Delta f = f(x+1, y) + f(x-1, y) + f(x, y+1) + f(x, y-1)-4f(x,y) \tag{3.53}Δf=f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)(3.53)

上述公式可以用图3.45(a)中的核进行卷积运算来实现;因此,图像锐化的滤波原理类似于3.5节内容所述的低通滤波,只是这里使用不同的核系数

网络异常,图片无法展示
|


使用拉普拉斯算子锐化图像的方法描述如下:

网络异常,图片无法展示
|


直接的拉普拉斯图像往往是黑色和无特征的。

拉普拉斯应用示例如下:

网络异常,图片无法展示
|


3.6.3,钝化掩蔽和高提升滤波

从原图像减去一幅钝化(平滑后)图像,是20世纪30年代以来印刷和出版业一直用来锐化图像的方法,这个过程称为钝化掩蔽,步骤如下:

  1. 模糊原图像。
  2. 从原图像减去模糊后的图像(产生的差称为模板)。
  3. 将模板与原图像相加。

网络异常,图片无法展示
|


注意较大的 k 值会产生令人无法接受的图像。

钝化掩蔽效果示例:

网络异常,图片无法展示
|


3.6.4,使用一阶导数锐化图像-梯度

包括罗伯特交叉梯度算子和 Sobel 算子,使用一阶梯度算子锐化图像常用在工业缺陷检测。梯度算子核系数矩阵如下:

网络异常,图片无法展示
|

相关文章
|
存储 传感器 XML
遥感数字图像处理教程复习整理1
遥感数字图像处理教程复习整理
333 0
遥感数字图像处理教程复习整理1
|
机器学习/深度学习 存储 人工智能
数字图像处理(一) 绪论
数字图像处理(一) 绪论
194 0
|
存储 机器学习/深度学习 编解码
数字图像处理(二) 数字图像处理基础(下)
数字图像处理(二) 数字图像处理基础(下)
223 0
|
传感器 算法 定位技术
遥感数字图像处理教程复习整理2
遥感数字图像处理教程复习整理
166 0
|
存储 机器学习/深度学习 传感器
数字图像处理(二) 数字图像处理基础(上)
数字图像处理(二) 数字图像处理基础(上)
185 0
|
机器学习/深度学习 存储 编解码
遥感数字图像处理教程复习整理3
遥感数字图像处理教程复习整理
170 0
|
传感器 机器学习/深度学习 算法
数字图像处理笔记(上)
数字图像处理笔记
277 0
|
存储 数据安全/隐私保护 计算机视觉
数字图像处理笔记(下)
数字图像处理笔记
216 0
|
算法 C# 图形学
如何自学图像编程
现在,图像类信息越来越多了,对图像的编程需求也越来越多。图像类项目的特点是性价比高,单行代码的价格一般是普通的程序的10倍,每行代码能够卖几块钱。很多人把目光放在这个上面。刚才又有网友咨询,做图像要看些什么书?结合我的自学经验,写一篇博客谈谈这个问题。
1199 0
|
计算机视觉
《数字图像处理》冈萨雷斯版 读书笔记(五)
博主之前保研差一名,去考了个研,许久不更。本次考研准备三个月,三跨(跨学校跨地区跨专业),自学了一波数字图像处理,考完自知不妙,修身养性一个月(实习+打游戏)。现在百无聊赖,正好来分享一下我考研专业课的学习笔记。
1365 0