数字图像处理——第三章(灰度变换与空间滤波(空间域))


图像增强:不考虑 图像降质的原因,只将图像中 感兴趣的特征有选择地突出,对不需要的特征进行衰减。
图像增强的目的:1)改善图像视觉效果,便于观察和分析;2)便于人工或机器对图像的进一步处理
本章主要在空间域对图像及像素进行处理。通常空间域在 计算上更有效,且执行所需的处理资源较少。
空间域的处理分为 灰度变换[点处理](对图像的单个像素进行操作,主要以对比度和阈值处理为目的)和空间滤波[邻域处理](改善性能)。

一、灰度变换

对图像在空间域的处理公式可表示为:
g(x,y) = T[f(x,y)]
其中,f(x,y)是输入图像,g(x,y)是处理后的图像,T是在点(x,y)对邻域上定义的关于f的一种算子。算子可应用于单幅图像或图像集合。
若用r和s分别表示f和g在任一点(x,y)处的灰度,则灰度变换函数可表示为:
s = T(r)
在这里插入图片描述
灰度变换的关键:根据要解决的图像增强问题,选择合适的灰度变换函数T(r)。

1.1 基本灰度变换函数

灰度变换是所有图像处理技术中的最简单的技术。
在这里插入图片描述
该图展示了图像增强常用的三种基本函数:线性函数(反转和恒等变换)、对数函数(对数和反对数变换)和幂律函数(n次幂和n次根变换)。

1.1.1 图像反转

s = L - 1 - r
经此处理,可得到等效的照片底片。
此类处理适用于增强嵌入图像暗色区域中的白色或灰色细节,特别是当黑色面积在尺寸上占主导地位时。

在matlab中可以使用imcomplement函数实现反转。
程序:

image = imread('C:\Users\win\Desktop\subway.jpg');
figure('Name','图像反转');
image1 = imcomplement(image);
subplot(1,2,1);
imshow(image)
title('原图');
subplot(1,2,2);
imshow(image1);
title('反转图像')

实验结果:
在这里插入图片描述

1.1.2 对数变换

在这里插入图片描述
其中c为常数,假设r>=0。由上图可知,对数变换是将输入中范围较窄的低灰度值映射为输出中范围较宽的灰度值,或将输入中范围较宽的高灰度值映射为输出中范围较窄的灰度值。扩展图像中的暗像素值,同时压缩更高灰度级的值。
反对数变换与此相反。

程序:

image = imread('C:\Users\win\Desktop\car.jpg');
figure('Name','对数变换');
image1 = log(1 + double(image));
subplot(1,2,1);
imshow(image);
title('原图');
subplot(1,2,2);
imshow(image1);
title('变换后的图像')

实验结果:
在这里插入图片描述
注:如果原图像的灰度级为L,对数变换后的结果应当重新标定为[0,L-1]的灰度级。
如:对于一幅256灰度级的原图像,对数变换增强的结果用下式表示:
在这里插入图片描述

1.1.3 幂律(伽马)变换

主要用于图像的校正,将漂白的图片或是过黑的图片,进行修正。
在这里插入图片描述
其中c和γ为正常数。
在这里插入图片描述

  • γ<1时,γ越小,该变换越将低灰度值(暗值)进行拉伸
  • γ>1时,γ越大,该变换越将高灰度值(亮值)进行拉伸
    程序:
image = imread('C:\Users\win\Desktop\car.jpg');
f = mat2gray(image); %mat2gray把一个double类的任意数组转换成值范围在[0,1]的归一化double类数组
figure('Name','幂律变换');
image1 = f.^0.3;
image2 = image.^4;
image3 = image.^8;
subplot(2,2,1);imshow(image);title('原图');
subplot(2,2,2);imshow(image1);title('y = 0.3');
subplot(2,2,3);imshow(image2);title('y = 4');
subplot(2,2,4);imshow(image3);title('y = 8');

实验结果:
在这里插入图片描述

1.1.4 分段线性变换函数

  • 对比度拉伸
    对比度拉伸是扩展图像灰度级动态范围的处理。
    点(r1,s1)和点(r2,s2)的位置控制变换函数的形状。一般情况下,假设r1<=r2,s1<=s2,保证函数是单值的且是单调递增的。
    在这里插入图片描述
  • 灰度级分层
    突出图像中特定灰度范围的亮度。
    在这里插入图片描述
    左图:突出目标的轮廓,消除背景细节
    右图:突出目标的轮廓,保留背景细节
  • 比特平面分层
    像素是由比特组成的数字。如,256级灰度图像中,每个像素由8比特组成。替代突出灰度级范围,可突出特定比特来突出整个图像的外观。
    高阶比特包含了在视觉上很重要的大多数数据。低阶比特平面在图像中贡献了更精细的灰度细节。
    在这里插入图片描述

1.2 直方图处理

  • 直方图统计一幅图像中各个灰度级出现的次数
  • 直方图反映的是图像灰度级的统计信息,但丢失了所有像素点的空间信息,即像素点的相对位置
  • 任意特定的图像有唯一的直方图,但反之不成立。

灰度级范围为[0,L-1]的数字图像的直方图是离散函数
在这里插入图片描述
其中rk为第k级灰度值,nk为对应rk灰度级的个数。
用M*N进行归一化
在这里插入图片描述
暗图像中,直方图的分量集中在灰度级的低(暗)端。
亮图像中,直方图的分量集中在灰度级的高(亮)端。
低对比度图像直方图较窄,集中在灰度级中部。
当直方图均匀分布时,图像最清晰,即高对比度图像
直方图反映的总体性质:明暗程度、细节是否清晰,动态范围大小等。

1.2.1 直方图均衡化

直方图均衡化:将原图像的直方图通过变换函数变为均匀的直方图,然后按均匀直方图修改原图像,从而获得一幅灰度分布均匀的新图像。
直方图均衡能自动地确定变换函数,该函数寻求产生有均匀直方图的输出图像。
目的:增加灰度值的动态范围,增强图像的对比度。
考虑连续灰度值,用r表示待处理图像的灰度。
在这里插入图片描述
假设:
a、T(r)在区间[0,L-1]上为严格单调递增函数;
b、当0<=r<=L-1时,0<=T(r)<= L-1;
a条件保证原图各灰度级在变换后仍明亮对比度不变;
b条件保证输出灰度的范围与输入灰度的范围相同。
小结:

  • 因为直方图是近似的概率密度函数,所以用离散灰度级进行变换时很少得到完全平坦的结果;
  • 变换后灰度级减少,即出现灰度“简并”现象,造成一些灰度层次的损失;
  • 不能用于交互方式的图像增强应用,因为直方图均衡化只能产生唯一一个结果。

程序:

 img = imread('C:\Users\win\Desktop\snow.jpg');
 img1 = rgb2gray(img);
 img2 = histeq(img1); % 均衡化彩色图像时,首先要将彩色图像转换为灰度图
 figure('Name','直方图均衡化');
 subplot(1,2,1);imshow(img1); title('原图');
 subplot(1,2,2);imshow(img2); title('均衡化后');
 figure('Name','直方图比较');
 subplot(1,2,1);
 imhist(img1,64); %显示一个统计64个灰度级信息的直方图
 title('原图的直方图');
 subplot(1,2,2);imhist(img2,64); title('均衡化的直方图');

实验结果:
在这里插入图片描述
在这里插入图片描述
优点:
对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。
缺点:
如果像素集中在低灰度级,会导致输出图像集中在高灰度级,对比度仍然没有展开。而且有褪色的问题。
补充matlab——imhist和histeq函数

1.2.2 直方图匹配(规定化)

直方图匹配是将原始图像的直方图转换为期望(特定)的直方图的形状。是以直方图均衡化变换为中介来实现的。
令r和z分别表示输入图像R和特定输出图像Z的灰度级。
步骤:
1、分别对R和Z做直方图均衡化处理:s = T(r),G(z) [s = G(z)]
其中G(z)为变换函数
2、求G 变换的逆变换:
在这里插入图片描述
即可得到特定输出图像。
直方图均衡化是自动确定变换函数,直方图匹配是试凑变换函数。

1.2.3 局部直方图增强

以图像中每个像素的邻域中的灰度分布为基础设计变换函数,增强图像中小区域的细节。
步骤:
1、定义一个方向或矩形区域(邻域),该区域的中心位置在某个像素点;
2、计算该区域的直方图,利用前面介绍的技术来得到变换函数(均衡化/匹配);
3、使用该变换函数来映射该区域的中心像素的灰度;
4、把该区域的中心以一个像素移动到另一个像素,重复2~4步骤。

1.2.4 在图像增强中使用直方图统计

直接从直方图获得的统计参数用于图像增强。
令r表示区间[0.L-1]上代表灰度值的一个离散随机变量,令p(ri)表示对应于ri值的归一化直方图分量。
均值:图像中像素平均灰度的度量
在这里插入图片描述
灰度方差:图像对比度的度量
在这里插入图片描述
取样均值和取样方差:在仅处理均值和方差时,实际上通常直接从取样值来估计它们。
在这里插入图片描述
在这里插入图片描述
全局均值和方差时在整幅图像上计算的,用于调整的灰度和对比度。
局部均值和局部方差是根据图像中每个像素的邻域内的图像特征进行改变的基础。
令(x,y)表示给定图像中任意像素的坐标,Sxy表示规定大小的以(x,y)为中心的邻域。psxy为区域Sxy中像素的直方图。
在这里插入图片描述
在这里插入图片描述
:均值和方差更有力的应用是在局部增强中,不仅简单,灵活性大,而且局部均值和方差与图像的外观存在紧密的、可预测的关系。

二、空间滤波

2.1 基础

2.1.1 机理

空间滤波器的组成
1、一个邻域(通常是一个较小的矩形);
2、对该邻域所包围图像像素执行的预定义操作。

滤波产生一个新像素,新像素的坐标等于邻域中心的坐标,像素的值是滤波操作的结果。
滤波器的中心访问输入图像中的每个像素后,就生成了处理(滤波)后的图像。
滤波器的响应是滤波器系数与由该滤波器所包围的图像像素的乘积之和。
滤波器的尺寸一般都是奇数尺寸,最小尺寸为3*3。
在这里插入图片描述
步骤:(空间滤波都是利用模板卷积,下述的模板即是滤波器)
1、将模板在图中漫游,并将模板中心与图中某个像素位置重合;
2、将模板上系数与模板下对应像素相乘
3、将所有乘积相加(为保持灰度范围,常将结果再除以模板中所有系数的和)
4、将和(模板的输出响度)赋给图中对应模板中心位置的像素。
当模板边界超出图像的边界时,注意边界问题的处理,最常用的方法时填充,但其会影响图像的边界,影响程度随模板尺寸的增大而增加。

空间相关与卷积
相关:滤波器模板移过图像并计算每个位置乘积之和的处理。
卷积:卷积与相关操作相似,但滤波器首先要旋转180度。
对于大小为m*n的滤波器,需分别在图像的顶部和底部至少填充m-1行0,在左侧和右侧填充n-1列0。
在这里插入图片描述
如果滤波器模板是对称的,相关和卷积将得到相同的结果。

线型滤波的向量表示
在这里插入图片描述
w是大小为mxn的滤波器系数,z是由滤波器覆盖的相应图像的灰度值。
对于3x3的滤波器模板,
在这里插入图片描述
空间滤波器模板的产生
生成m x n的线性空间滤波器就要指定mxn个模板系数,系数是根据该滤波器支持什么样的操作确定的。线性滤波的作用是实现乘积求和操作。
如:需要将图像中的像素替换为以这些像素中心的3*3邻域的平均灰度。故图像中任意位置(x,y)的灰度平均值是以(x,y)为中心的3x3邻域的9个灰度值的平均值。
在这里插入图片描述
故滤波器的系数均为1/9。

2.1.2 滤波器相关函数

滤波器模板w的生成:w=fspecial(‘type’,parameters)

函数 描述
type=‘average’ 均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]
type= ‘gaussian’ 高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为 0.5
type= ‘laplacian’ 拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2
type= ‘log’ 拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5
type= ‘prewitt’ prewitt算子,用于边缘增强,无参数
type= ‘sobel’ sobel算子,用于边缘提取,无参数
type= ‘unsharp’ 对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2

线性滤波函数:imfilter()
g = imfilter(f, w, filtering_mode, boundary_options, size_options)
f为输入图像,w为滤波器模板,g为输出图像

  • filtering_mode:滤波过程使用的是“相关”还是“卷积”
  • boundary_options:处理边界充零问题
  • size_option:边界的大小由滤波器的大小确定
    在这里插入图片描述

非线性滤波:
参考:http://blog.sina.com.cn/s/blog_6f57a7150100o585.html
常见的两个函数是nlfilter()和colfilt(),nlfilter直接执行二维操作,而colfilt则以列的形式组织数据。虽然colfilt使用时需要占用更多的内存,但是速度比nlfilter快的多。故在实现非线性滤波时,使用更多的是colfilt。

colfilt函数的格式:
g = colfilt(f,[m,n],block_type,fun)
给定一幅M * N的图像f邻域大小为m * n,confilt生成一个最大尺寸为mn x MN的矩阵,称为A。每一列对应于图像中被邻域包围的像素。对每一列进行操作,返回一个行向量v,v中第k个元素即对A中的第k列做fun操作的结果。V的大小为1*MN。
[m,n]为滤波器的维数。
执行过程:
(1)、先是根据block_type将f(比如图像数据f(x,y))转换成待处理的矩阵B,方法为:B = im2col(f,[m n],block_type)
当block_type为’distinct’时,转换过程如下图所示:
在这里插入图片描述
当block_type为’sliding’(默认参数)时,转换过程如下图:
在这里插入图片描述

1、A是5阶魔方矩阵,仅作示意
2、使用了2x3的block
3、此转换过程是colfilt函数内部进行的
(2)、得到矩阵B,然后调用函数fun对B进行运算(fun为函数名柄),如:
g=colfilt(f,[5 5],‘sliding’,@mean) %使用mean函数(求均值)
(3)、colfilt函数的最后一步是将fun函数执行的结果,再调用col2im转换为和原始矩阵f同尺寸的矩阵,作为输出结果。
G = col2im(B’,[m n],[mm nn],‘distinct’) %B’是fun函数运算后的结果。
colfilt处理的关键在于fun函数的选取。

非线性滤波器必须在confilt函数之前显式地填充输入图像。
参考:https://blog.csdn.net/zlrai5895/article/details/79059918
g =padarray(f,padsize,padval,direction)
f为输入图像,g为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。具体如下:
padval

  • 'symmetric’表示图像大小通过围绕边界进行镜像反射来扩展;
  • 'replicate’表示图像大小通过复制外边界中的值来扩展;
  • 'circular’图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。

direction:

  • 'pre’表示在每一维的第一个元素前填充;
  • 'post’表示在每一维的最后一个元素后填充;
  • 'both’表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。

若参量中不包括direction,则默认值为’both’。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为’both’。在计算结束时,图像会被修剪成原始大小。

2.2 平滑空间滤波器

用于模糊处理和降低噪声,淡化细节部分。
通过线性滤波非线性滤波的处理,可以降低噪声。
缺点:如果图像处理的目的是去除噪音,那么在去除噪音的同时也钝化了图像的边和尖锐的细节。

2.2.1 平滑线性滤波器(均值滤波器)

使用滤波器模板确定的邻域内的像素的平均灰度值代替图像中的每个像素。
均值滤波器的主要应用是去除图像中的不相关细节,其中“不相关”是指与滤波器模板尺寸相比较小的像素区域。
盒状滤波器:所有系数都相等的空间均值滤波器
加权均值滤波器:赋予中心点最高权重,然后随着距中心点距离的增加而减少系数的加权策略的目的,是在平滑处理中试图降低模糊
在这里插入图片描述
MN的图像经过mn的加权均值滤波器的过程:
在这里插入图片描述
其中a = (m-1)/2,b = (n-1)/2,分母部分表示为模板的各系数之和,是仅需计算一次的常数,且一般为2的整数次幂。
模板尺寸越大,图像越模糊,图像丢失的细节越多。

f = imread('C:\Users\win\Desktop\landscape.jpg');
w = fspecial('average',3); % 3*3的均值滤波器
w2 = fspecial('average',10);
g = imfilter(f,w); %线性滤波函数
h = imfilter(f,w2);
figure(1);
subplot(1,3,1);imshow(f);title('原图');
subplot(1,3,2);imshow(g);title('3*3的均值滤波器处理的图像');
subplot(1,3,3);imshow(h);title('10*10的均值滤波器处理的图像');

在这里插入图片描述

2.2.2 统计排序(非线性)滤波器

该种滤波器的响应:将滤波器包围的图像区域中所包含的像素排序,使用排序结果决定的值代替中心像素的值。

  • 中值滤波器:用像素邻域内灰度的中值(中值计算时包括原像素值)代替该像素的值。
    能有效处理脉冲噪声(椒盐噪声:以黑白点的形式叠加在图像上)
    使用m*m的中值滤波器来去除那些相对于其邻域像素更亮或更暗,且区域小于滤波器区域一半的孤立像素簇。即强迫突出的亮点(暗点)更像它周围的值,以消除孤立的亮点(暗点)。
    中值滤波算法的特点:在去除噪声的同时,可以较好地保留边的锐度和图像细节。
  • 最大值滤波器:用像素邻域内灰度的最大值来代替该像素的值。
  • 最小值滤波器:用像素邻域内灰度的最小值来代替该像素的值。

ordfilt2函数:二维统计顺序滤波函数
参考:http://blog.sina.com.cn/s/blog_5f2c831b0101dpnx.html
对于给定的n个数值{al ,a2,…,an},将它们按大小顺序排列,将处于第k个位置的元素作为图像滤波输出。
g =ordfilt2(f,order,domain)
g =ordfilt2(f,order,domain,S)
order为滤波器输出的顺序值,domain为滤波窗口。S是与domain大小相同的矩阵,它是对应domain中非零值位置的输出偏置,这在图形形态学中是很有用的。如:
g=ordfilt2(f,5,ones(3,3)),相当于3×3的中值滤波
g=ordfilt2(f,1,ones(3,3)),相当于3×3的最小值滤波
g=ordfilt2(f,9,ones(3,3)),相当于3×3的最大值滤波
g=ordfilt2(f,1,[0 1 0;1 0 1;0 1 0]),输出的是每个像素的东、西、南、北四个方向相邻像素灰度的最小值。

order的值取决于滤波器模板的大小。
domain矩阵中可能会有某些位置为零(不为零的位置为1),这种为零的位置不算在顺序统计的领域之中。

中值滤波器
g=medfilt2(f,[m,n],padnot)
[m,n]为滤波器模板的大小。
padnot为周边填充的模式。‘zeros’(默认值),‘symmetric’镜像反射填充,‘indexed’表示若f是double类,用1填充,否则用0填充。

img = imread('C:\Users\win\Desktop\landscape.jpg');
f = rgb2gray(img); %将原图转为灰度图
p1 = imnoise(f,'gaussian',0.05); % 给原图加入高斯噪声
p2 = imnoise(f,'salt & pepper',0.05); % 给原图加入椒盐噪声
g1 = ordfilt2(p1,1,ones(3,3)); % 对高斯噪声最小值滤波
g2 = medfilt2(p1,[3,3]); % 对高斯噪声中值滤波
g3 = ordfilt2(p1,9,ones(3,3)); % 对椒盐噪声最大值滤波
h1 = ordfilt2(p2,1,ones(3,3)); % 对椒盐噪声最小值滤波
h2 = medfilt2(p2,[3,3]); % 对椒盐噪声中值滤波
h3 = ordfilt2(p2,9,ones(3,3)); % 对椒盐噪声最大值滤波
figure(1);
subplot(1,2,1);imshow(img);title('原图');
subplot(1,2,2);imshow(f);title('灰度图')
figure(2);
subplot(2,2,1);imshow(p1);title('原图+高斯噪声');
subplot(2,2,2);imshow(p2);title('原图+椒盐噪声');
subplot(2,2,3);imshow(g2);title('中值滤波器处理高斯噪声');
subplot(2,2,4);imshow(h2);title('中值滤波器处理椒盐噪声');

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

2.3 锐化空间滤波器

用于突出灰度的过渡部分,突出细节或者增强被模糊了的细节
锐化处理可由空间微分来实现。
一维函数f(x)的一阶微分的基本定义是差值:
在这里插入图片描述
二阶微分定义为差分:
在这里插入图片描述
一阶微分处理主要应用于提取边缘;二阶微分主要用于增强细节,是一个适合锐化图像的理想特征。

2.3.1 使用二阶微分锐化图像——拉普拉斯算子

各向同性滤波器:旋转不变,即将原图像旋转后进行滤波处理给出的结果,与先对图像滤波后再旋转的结果相同。
拉普拉斯算子:最简单的各向同性微分算子。
二维图像函数f(x,y)的拉普拉斯算子定义如下:
在这里插入图片描述
任意阶的微分都是线性操作,故拉普拉斯变换也是一个线性算子。
两个变量的离散拉普拉斯算子:
在这里插入图片描述
拉普拉斯的应用着重于图像中的灰度突变区域,而非灰度级缓慢变换的区域。拉普拉斯图像增强是要将原图像和拉普拉斯图像进行叠加(相加或相减)来得到最终的结果。
使用拉普拉斯图像增强的基本方法:
在这里插入图片描述
所定义的中心系数是负的,则c = -1,反之,c = 1
在这里插入图片描述
实践中常见的是上图中c和d所示的模板。
包含对角线的拉普拉斯滤波器产生微小的、更锐化的结果。

img = imread('C:\Users\win\Desktop\landscape.jpg');
w = fspecial('laplacian',0.5);
g = imfilter(img,w);
figure(1);
subplot(1,2,1);imshow(img);title('原图');
subplot(1,2,2);imshow(g);title('拉普拉斯锐化图像')

在这里插入图片描述

2.3.2 非锐化掩蔽和高提升滤波

印刷和出版业使用的图像锐化处理过程是:从原图像中减去一幅非锐化(平滑)的版本。称为非锐化掩蔽。步骤如下:
1、模糊原图像;
2、从原图像中减去模糊图像(产生的差值图像称为模板);
3、将模板加到原图像上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
k为权重系数(k>=0)。
当k = 1时,称为非锐化掩蔽;当k>1时,该处理称为高提升滤波;k<1时则不强调非锐化模板的贡献。
当k足够大时,会产生不好结果。

2.3.3 使用一阶微分锐化(非线性)图像——梯度

图像处理中的一阶微分是用梯度幅值来实现的。对函数f(x,y),f在(x,y)处的梯度定义为二维列向量:
在这里插入图片描述
向量▽f的幅值(长度)表示为M(x,y)
在这里插入图片描述
(非线性算子,各向同性)
它是梯度向量方向变化率在(x,y)处的值。M(x,y)是与原图像大小相同的图像,实践中,通常称为梯度图像。

在某些实现中,用绝对值类近似平方和平方根操作:
在这里插入图片描述
(非各向同性)
在这里插入图片描述
Roberts(罗伯特交叉)算子:
在这里插入图片描述
在这里插入图片描述
w1对接近+45度边缘有较强响应,w2对接近-45度边缘有较强响应。
罗伯特交叉算子处理图像的结果为w1和w2分别处理的总和。

img = imread('C:\Users\win\Desktop\bacteria.png');
w1 = [-1 0;0 1];
w2 = [0 -1;1 0];
g1 = imfilter(img,w1);
g2 = imfilter(img,w2);
g = abs(g1) + abs(g2);  %g1和g2中可能有负值,所以要取绝对值
figure(1);
subplot(2,2,1);imshow(img);title('原图');
subplot(2,2,2);imshow(g);title('Robert梯度处理');
subplot(2,2,3);imshow(abs(g1));title('w1');
subplot(2,2,4);imshow(abs(g2));title('w2');

在这里插入图片描述
Sobel算子:
在这里插入图片描述
在这里插入图片描述
w1对水平边缘有较大响应的竖直梯度,w2对竖直边缘有较大响应的竖直梯度。
sobel算子处理图像的结果为w1和w2分别处理的总和。

img = imread('C:\Users\win\Desktop\bacteria.png');
w1 = fspecial('sobel'); % 得到水平sobel算子
w2 = w1'; % 对水平sobel算子进行转置得到竖直的
g1 = imfilter(img,w1);
g2 = imfilter(img,w2);
g = abs(g1) + abs(g2);  %g1和g2中可能有负值,所以要取绝对值
figure(1);
subplot(2,2,1);imshow(img,[]); %为了便于观察,将图像的灰度范围线性变换到0~255,使图像最小灰度值为0,最大为255,故在imshow函数中加参数‘[]’
title('原图');
subplot(2,2,2);imshow(g,[]);title('sobel梯度处理');
subplot(2,2,3);imshow(abs(g1),[]);title('w1');
subplot(2,2,4);imshow(abs(g2),[]);title('w2');

在这里插入图片描述
梯度处理一般用于辅助人工检测产品缺陷,也用于自动监测的预处理,还可突出灰度图像中看不见的斑点(外来物,保护液中的气泡或眼睛中的小缺陷),也能在灰度平坦区域中增强小突变。

发布了12 篇原创文章 · 获赞 2 · 访问量 7742

猜你喜欢

转载自blog.csdn.net/denglavender/article/details/104268422