图像滤波—学习笔记

图像和噪声

一幅原始图像在获取和传输过程中会受到各种噪声的干扰,使图像质量下降,对分析图像不利。反映到画面上,主要有两种典型的噪声。一种是幅值基本相同,但出现的位置很随机的椒盐噪声。另一种则每一点都存在,但幅值随机分布的随机噪声。为了抑制噪声、改善图像质量,要对图像进行平滑处理。

图像常常被强度随机信号(也称为噪声)所污染。一些常见的噪声有椒盐噪声(Salt & Pepper)噪声、脉冲噪声、高斯噪声等。

  • 椒盐噪声:含有随机出现的黑白强度值, 噪声的幅值基本上相同,但是噪声出现的位置是随机的。(中值滤波效果好)
  • 脉冲噪声 则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声)。
  • 高斯噪声:含有强度服从高斯或正态分布的噪声,每一点都存在噪声,但是噪声的幅值是随机分布的。

图像滤波

图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏直接影响到后续图像处理和分析的有效性和可靠性。

由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的 污染。这些噪声在图像上表现为一引起较强视觉效果的孤立像素点或像素块。一般噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观察信息。对于数字图像信号,噪声表现为或大或小的极值,这些极值通过加减作用于图像像素的真实灰度值上,在图像上造成亮暗点干扰,极大降低了图像质量,影响图像复原、分割、特征提取、图像识别等后继工作的进行。要构造一种有效抑制噪声的滤波器必须考虑两个基本问题,能有效的去除目标和背景中的噪声,同时能很好的保护图像目标的形状、大小及特定的几何和拓扑结构特征。

滤波方式

消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没。因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。

图像滤波的目的

  • 一是抽出对象的特征作为图像识别的特征模式
  • 二是为适应图像处理的要求,消除图像数字化时所混入的噪声。

对滤波处理的要求

  • 一是不能损坏图像的轮廓及边缘等重要信息
  • 二是使图像清晰视觉效果好。

平滑滤波是低频增强的空间域滤波技术,其目的

  • 一是模糊
  • 二是消除噪音。

根据空间类型可将滤波器分为:

  • 频率滤波 需要先进行傅里叶变换至频域处理,然后再反变换回空间域还原图像。

  • 空域滤波 直接对图像数据做空间变换达到滤波的目的。它是一种领域运算,即输出图像中任何像素的值都是通过采用一定的算法,根据输入图像中对应像素周围一定领域内像素的值得来的。

    • 空间域的平滑滤波一般采用简单平均法进行,就是求临近像素点的平均亮度值。邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会是边缘信息损失的越大,从而使输出的图像变得模糊,因此需合理选择邻域的大小。

    • 一个滤波器就是在选定的领域像素上执行预定义好的操作产生新的像素,并用新的像素替换掉原来像素形成新的图像。

    • 一个空间滤波器包括两个部分:

      • 一个领域,滤波器进行操作的像素集合,通常是一个矩形区域
      • 对领域中像素进行的操作
    • 通常可以将滤波器称之为核(kernel)、模板(template)或者窗口(window)。

根据预定义的操作,可以将滤波器分为:

  • 线性滤波 是输出图像上每个像素点的值都是由输入图像各像素点值加权求和的结果。
    • 线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。
    • 线性滤波器:方框滤波器、均值滤波器、高斯滤波器
  • 非线性滤波 的算子中包含了取绝对值、置零等非线性运算。
    • 非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定领域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板做傅里叶变换),另外,腐蚀和膨胀也是通过最大最小值滤波器实现的。
    • 非线性滤波器:中值滤波器、双边滤波器

根据滤波器最终对图像造成的影响,可以将滤波器分为:

  • 平滑滤波器,能减弱或消除图像中的高频分量,但不影响低频分量。因为高频分量对应图像中的区域边缘等灰度值具有较大、较快变化的部分,平滑滤波将这些分量滤除可以减少局部灰度的起伏,使图像变得比较平滑。通常用于模糊图像或者去除图像中的噪声,又可以在提取较大的目标前过滤去除较小的细节或将目标内的小间断连接起来。
  • 锐化滤波器,能减弱或消除图像中的低频分量,但不影响高频分量。因为低频分量对应图像中灰度值缓慢变化的区域,因而与图像的整体特性如整体对比度和平均灰度值等哟关。锐化滤波将这些分量滤去,可以使图像反差增加,突出图像中的边缘部分。在实际应用中,锐化滤波可以用于增强图像中被模糊的细节或景物的边缘。

易混淆概念

  • 滤波实际上是信号处理的一个概念,图像可以看成一个二维信号,其中像素点灰度值的高低表示信号的强弱。
  • 高频:图像中变化剧烈的部分。
  • 低频:图像中变化缓慢,平坦的部分。
  • 根据图像高低频特性,设置高通和低通滤波器高通滤波可以检测图像中尖锐、变化明显的地方,低通滤波可以让图像变得平滑,消除噪声干扰。
  • 低通滤波部分(图像平滑去躁),高通部分(边缘检测)
  • 滤波可分低通滤波和高通滤波两种。而高斯滤波是指用高斯函数作为滤波函数的滤波操作,至于是不是模糊,要看高斯低通还是高斯高通,低通就是模糊,高通就是锐化。即高斯滤波是指用高斯函数作为滤波函数的滤波操作。高斯模糊就是高斯低通滤波。
  • 图像平滑(smoothing)也称模糊处理(bluring),是一项简单且使用频率很高的图像处理方法。可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声,最常见的是用来减少图像上的噪点或者失真。在涉及到降低图像分辨率时,平滑处理是非常好用的方法。

在这里插入图片描述

常见滤波器

中值滤波(Median Filter)

  • 分类 非线性滤波器
  • 原理 选择待处理像素的一个领域中的各像素值的中值来代替待处理的像素。
  • 功能 消除孤立噪声点(像素的灰度值与周围像素比较接近),特别是椒盐噪声。
  • 优点 中值滤波器在消除噪声的同时,还能有效的保护图像的边界信息,不会对图像造成很大的模糊(相比于均值滤波器)。
  • 缺点 受滤波窗口尺寸的影响较大,在消除噪声和保护图像的细节存在矛盾。
    • 滤波窗口较小,则能很好的保护图像中的某些细节,但对噪声的过滤效果就不是很好;反之,窗口尺寸较大有较好的噪声过滤效果,但是会对图像造成一定的模糊。
    • 如果在滤波窗口内的噪声点个数大于整个窗口内像素的个数,则中值滤波就不能很好的过滤掉噪声。

自适应中值滤波器(Adaptive Median Filter)

中值滤波在噪声密度不是很大的情况下(根据经验,噪声出现的概率小于0.2),效果不错。但是当概率出现的概率较高时,常规的中值滤波器的效果就不是很好了。增大滤波器窗口的大小,虽然在一定程度上能解决该问题,但是会给图像造成较大的模糊。

常规的中值滤波器的窗口尺寸是固定大小不变的,就不能同时兼顾去燥和保护图像的细节。在滤波的过程中,动态的改变滤波器的窗口尺寸大小,这就是自适应中值滤波器Adaptive Median Filter。

  • 原理 自适应中值滤波器会根据预先设定好的条件,改变滤波窗口的尺寸大小,同时还会根据一定的条件判断当前像素是不是噪声,如果是则用领域中值替换掉当前像素;不是,则不作改变。
  • 功能
    • 滤除椒盐噪声
    • 平滑其他非脉冲噪声
    • 尽可能的保护图像中细节信息,避免图像边缘的细化或者粗化。
  • 算法描述
    在这里插入图片描述
  • 原理说明
    在这里插入图片描述

均值滤波

均值滤波器可以归为低通滤波器,是一种线性滤波器,其输出为领域模板内的像素的简单平均值,主要用于图像的模糊和降噪。均值滤波器使用滤波器窗口内的像素的平均灰度值代替图像的像素值,这样会降低图像中的尖锐变化。均值滤波器在降低噪声的同时,会模糊图像的边缘。均值滤波器会过滤掉图像中的“不相关”细节,其中“不相关”细节指的是与滤波器模板尺寸相比较小的像素区域。

根据均值计算方法的不同,均值滤波器有以下几种:

  • 算术均值滤波器
  • 几何均值滤波器
  • 谐波均值滤波器
  • 逆谐波均值滤波器

算术均值滤波器(Arithmetic Mean Filter)

在这里插入图片描述

盒状滤波器

在这里插入图片描述
在这里插入图片描述

加权的均值滤波器

在这里插入图片描述

非线性均值滤波器

几何均值滤波器(Geometric Mean Filter)

在这里插入图片描述

谐波均值滤波器(Harmonic Mean Filter)

在这里插入图片描述

逆谐波均值滤波器(Contra-Harmonic Mean Filter)

在这里插入图片描述

高斯滤波器

高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1,而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以高斯滤波器相比于均值滤波器对图像的模糊程度较小。

高斯滤波器和高斯分布(正态分布)是有一定的关系,一个二维的高斯函数如下:
h ( x , y ) = e − x 2 + y 2 2 σ 2 h(x,y) = e ^ {- \frac{x^2 + y^2}{2\sigma ^ 2}} h(x,y)=e2σ2x2+y2
其中 ( x , y ) (x,y) (x,y)为点坐标,在图像处理中可认为是整数; σ \sigma σ 是标准差。计算高斯滤波器的模板,需要对高斯函数进行离散化,得到的高斯函数值作为模板的系数。

例如:要计算一个 3 × 3 3 \times 3 3×3的高斯滤波器模板,以模板的中心位置为坐标原点进行取样。假定中心的坐标是(0,0),那么距离它最近的8个点的坐标如下:
在这里插入图片描述
这样将各个位置的坐标带入到高斯函数中,得到的值就是模板的系数。对于窗口模板的大小为 ( 2 k + 1 ) × ( 2 k + 1 ) (2k+1)\times(2k+1) (2k+1)×(2k+1),模板中各个元素值的计算公式如下:
H i , j = 1 2 π σ 2 e − ( i − k ) 2 + ( j − k ) 2 2 σ 2 H_{i,j} = \frac{1}{2\pi \sigma ^ 2}e ^{-\frac{(i - k )^2 + (j - k )^2}{2 \sigma ^ 2}} Hi,j=2πσ21e2σ2(ik)2+(jk)2

在这里插入图片描述
这样计算出来的模板有两种形式:小数和整数。

小数形式, σ = 0.8 \sigma=0.8 σ=0.8 3 ∗ 3 3*3 33的权重矩阵为:
在这里插入图片描述
这9个点的权重总和等于0.912599,如果只计算这个9个点的加权平均,还需要让它们的权重之和等于1,因此上面的9个值都分别除以0.912599,得到最终的权重矩阵为:
在这里插入图片描述
整数形式的,则需进行归一化,将模板左上角的值归一化为1, σ = 0.8 \sigma=0.8 σ=0.8 3 ∗ 3 3*3 33的权重矩阵为:
在这里插入图片描述
使用整数模板时,需要在模板的前面加上一个系数,系数为 1 ∑ ( i , j ) ∈ w w i , j \frac{1}{\sum_{(i,j) \in {w}}w_{i,j}} (i,j)wwi,j1,也就是模板系数和的倒数。
3 ∗ 3 3*3 33 5 ∗ 5 5*5 55邻域的高斯模板:
在这里插入图片描述
在这里插入图片描述

void generateGaussianTemplate(double window[][3], int ksize, double sigma)
{
	static const double pi = 3.1415926;
	int center = ksize / 2; // 模板的中心位置,也就是坐标的原点
	double x2, y2;
	double sum = 0.0;
	printf("Gaussian Matrix:\n");
	for (int i = 0; i < ksize; i++)
	{
		x2 = pow(i - center, 2);
		for (int j = 0; j < ksize; j++)
		{
			y2 = pow(j - center, 2);
			double g = exp(-(x2 + y2) / (2 * sigma * sigma));
			g /= 2 * pi * sigma * sigma;
			window[i][j] = g;
			printf("%f ", window[i][j]);
			sum += window[i][j];
		}
		printf("\n");
	}
	printf("Norm Gaussian Matrix:\n");
	for (int i = 0; i < ksize; i++)
	{
		for (int j = 0; j < ksize; j++)
		{
			printf("%lf ", window[i][j] / sum);
		}
		printf("\n");
	}
	double k = 1 / window[0][0]; // 将左上角的系数归一化为1
	printf("Norm Left Gaussian Matrix:\n");
	for (int i = 0; i < ksize; i++)
	{
		for (int j = 0; j < ksize; j++)
		{
			printf("%f ", window[i][j]*k);
		}
		printf("\n");
	}
}

int main()
{
    double window[3][3] = { 0 };
	int ksize = 3;
	double sigma = 0.8;
	generateGaussianTemplate(window, ksize, sigma);
	return 0;
}

双边滤波器

双边滤波是一种非线性滤波器,可以达到保持边缘、降噪平滑的效果。和其他滤波器原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高斯分布。最重要的是,双边滤波的权重不仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程度、颜色强度、深度距离等),在计算中心像素的时候同时考虑着两个权重。

双边滤波有两个权重域的概念:空间域(spatial domain S)和像素域(range domain R),这个是它跟高斯滤波等方法的最大不同点。
高斯滤波:
在这里插入图片描述
双边滤波:
在这里插入图片描述
双边滤波的核函数是空间域核和像素范围域核的综合结果:在图像的平坦区域,像素值变化很小,对应的像素范围域权重接近于1,此时空间域权重起主要作用,相当于进行高斯模糊;在图像的边缘区域,像素变化很大 ,像素范围域权重变大,从而保持了边缘的信息。

双边滤波器使用二维高斯函数生成距离模板,使用一维高斯函数生成值域模板。
距离模板系数的生成公式如下:
d ( i , j , k , l ) = e x p ( − ( i − k ) 2 + ( j − l ) 2 2 σ d 2 ) d(i,j,k,l) = exp(-\frac{(i-k)^2 + (j -l)^2}{2\sigma_d^2}) d(i,j,k,l)=exp(2σd2(ik)2+(jl)2)
其中, ( k , l ) (k,l) (k,l)为模板窗口的中心坐标; ( i , j ) (i,j) (i,j)为模板窗口的其他系数的坐标; σ d \sigma_{d} σd为高斯函数的标准差。使用该公式生成的滤波器模板和高斯滤波器使用的模板是没有区别的。
值域模板系数的生成公式如下:
r ( i , j , k , l ) = e x p ( − ∣ ∣ f ( i , j ) − f ( k , l ) ∣ ∣ 2 2 σ r 2 ) r(i,j,k,l)= exp(-\frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2}) r(i,j,k,l)=exp(2σr2f(i,j)f(k,l)2)
其中,函数 f ( x , y ) f(x,y) f(x,y)表示要处理的图像, f ( x , y ) f(x,y) f(x,y)表示图像在点 ( x , y ) (x,y) (x,y)处的像素值; ( k , l ) (k,l) (k,l)为模板窗口的中心坐标; ( i , j ) (i,j) (i,j)为模板窗口的其他系数的坐标; σ r \sigma_{r} σr为高斯函数的标准差。
将上述两个模板相乘就得到了双边滤波器的模板:
w ( i , j , k , l ) = d ( i , j , k , l ) ∗ r ( i , j , k , l ) = e x p ( − ( i − k ) 2 + ( j − l ) 2 2 σ d 2 − ∣ ∣ f ( i , j ) − f ( k , l ) ∣ ∣ 2 2 σ r 2 ) w(i,j,k,l) = d(i,j,k,l) * r(i,j,k,l) = exp(-\frac{(i-k)^2 + (j -l)^2}{2\sigma_d^2}-\frac{||f(i,j)-f(k,l)||^2}{2\sigma_r^2}) w(i,j,k,l)=d(i,j,k,l)r(i,j,k,l)=exp(2σd2(ik)2+(jl)22σr2f(i,j)f(k,l)2)
在这里插入图片描述

锐化空间滤波器

前面介绍的滤波器都属于平滑滤波器(低通滤波器),用来平滑图像和抑制噪声的;而锐化空间滤波器恰恰相反,主要用来增强图像的突变信息,图像的细节和边缘信息。平滑滤波器主要是使用领域的均值(或中值)来代替模板中心的像素,削弱和邻域间的差别,以达到平滑图像和抑制噪声的目的;相反,锐化滤波器则使用邻域的微分作为算子,增大邻域间像素的差值,使图像的突变部分变的更加明显。

微分

图像的锐化也就是增强图像的突变部分,对图像中恒定区域中,突变的开始点与结束点(台阶和斜坡突变)及沿着灰度斜坡处的微分的性质。微分是对函数局部变化率的一种表示,一阶微分性质:

  • 在恒定的灰度区域,图像的微分值为0.(灰度值没有发生变化,微分为0)
  • 在灰度台阶或斜坡起始点处微分值不为0.(台阶是灰度值的突变变化较大;斜坡则是灰度值变化较缓慢;灰度值发生了变化,微分值不为0)
  • 沿着斜坡的微分值不为0.

二阶微分是一阶微分的导数,有以下几个性质:

  • 在恒定区域二阶微分值为0
  • 在灰度台阶或斜坡的起始点处微分值不为0
  • 沿着斜坡的微分值为0

从以上图像灰度的一阶和二阶微分的性质可以看出,在灰度值变化的地方,一阶微分和二阶微分的值都不为0;在灰度恒定的地方,微分值都为0,不论是使用一阶微分还是二阶微分都可以得到图像灰度的变化值。

图像可以看作是二维离散函数,对于图像的一阶微分其计算公式如下:
在x方向: ∂ f ∂ x = f ( x + 1 ) − f ( x ) \frac{\partial f} {\partial x} = f(x + 1) - f(x) xf=f(x+1)f(x)
在y方向: ∂ f ∂ y = f ( y + 1 ) − f ( y ) \frac{\partial f} {\partial y} = f(y + 1) - f(y) yf=f(y+1)f(y)

对于二阶微分有:
在x方向: ∂ 2 f ∂ x 2 = f ( x + 1 ) + f ( x − 1 ) − 2 f ( x ) \frac{\partial^2 f} {\partial x^2} = f(x + 1) + f(x - 1) - 2 f(x) x22f=f(x+1)+f(x1)2f(x)
在y方向: ∂ 2 f ∂ y 2 = f ( y + 1 ) + f ( y − 1 ) − 2 f ( y ) \frac{\partial^2 f} {\partial y^2} = f(y + 1) + f(y - 1) -2 f(y) y22f=f(y+1)+f(y1)2f(y)

对于图像的边缘来说,通常会形成一个斜坡过度。一阶微分在斜坡处的值不为0,那么用其得到的边缘较粗;而二阶微分在斜坡处的值为0,但在斜坡两端值不为0,且值的符号不一样,这样二阶微分得到的是一个由0分开的一个像素宽的双边源。也就是说,二阶微分在增强图像细节方面比一阶微分好的多,并且在计算上也要比一阶微分方便。

梯度图

在图像处理中的一阶微分通常使用梯度的幅值来实现。对于图像 f ( x , y ) f(x,y) f(x,y) f f f在坐标 ( x , y ) (x,y) (x,y)处的梯度是一个列向量
∇ f = g r a d ( f ) = [ g x g y ] = [ ∂ f ∂ x ∂ f ∂ y ] \nabla f = grad(f) = \left[ \begin{array}{c} g_x \\ g_y \end{array} \right] = \left[\begin{array}{c} \frac{\partial f} {\partial x} \\ \frac{\partial f} {\partial y} \end{array} \right] f=grad(f)=[gxgy]=[xfyf]

该向量表示图像中的像素点在 ( x , y ) (x,y) (x,y)处灰度值的最大变化率的方向。
向量 ∇ f \nabla f f的幅值就是图像 f ( x , y ) f(x,y) f(x,y)的梯度图,记为 M ( x , y ) M(x,y) M(x,y)
M ( x , y ) = m a g ( ∇ f ) = g x 2 + g y 2 M(x,y) = mag(\nabla f) = \sqrt{g_x^2 + g_y^2} M(x,y)=mag(f)=gx2+gy2
M ( x , y ) M(x,y) M(x,y)是和原图像 f ( x , y ) f(x,y) f(x,y)同大小的图像。由于求平方的根运算比较费时,通常可以使用绝对值的和来近似。
M ( x , y ) ≈ ∣ g x ∣ + ∣ g y ∣ M(x,y) \approx \mid g_x \mid + \mid g_y \mid M(x,y)gx+gy
从上面可以看出,要得到图像的梯度图,有以下步骤:

  • 图像在 x x x方向上的梯度 g x g_{x} gx
  • 图像在 y y y方向上的梯度 g y g_{y} gy
  • M ( x , y ) = ∣ g x ∣ + ∣ g y ∣ M(x,y) = \mid g_x \mid + \mid g_y \mid M(x,y)=gx+gy

一阶梯度算子

图像是以离散的形式存储的,通常用差分来计算图像的微分。

  • 根据梯度的定义
    g x = f ( x + 1 , y ) − f ( x , y ) g y = f ( x , y + 1 ) − f ( x , y ) g_x = f(x+1,y) - f(x,y) \\ g_y = f(x,y+1) - f(x,y) gx=f(x+1,y)f(x,y)gy=f(x,y+1)f(x,y)
    可以得到模板 [ − 1 1 ] \left[ \begin{array}{c} -1 &amp; 1\end{array}\right] [11] [ − 1 1 ] \left[ \begin{array}{c} -1 \\ 1\end{array}\right] [11]
    使用该方法计算的图像的梯度只是考虑单个像素的差值,并没有利用到图像的像素的邻域特性。

  • Robert交叉算子
    Robert梯度算子利用对角方向相邻两像素之差作为衡量标准,计算方法如下:
    g x = f ( x + 1 , y + 1 ) − f ( x , y ) g_x = f(x+1,y+1)-f(x,y) gx=f(x+1,y+1)f(x,y)
    g y = f ( x , y + 1 ) − f ( x + 1 , y ) g_y = f(x,y+1)-f(x+1,y) gy=f(x,y+1)f(x+1,y)
    M ( x , y ) = ∣ g x ∣ + ∣ g y ∣ M(x,y) = \mid g_x \mid + \mid g_y \mid M(x,y)=gx+gy
    可以得到模板
    [ − 1 0 0 1 ] a n d [ 0 − 1 1 0 ] \left[ \begin{array}{cc} -1 &amp; 0 \\ 0 &amp; 1 \end{array} \right] and \left[ \begin{array}{cc} 0 &amp; -1 \\ 1 &amp; 0 \end{array} \right] [1001]and[0110]

  • Prewitt算子
    prewitt算子结合了差分运算与邻域平均的方法。其卷积模板如下:
    [ − 1 − 1 − 1 0 0 0 1 1 1 ] 和 [ − 1 0 1 − 1 0 1 − 1 0 1 ] \left[ \begin{array}{ccc} -1 &amp; -1 &amp; -1 \\ 0 &amp; 0 &amp; 0 \\ 1 &amp; 1 &amp; 1 \end{array} \right] 和 \left[ \begin{array}{ccc} -1 &amp; 0 &amp; 1 \\ -1 &amp; 0 &amp; 1 \\ -1 &amp; 0 &amp; 1 \end{array} \right] 101101101111000111

  • Sobel算子
    sobel算子与prewitt算子类似,但考虑了相邻不同像素点的影响程度是不同的,所以采用加权平均,卷积模板如下:
    [ − 1 − 2 − 1 0 0 0 1 2 1 ] 和 [ − 1 0 1 − 2 0 2 − 1 0 1 ] \left[ \begin{array}{ccc} -1 &amp; -2 &amp; -1 \\ 0 &amp; 0 &amp; 0 \\ 1 &amp; 2 &amp; 1 \end{array} \right] 和 \left[ \begin{array}{ccc} -1 &amp; 0 &amp; 1 \\ -2 &amp; 0 &amp; 2 \\ -1 &amp; 0 &amp; 1 \end{array} \right] 101202101121000121
    第一个模板,第三行和第一行的差近似x方向的偏微分;第二个模板,第三列和第一列的差近似y方向的偏微分,而且模板的所有系数只和为0,表示恒定灰度区域的响应为0,Sobel得到的边缘较粗。

二阶微分算子

  • Laplacian算子
    二阶微分算子的代表是拉普拉斯算子,其定义如下:
    ∇ 2 f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 \nabla ^2 f = \frac{\partial^2 f} {\partial x^2} + \frac{\partial^2 f} {\partial y^2} 2f=x22f+y22f
    其中:
    ∂ 2 f ∂ x 2 = f ( x + 1 , y ) + f ( x − 1 , y ) − 2 f ( x , y ) ∂ 2 f ∂ y 2 = f ( x , y + 1 ) + f ( x , y − 1 ) − 2 f ( x , y ) \frac{\partial^2 f} {\partial x^2} = f(x + 1,y) + f(x - 1,y) - 2 f(x,y) \\ \frac{\partial^2 f} {\partial y^2} = f(x,y + 1) + f(x,y - 1) -2 f(x,y) x22f=f(x+1,y)+f(x1,y)2f(x,y)y22f=f(x,y+1)+f(x,y1)2f(x,y)
    得到模板如下:
    [ 0 1 0 1 − 4 1 0 1 0 ] 或 [ 0 − 1 0 − 1 4 − 1 0 − 1 0 ] \left[ \begin{array}{ccc} 0 &amp; 1 &amp; 0 \\ 1 &amp;-4 &amp; 1 \\ 0 &amp; 1 &amp; 0 \end{array} \right] 或 \left[ \begin{array}{ccc} 0 &amp; -1 &amp; 0 \\ -1 &amp;4 &amp; -1 \\ 0 &amp; -1 &amp; 0 \end{array} \right] 010141010010141010
    注意:模板中心的符号,并且模板的所有系数之和为0.
    由于拉普拉斯算子对噪声敏感,会得到双边,并且并不能检测边缘的方向,其通常不用于直接的边缘检测,只是起到辅助作用。检测某像素是在边缘的亮的一侧还是暗的一侧,利用“零跨越”确定边缘的位置。Laplacian算子得到的边缘则较细,并且边缘是双边缘。

Canny边缘检测

Canny算子是一个具有滤波、增强、检测的多阶段的优化算子。
Canny边缘检测算法:

  • 用高斯滤波器平滑图像
    在这里插入图片描述
  • 用一阶偏导的有限差分来计算梯度的幅值和方向
    在这里插入图片描述
  • 对梯度幅值进行非极大值抑制
    仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。
    在这里插入图片描述
  • 用双阈值算法检测和连接边缘
    对非极大值抑制图像作用两个阈值th1和th2,两者关系th1=0.4th2。我们把梯度值小于th1的像素的灰度值设为0,得到图像1。然后把梯度值小于th2的像素的灰度值设为0,得到图像2。由于图像2的阈值较高,去除大部分噪音,但同时也损失了有用的边缘信息。而图像1的阈值较低,保留了较多的信息,我们可以以图像2为基础,以图像1为补充来连结图像的边缘。

链接边缘的具体步骤如下:

  • 第一步,对图像2进行扫描,当遇到一个非零灰度的像素p(x,y)时,跟踪以p(x,y)为开始点的轮廓线,直到轮廓线的终点q(x,y)。
  • 第二步,考察图像1中与图像2中q(x,y)点位置对应的点s(x,y)的8邻近区域。如果在s(x,y)点的8邻近区域中有非零像素s(x,y)存在,则将其包括到图像2中,作为r(x,y)点。从r(x,y)开始,重复第一步,直到我们在图像1和图像2中都无法继续为止。
  • 第三步,当完成对包含p(x,y)的轮廓线的连结之后,将这条轮廓线标记为已经访问。回到第一步,寻找下一条轮廓线。
  • 第四步,重复第一步、第二步、第三步,直到图像2中找不到新轮廓线为止。

参考资料

[1] 图像处理基础(2):自适应中值滤波器(基于OpenCV实现)
[2] 图像处理基础(3):均值滤波器及其变种
[3] 线性滤波、非线性滤波区别
[4] openCV学习笔记(二十) —— 图像滤波 —— 线性滤波(方框滤波、均值滤波、高斯滤波)
[5] 【OpenCV学习笔记】之图像平滑(线性/非线性滤波器)
[6] 【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解
[7] 关于平滑处理及图像滤波与滤波器
[8] 图像卷积与滤波的一些知识点
[9] 高斯模糊的原理是什么,怎样在界面中实现?
[10] python的N个小功能(高斯模糊原理及实践)
[11] 图像处理基础(4):高斯滤波器详解
[12] Bilateral Filters(双边滤波算法)原理及实现
[13] 图像处理基础(5):双边滤波器
[16] 图像处理基础(6):锐化空间滤波器
[17] 边缘检测算法
[18] Canny边缘检测(转)

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值