机器视觉检测中的图像预处理方法

共 6878字,需浏览 14分钟

 ·

2022-08-03 10:31


点击上方“程序员大白”,选择“星标”公众号

重磅干货,第一时间送达

本文转载自:新机器视觉

本文以Dalsa sherlock软件为例,一起来了解一下视觉检测中平滑模糊的图像处理方法。

1.观察灰度分布来描述一幅图像称为空间域,观察图像变化的频率被称为频域。 

2.频域分析:低频对应区域的图像强度变化缓慢,高频对应的变化快。低通滤波器去除了图像的高频部分,高通滤波器去除了图像的低频部分

平滑模糊处理(低通)

高斯滤波,中值滤波,均值滤波都属于低通滤波

一副图像的边缘、跳跃部分以及颗粒噪声代表图像信号的高频分量

而大面积的背景区则代表图像信号的低频信号

用滤波的方式滤除其高频部分就能去掉噪声。

 在Sherlock中,采用低通处理来平滑图像的算法包括:Lowpass,Lowpass5X5,Gaussian ,Gaussian5X5,GaussianWXH,Median,Smooth


 低通滤波Lowpass     Lowpass5X5

在Sherlock中的这两个算法,直接理解为低通滤波,根据文档中的描述,这两个算法分别是对3x3和5x5大小尺寸内进行均值平滑图像,可重复多次执行,未能理解与smooth算法的区别


(1)均值滤波:Smooth

          均值滤波最简单的低通滤波,根据设定的尺寸,将相邻像素取平均值,Sherlock中使用的是3x3大小的尺寸,每个点的像素值由其原像素值和其周围的8个像素值的平均值取代。

例如下图,在3x3大小的过滤尺寸内,中心点原来的像素值为1,相邻像素取平均值为2,则经过均值滤波处理过,中心点的像素为2

(2)中值滤波:Median

       根据设定的尺寸,将区域内的像素进行排序,中心点的像素值由过滤尺寸内的位于中间的像素值取代

       中值滤波对于去除小的噪点或

者脉冲噪声效果非常好

       中值滤波会改变图像的结构,

图像的强度被改变

(3)高斯滤波:Gaussian   Gaussian5X5  GaussianWXH

高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到,模糊了图像的细节。常用于出去噪点,平滑边缘。

高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

Gaussian:

使用一个3X3大小,滤波器系数是一个标准差为0.85的二维高斯分布,可多次执行

Gaussian5X5:

使用一个5X5大小,滤波器系数是一个标准差为1的二维高斯分布,可多次执行,但是增加执行次数会增大标准差的值,近似于重复次数的平方根

注意:每次重复使用之后,都会图像的边界留出2个像素保持像素不变,如果对图像边界有影响,注意设定边界的灰度值

GaussianWXH:

使用一个可以设定尺寸大小,确定权重的标准差也可以设定

一个大的高斯过滤器可以用重复多次的小的高斯来实现

例如重复执行一个3x3或者5x5高斯,执行次数N*1.4或者N*2.8为过滤的尺寸,例如3x3执行9次,过滤的尺寸大约是9*1.4,与一个13X13高斯差不多

标准差σ

Sigma 越大,分布越均匀,周围的权重越大,模糊程度越大

Sigma越小,分布越集中,靠近中心的权重越大,模糊程度越小



                                       均值                                    高斯


【锐化 强化处理】


图像的锐化处理,使图像边缘更清晰,细节增强

Sherlock中用于锐化图像的算法有各种卷积:1X3,1X5,1X7,3X3,5X1,5X5,7X1,Chatter Edge,Gradient,Highpass ,Sharpen

◆ 1X3,1X5,1X7,3X3,5X1,5X5,7X1

分别是选择不同尺寸的卷积核,每个位置的像素与相邻像素通过设定的卷积核进行卷积运算。

假如目标像素点和它周边的值(上下左右前后的临点,具体的比邻范围依赖于算子的大小,3*3的算子比邻范围为1,5*5的为2,以此类推)得有较大差异,那么就可以通过这个算子对原图矩阵中的这个位置进行卷积运算,得出的值和该像素点原来的灰度值会产生显著的差异。当这种前后差异超过我们预设的范围后,就将这个像素点标记为255(白色),其余点标记为0(黑色),这样就得到了一黑色为背景,白色线条作为边缘或形状的边缘提取效果图。锐化算子:通过卷积运算,可以增大矩阵每一个元素与周边元素的方差,轻则起到锐化作用,重则成了边缘提取。反之,则是去噪过程。


上图为算法的参数就是设置卷积核的参数

◆ Chatter Edge

用于对噪音的或者模糊的边缘的提取,过滤尺寸可以自定义。输出的是二值化的或者修剪灰度比例的图像。由于机械振动引起的图像跳动,如下图:

使用一个可以调整过滤内核尺寸的差分过滤器,例如过滤尺寸为4的内核为{-1,0,0,1}或者过滤尺寸为6的内核为{-1,0,0,0,0,1}。这个过滤器在水平方向,垂直方向或者两者都有的方向扫描输入图像,得到输出图像。

应用一个过滤尺寸为16的,“X”方向过滤的过滤器,增强图中对比度比较低的边缘。


任何输出低于边缘阈值的值设定为0.等于或者大于边缘阈值的值输出为全白,如果keep gray above设为True,保留原来的值,

Filter size (卷积内核尺寸)可以设为2-255,由于卷积是线形操作,我们可以把这个差分过滤分成两个矩形(取样积分器)过滤器。一个过滤器相对于另一个过滤器偏移一个像素。一个矩形过滤器是低通滤波器,用来去除噪音。-1,….,1这些是用来增强边缘的。

Filter direction 设定过滤器的方向。“X”表示过滤器是水平的,“Y”表示过滤器是垂直的,这两个都会使过滤器扫描穿过输入图像,得到输出图像。如果是“either”,两个方向的过滤都应用。如果keep gray above设为false, X和Y的过滤结果通过逻辑OR合并处理。如果keep gray above设为true,输出是X和Y方向的最大值。

Transition type 设定边缘对比度变化。“Dark-to-light” 放大由暗到亮的边缘,“light-to-dark”放大由亮到暗的边缘。“either”两种对比度变化都被放大。

下侧的图像显示了一个非常缓慢和扩散过渡的边缘,右侧的图像显示了应用了一个过滤尺寸为10的chatter edges结果的图像。

Gradient 梯度锐化,线性ROI使用的

根据由距离分开的像素,使用线性梯度增强边缘

output = abs[ (n - separation/2) - (n + separation/2) ]

Highpass  Highpass5x5 高通滤波

Sharpen

在图像增强过程中,通常利用各类图像平滑算法消除噪声。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现(平滑可以认为是去除噪声,这样也就模糊了图像的边缘信息)。为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。微分运算是求信号的变化率,由傅立叶变换的微分性质可知,微分运算具有较强高频分量作用。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理.


【边缘检测】


边缘检测的一般步骤:

1.滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折中。

2.增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。

3.检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判据是梯度幅值阈值判据。

4.定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。在边缘检测算法中,前三个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没有必要指出边缘的精确位置或方向。

Sherlock中用于边缘检测的算法有:Canny,Compass,First Diff, Kirsch,Laplace,LineEnhance,Prewitt,Roberts,Second Diff ,Sobel

Sobel

由于Sobel 算子结合了 Gaussian 平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。

主要的方法就是将图像的每一个点都用sobel算子做卷积:一个用来检测垂直边缘,一个用来检测水平边缘,而最后两个卷积的最大值将作为该点的输出,即检测后的灰度。

Sobel算子:

可以看到sobel算子包括两组3*3的矩阵,左边的表示垂直,右边的表示水平。将它与图像作平面卷积,即可分别得出垂直及水平的亮度差分近似值。

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

Canny

三级操作检测所有方向的边缘.用一个SobelXY探测器查找边缘梯度,垂直于边缘轮廓的点被拒绝 ,最后应用边缘滞后阈值法。即一个高阈值和一个低阈值来区分边缘像素。如果边缘像素点梯度值大于高阈值,则被认为是强边缘点。如果边缘梯度值小于高阈值,大于低阈值,则标记为弱边缘点。小于低阈值的点则被抑制掉

强边缘点可以认为是真的边缘。弱边缘点则可能是真的边缘,也可能是噪声或颜色变化引起的。为得到精确的结果,后者引起的弱边缘点应该去掉。通常认为真实边缘引起的弱边缘点和强边缘点是连通的,而又噪声引起的弱边缘点则不会。所谓的滞后边界跟踪算法检查一个弱边缘点的8连通领域像素,只要有强边缘点存在,那么这个弱边缘点被认为是真是边缘保留下来。

Canny 推荐的 高:低 阈值比在 2:1 到3:1之间。

Canny检测边缘步骤举例:

1.消除噪声。 使用高斯平滑滤波器卷积降噪。  例如下面的5x5高斯内核

2.计算梯度幅值和方向。 此处,按照Sobel滤波器的步骤:

A.运用一对卷积阵列 (分别作用于 x 和y方向):

B.使用下列公式计算梯度幅值和方向:

梯度方向近似到四个可能角度之一(一般 0, 45, 90, 135)

3.非极大值 抑制。这一步排除非边缘像素, 仅仅保留了一些细线条(候选边缘)。

4.滞后阈值: 最后一步,Canny 使用了滞后阈值,滞后阈值需要两个阈值(高阈值和低阈值):

A.如果某一像素位置的幅值超过 高 阈值, 该像素被保留为边缘像素。

B.如果某一像素位置的幅值小于 低 阈值, 该像素被排除。

C.如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于 高 阈值的像素时被保留。

Laplace,Laplace5x5,拉普拉斯边缘探测器,分别使用3x3和5x5大小尺寸过滤,属于高通过滤  二阶微分

拉普拉斯锐化图像是根据图像某个像素的周围像素到此像素的突变程度有关。

从两种模板中就可以看出,如果一个黑色平面中有一个白点,那么模板矩阵可以使这个白点更亮。由于图像边缘就是灰度发生跳变的区域,所以拉普拉斯模板对边缘检测很有用。

一个函数的一阶微分描述了函数图像是朝哪里变化的,即增长或者降低;而二阶微分描述的则是图像变化的速度,急剧增长下降还是平缓的增长下降。那么据此我们可以猜测出依据二阶微分能够找到图像的色素的过渡程度,例如白色到黑色的过渡就是比较急剧的。     

或者说:当邻域中心像素灰度低于它所在的领域内其它像素的平均灰度时,此中心像素的灰度应被进一步降低,当邻域中心像素灰度高于它所在的邻域内其它像素的平均灰度时,此中心像素的灰度应被进一步提高,以此实现图像的锐化处理。

Compass

方向性的边缘过滤器,增强与选定方向垂直的边缘。平行于方向的边缘设为0

执行一阶微分过滤

First Diff X  快速强化垂直方向的边缘

      该点的像由其本身与其右侧像素的差的绝对值决定

First Diff Y  快速强化垂直方向的边缘

      该点的像由其本身与其下方像素的差的绝对值决定

First Diff XY快速强化任意方向的边缘

       该点的像由X和Y方向的差值的和决定

Second Diff X, Second Diff Y, Second Diff XY,

与上面的算法相同,只是像素由左右(或者上下)两侧像素分别与中心点像素差的和决定, output = abs(west - 2*center + east),output = abs(north - 2*center + south)

  output = abs(west - 2*center + east) + abs(north - 2*center + south)

Kirsch,根据选择的方向,使用3x3卷积增强由暗到亮的变化

LineEnhance,有方向性边缘探测器,垂直于指定方向的边缘或者线条会被强化

      使用二阶微分查找图像的变化梯度,属于边缘的部分灰度值由其中最大的灰度值替代,不属于边缘的部分将设为0

PrewittX,PrewittY,PrewittXY,分别是使用3x3大小的过滤器,增强水平,垂直,任意方向的边缘。PrewittX和PrewittY分别是保留水平方向和垂直方向为正向的边缘,负向的将为0,对噪声不敏感

Roberts,边缘算子采用的是对角方向相邻的两个像素之差,从图像处理的实际效果来看,边缘定位准,对噪声敏感。是一种利用局部查分算子寻找边缘的算子

 来源:致瑞图像

13个你一定要知道的PyTorch特性

解读:为什么要做特征归一化/标准化?

一文搞懂 PyTorch 内部机制

张一鸣:每个逆袭的年轻人,都具备的底层能力




西[]



浏览 48
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报