Matlab基于腐蚀和膨胀的边缘检测
图像分析MATLAB实现的图像的基本操作5 实现图像的膨胀腐蚀闭运算 实现图像的边缘和骨架提取

生作业科目:数字图像分析与理解学号:姓名:时间:通过matlab对图像的一些基本操作如下:g5=imread('timg(5).jpg');R_data =g5(:,:,1);G_data =g5(:,:,2);B_data =g5(:,:,3);%imshow(RGB_data);[ROW,COL, DIM] = size(g5);Y_data = zeros(ROW,COL);Cb_data = zeros(ROW,COL);Cr_data = zeros(ROW,COL);Gray_data = g5;for r = 1:ROWfor c = 1:COLY_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) +0.114*B_data(r, c);Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) +0.511*B_data(r, c) + 128;Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) -0.083*B_data(r, c) + 128;endendGray_data(:,:,1)=Y_data;Gray_data(:,:,2)=Y_data;Gray_data(:,:,3)=Y_data;%Median Filterimgn = imnoise(Gray_data,'salt & pepper',0.02);Median_Img = Gray_data;for r = 2:ROW-1for c = 2:COL-1median3x3 =[imgn(r-1,c-1) imgn(r-1,c) imgn(r-1,c+1)imgn(r,c-1) imgn(r,c) imgn(r,c+1)imgn(r+1,c-1) imgn(r+1,c) imgn(r+1,c+1)];sort1 = sort(median3x3, 2, 'descend');sort2 = sort([sort1(1), sort1(4), sort1(7)], 'descend');sort3 = sort([sort1(2), sort1(5), sort1(8)], 'descend');sort4 = sort([sort1(3), sort1(6), sort1(9)], 'descend');mid_num = sort([sort2(3), sort3(2), sort4(1)], 'descend');Median_Img(r,c) = mid_num(2);endendMedian_Img = double(Median_Img);Sobel_Threshold = 150;Sobel_Img = zeros(ROW,COL);for r = 2:ROW-1for c = 2:COL-1Sobel_x = Median_Img(r-1,c+1) + 2*Median_Img(r,c+1) +Median_Img(r+1,c+1) - Median_Img(r-1,c-1) - 2*Median_Img(r,c-1) -Median_Img(r+1,c-1);Sobel_y = Median_Img(r-1,c-1) + 2*Median_Img(r-1,c) +Median_Img(r-1,c+1) - Median_Img(r+1,c-1) - 2*Median_Img(r+1,c) -Median_Img(r+1,c+1);Sobel_Num = abs(Sobel_x) + abs(Sobel_y);%Sobel_Num = sqrt(Sobel_x^2 + Sobel_y^2);if(Sobel_Num > Sobel_Threshold)Sobel_Img(r,c)=255;elseSobel_Img(r,c)=0;endendend%DilationDilation_img = zeros(ROW,COL);for r = 2:ROW-1for c = 2:COL-1or1 = bitor(Sobel_Img(r-1, c-1), bitor(Sobel_Img(r-1, c),Sobel_Img(r-1, c+1)));or2 = bitor(Sobel_Img(r, c-1), bitor(Sobel_Img(r, c), Sobel_Img(r, c+1)));or3 = bitor(Sobel_Img(r+1, c-1), bitor(Sobel_Img(r+1, c),Sobel_Img(r+1, c+1)));Dilation_img(r, c) = bitor(or1, bitor(or2, or3));endend%ErosionErosion_img = zeros(ROW,COL);for r = 2:ROW-1for c = 2:COL-1and1 = bitand(Dilation_img(r-1, c-1), bitand(Dilation_img(r-1, c), Dilation_img(r-1, c+1)));and2 = bitand(Dilation_img(r, c-1), bitand(Dilation_img(r, c), Dilation_img(r, c+1)));and3 = bitand(Dilation_img(r+1, c-1), bitand(Dilation_img(r+1, c), Dilation_img(r+1, c+1)));Erosion_img(r, c) = bitand(and1, bitand(and2, and3));endend%开闭运算g6=imread('timg(6).jpg');i1=rgb2gray(g6); %转灰度图像i2=im2bw(i1); %二值化搜索i3 = bwmorph(i2,'open'); %开运算i4 = bwmorph(i2,'close'); %闭运算%边缘提取i=imread('1.jpg');i=im2double(i);ihd=rgb2gray(i);[thr,sorh,keepapp]=ddencmp('den','wv',ihd);ixc=wdencmp('gbl',ihd,'sym4',2,thr,sorh,keepapp);k2=medfilt2(ixc,[7 7]);isuo=imresize(k2,0.25,'bicubic');%sobert、robert和prewitt算子检测图像边缘esobel=edge(isuo,'sobel');erob=edge(isuo,'roberts');eprew=edge(isuo,'prewitt');subplot(2,2,1);imshow(isuo);title('前期处理图像');subplot(2,2,2);imshow(esobel);title('sobel算子提取');subplot(2,2,3);imshow(erob);title('roberts算子提取');subplot(2,2,4);imshow(eprew);title('prewitt算子提取');%骨架提取I2=imread('2.jpg'); %读取当前路径下的图片subplot(2,2,1),imshow(I2);title('原始图像');axis([50,250,50,200]);axis on;I1=im2bw(I2);subplot(2,2,2),imshow(I1);title('二值图像');axis([50,250,50,200]);axis on;I2=bwmorph(I1,'skel',1);subplot(2,2,3),imshow(I2);title('1次骨架提取');axis([50,250,50,200]);axis on ;I3=bwmorph(I1,'skel',2);subplot(2,2,4),imshow(I3);title('2次骨架提取');axis([50,250,50,200]);axis on ;figure;subplot(221);imshow(Gray_data);title('原图'); subplot(222);imshow(imgn);title('含噪声图');subplot(223);imshow(Dilation_img);title('膨胀图'); subplot(224);imshow(Erosion_img);title('腐蚀图');figure;subplot(221);imshow(i1);title('原图');subplot(222);imshow(i2);title('二值图');subplot(223);imshow(i3);title('开运算图');subplot(224);imshow(i4);title('闭运算图');。
8.matlab图像处理基础——边缘检测+形态学变换+图像增强

8.matlab图像处理基础——边缘检测+形态学变换+图像增强1、边缘检测①处理结果 = edge(原始图像,算⼦) 算⼦: Sobel log Roberts Canny Prewitt zerocross%% 边缘检测I = imread('cameraman.tif');J1 = edge(I,'Sobel');subplot(3,3,1),imshow(I);title('原始图像');subplot(3,3,2),imshow(J1);title('Sobel检测图像');J2 = edge(I,'Roberts');subplot(3,3,3),imshow(J2);title('Roberts检测图像');J3 = edge(I,'Prewitt');subplot(3,3,4),imshow(J3);title('Prewitt检测图像');J4 = edge(I,'log');subplot(3,3,5),imshow(J4);title('log检测图像');J5 = edge(I,'Canny');subplot(3,3,6),imshow(J5);title('Canny检测图像');J6 = edge(I,'zerocross');subplot(3,3,7),imshow(J6);title('zerocross检测图像');2、形态学变换(1)图像腐蚀 se = strel('disk' ,3); resultImage=imerode(originalImage, se);%% 图像腐蚀I = imread('cameraman.tif');se = strel('disk',3);J = imerode(I,se);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);(2)膨胀 se = strel('disk' ,3); resultImage=imdilate(originalImage, se);%% 膨胀I = imread('cameraman.tif');se = strel('disk',3);J = imdilate(I,se);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);(3)开运算 先腐蚀,后膨胀。
【2019年整理】Matlab基于腐蚀和膨胀的边缘检测

Matlab基于腐蚀和膨胀的边缘检测文/天神一.课题背景:形态学运算只针对二值图像(二进制图像),并依据数学形态学(Mathermatical Morphogy)集合论方法发展起来的图像处理方法,起源于岩相对岩石结构的定量描述工作,在数字图像处理和机器视觉领域中得到了广泛的应用,形成了一种独特的数字图像分析方法和理论。
数学形态学是图像处理和模式识领域的新方法,其基本思想是:用具有一定形态的结构元素去量度和提取图像中的对应形状,以达到图像分析和识别的目的。
优势有以下几点:有效滤除噪声,保留图像中原有信息,算法易于用并行处理方法有效实现(包括硬件实现),基于数学形态学的边缘信息提取处理优于基于微分运算的边缘提取算法,提取的边缘比较平滑,提取的图像骨架也比较连续,断点少。
二、课题相关原理:形态学基本运算:特殊领域运算形式——结构元素(Structure Element),在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。
运算结果是输出图像的相应像素。
运算效果取决于结构元素大小内容以及逻辑运算性质。
常见形态学运算有腐蚀(Erosion)和膨胀(Dilation)两种。
集合论是数学形态学的基础。
有集合、元素、子集、并集、补集、位移、映像(镜像对称)、差集等集合的基本概念。
对象和结构元素的3种关系:『对象X(Object)、结构元素B(Structure Element)』B include in X 包含于、B hit X 击中(不全包含)、B miss X 击不中(不包含)平移、对称集:Bx=Uy{x+y} B^=Uy{-y}腐蚀:一种消除边界点,使边界向内部收缩的过程。
利用它可以消除小而且无意义的物体。
B对X腐蚀所产生的二值图像E是满足以下条件的点(x,y)的集合:如果B的原点平移到点(x,y),那么B将完全包含于X中。
膨胀:将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。
利用它可以填补物体中的空洞。
matlab中有关膨胀与腐蚀的解释

腐蚀与膨胀的基本原理1。
图像形态学处理的概念数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。
图像形态学处理中我们感兴趣的主要是二值图像。
在二值图像中,所有黑色像素的集合是图像完整的形态学描述,二值图像的各个分量是Z2的元素.假定二值图像A和形态学处理的结构元素B是定义在笛卡儿网格上的集合,网格中值为1的点是集合的元素,当结构元素的原点移到点(x,y)时,记为Sxy,为简单起见,结构元素为3x3,且全都为1,在这种限制下,决定输出结果的是逻辑运算。
2。
膨胀和腐蚀膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。
①膨胀是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的。
A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的。
我们可以把上式改写为:结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的.⑴用结构元素B,扫描图像A的每一个像素⑵用结构元素与其覆盖的二值图像做“与”操作⑶如果都为0,结果图像的该像素为0。
否则为1②腐蚀对Z中的集合A和B,B对A进行腐蚀的整个过程如下:⑴用结构元素B,扫描图像A的每一个像素⑵用结构元素与其覆盖的二值图像做“与”操作⑶如果都为1,结果图像的该像素为1。
否则为0腐蚀处理的结果是使原来的二值图像减小一圈。
3.击中(匹配)或击不中变换假设集合A是由3个子集X,Y和Z组成的集合,击中(匹配)的目的是要在A中找到X的位置,我们设X被包围在一个小窗口W中,与W有关的X的局部背景定义为集合的差(W-X),则X在A内能得到精确拟合位置集合是由X对A的腐蚀后由(W-X)对A的补集Ac腐蚀的交集,这个交集就是我们要找的位置,我们用集合B来表示由X和X的背景构成的集合,我们可以令B =(B1,B2),这里B1=X,B2=(W-X),则在A中对B进行匹配可以表示为:A⊙B我们称为形态学上的击中或击不中变换。
matlab 的腐蚀与膨胀结构元素

文章内容:一、腐蚀与膨胀的定义和作用在图像处理和计算机视觉中,腐蚀和膨胀是常用的图像形态学处理操作,用于图像的边缘检测、特征提取等。
腐蚀是一种图像变换操作,通过对图像中每个像素的局部邻域应用结构元素来改变原始图像,使得图像中的物体缩小或者断开。
腐蚀操作通常用于消除图像中的小型噪声、分割图像中的物体等。
相反,膨胀则是通过对图像中每个像素的局部邻域应用结构元素来扩张原始图像,使得图像中的物体增大或连接。
膨胀操作通常用于填充图像中的孔洞、连接断开的物体等。
二、matlab 中腐蚀与膨胀的实现在matlab中,我们可以使用imerode函数来实现腐蚀操作,使用imdilate函数来实现膨胀操作。
这两个函数都需要指定一个结构元素作为参数,该结构元素通常是一个二值矩阵,用于描述要应用于图像的变换。
在实现腐蚀和膨胀操作时,我们可以通过调整结构元素的形状和大小,来达到不同的效果。
使用一个较小的正方形结构元素可以对图像进行细化处理,而使用一个较大的圆形结构元素可以对图像进行填充处理。
三、结构元素的选择和影响在进行腐蚀和膨胀操作时,结构元素的选择对最终的处理效果有很大的影响。
对于不同形状和大小的结构元素,它们在图像上的操作效果也会有所不同。
当我们想要消除图像中的小噪点时,可以选择一个较小的结构元素来进行腐蚀操作;当我们想要填充图像中的孔洞时,可以选择一个较大的结构元素来进行膨胀操作。
在实际应用中,我们可以通过试验不同的结构元素来找到最适合的处理效果。
四、个人观点和理解在我看来,腐蚀和膨胀操作是图像处理中非常实用且重要的一部分。
通过合理选择结构元素和调整参数,我们可以对图像进行精细化的操作,从而达到我们想要的效果。
腐蚀和膨胀操作也可以结合使用,来实现更复杂的图像处理需求。
在实际应用中,我发现腐蚀和膨胀操作在物体识别、图像分割等领域有着很好的效果,可以有效提高图像处理的准确性和鲁棒性。
总结:通过本文的介绍,我们了解了腐蚀和膨胀在图像处理中的基本原理和实现方法。
matlab边缘检测步骤 -回复

matlab边缘检测步骤-回复Matlab边缘检测步骤边缘检测是计算机视觉和图像处理中常用的技术之一,它可以识别图像中不同区域之间的边界和轮廓。
边缘检测对于图像分割、物体识别和目标跟踪等应用非常重要。
Matlab作为一种强大的计算软件和编程语言,提供了一系列用于边缘检测的函数和工具。
在本文中,我们将逐步介绍Matlab 中进行边缘检测的步骤。
步骤一:读取图像首先,我们需要读取待处理的图像。
在Matlab中,可以使用imread函数来读取图像,并将其存储在一个变量中。
例如,下面的代码可以读取名为"image.jpg"的图像:image = imread('image.jpg');步骤二:灰度化在进行边缘检测之前,通常需要将彩色图像转换为灰度图像。
灰度图像只包含亮度信息,而不包含颜色信息,这样可以简化边缘检测的计算。
在Matlab中,可以使用rgb2gray函数将彩色图像转换为灰度图像。
下面的代码可以将前面读取的彩色图像转换为灰度图像:grayImage = rgb2gray(image);步骤三:滤波在进行边缘检测之前,通常需要对图像进行滤波,以平滑图像并去除噪声。
在Matlab中,有许多滤波器可以使用,例如高斯滤波器和中值滤波器。
可以使用imfilter函数来应用这些滤波器。
下面的代码可以将前一步得到的灰度图像应用高斯滤波器来平滑图像:filteredImage = imfilter(grayImage, fspecial('gaussian'));步骤四:计算梯度接下来,我们需要计算图像中每个像素的梯度。
梯度表示图像中像素灰度变化的方向和强度。
在Matlab中,可以使用gradient函数来计算梯度。
下面的代码可以计算前一步得到的滤波后图像的梯度:[gradX, gradY] = gradient(filteredImage);这里,gradX和gradY分别表示沿x和y轴方向的梯度。
matlab形态学腐蚀膨胀sobel算子边缘检测

matlab形态学腐蚀膨胀sobel算子边缘检测Title: Image Processing with MATLAB: Morphological Erosion, Dilation, and Sobel Edge DetectionMATLAB, a powerful tool for numerical computation and visualization, is widely used in image processing tasks. Among the various operations, morphological erosion and dilation, as well as Sobel edge detection, play crucial roles in extracting meaningful information from images.MATLAB作为一种强大的数值计算和可视化工具,在图像处理任务中得到了广泛应用。
在众多操作中,形态学腐蚀、膨胀以及Sobel边缘检测在从图像中提取有意义信息方面发挥着至关重要的作用。
Morphological erosion is a process that removes pixels from the boundaries of objects in an image, effectively 'shrinking' them. This operation is useful in eliminating small, noisy elements while preserving larger structures.形态学腐蚀是一个过程,它从图像中对象的边界移除像素,从而有效地“缩小”它们。
这种操作在消除小的噪声元素同时保留较大结构方面非常有用。
On the other hand, morphological dilation enlarges objects by adding pixels to their boundaries. This helps to fill small gaps or holes within objects, enhancing their connectivity and visibility.另一方面,形态学膨胀通过向对象边界添加像素来扩大对象。
图像边缘检测各种算子MATLAB实现以及实际应用

《图像处理中的数学方法》实验报告学生姓名:***教师姓名:曾理学院:数学与统计学院专业:信息与计算科学学号:********联系方式:139****1645梯度和拉普拉斯算子在图像边缘检测中的应用一、数学方法边缘检测最通用的方法是检测灰度值的不连续性,这种不连续性用一阶和二阶导数来检测。
1.(1)一阶导数:一阶导数即为梯度,对于平面上的图像来说,我们只需用到二维函数的梯度,即:∇f=[g xg y]=[ðf ðxðfðy],该向量的幅值:∇f=mag(∇f)=[g x2+g y2]1/2= [(ðf/ðx)2+(ðf/ðy)2]1/2,为简化计算,省略上式平方根,得到近似值∇f≈g x2+g y2;或通过取绝对值来近似,得到:∇f≈|g x|+|g y|。
(2)二阶导数:二阶导数通常用拉普拉斯算子来计算,由二阶微分构成:∇2f(x,y)=ð2f(x,y)ðx2+ð2f(x,y)ðy22.边缘检测的基本思想:(1)寻找灰度的一阶导数的幅度大于某个指定阈值的位置;(2)寻找灰度的二阶导数有零交叉的位置。
3.几种方法简介(1)Sobel边缘检测器:以差分来代替一阶导数。
Sobel边缘检测器使用一个3×3邻域的行和列之间的离散差来计算梯度,其中,每行或每列的中心像素用2来加权,以提供平滑效果。
∇f=[g x2+g y2]1/2={[(z7+2z8+z9)−(z1+2z2+z3)]2+[(z3+2z6+z9)−(z1+2z4+z7)]2}1/2(2)Prewitt边缘检测器:使用下图所示模板来数字化地近似一阶导数。
与Sobel检测器相比,计算上简单一些,但产生的结果中噪声可能会稍微大一些。
g x=(z7+z8+z9)−(z1+z2+z3)g y=(z3+z6+z9)−(z1−z4−z7)(3)Roberts边缘检测器:使用下图所示模板来数字化地将一阶导数近似为相邻像素之间的差,它与前述检测器相比功能有限(非对称,且不能检测多种45°倍数的边缘)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab基于腐蚀和膨胀的边缘检测文/天神一.课题背景:形态学运算只针对二值图像(二进制图像),并依据数学形态学(Mathermatical Morphogy)集合论方法发展起来的图像处理方法,起源于岩相对岩石结构的定量描述工作,在数字图像处理和机器视觉领域中得到了广泛的应用,形成了一种独特的数字图像分析方法和理论。
数学形态学是图像处理和模式识领域的新方法,其基本思想是:用具有一定形态的结构元素去量度和提取图像中的对应形状,以达到图像分析和识别的目的。
优势有以下几点:有效滤除噪声,保留图像中原有信息,算法易于用并行处理方法有效实现(包括硬件实现),基于数学形态学的边缘信息提取处理优于基于微分运算的边缘提取算法,提取的边缘比较平滑,提取的图像骨架也比较连续,断点少。
二、课题相关原理:形态学基本运算:特殊领域运算形式——结构元素(Structure Element),在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。
运算结果是输出图像的相应像素。
运算效果取决于结构元素大小内容以及逻辑运算性质。
常见形态学运算有腐蚀(Erosion)和膨胀(Dilation)两种。
集合论是数学形态学的基础。
有集合、元素、子集、并集、补集、位移、映像(镜像对称)、差集等集合的基本概念。
对象和结构元素的3种关系:『对象X(Object)、结构元素B(Structure Element)』B include in X 包含于、B hit X 击中(不全包含)、B miss X 击不中(不包含)平移、对称集:Bx=Uy{x+y} B^=Uy{-y}腐蚀:一种消除边界点,使边界向内部收缩的过程。
利用它可以消除小而且无意义的物体。
B对X腐蚀所产生的二值图像E是满足以下条件的点(x,y)的集合:如果B的原点平移到点(x,y),那么B将完全包含于X中。
膨胀:将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。
利用它可以填补物体中的空洞。
B 对X膨胀所产生的二值图像D是满足以下条件的点(x,y)的集合:如果B的原点平移到点(x,y),那么它与X的交集非空。
腐蚀和膨胀运算中存在对偶原理:X⊕B,它是所有满足以下条件的点X'的集合:在B中存在一点y,而且在X中存在一点x,使得x'=x+y。
基本运算:1.开运算(先腐蚀后膨胀的过程):利用它可以消除小物体,在纤细点处分离物体,平滑较大物体边界,但同时并不明显改变原来物体的面积。
OPEN(X,B)2.闭运算(先膨胀后腐蚀的过程):利用它可以填充物体内细小空洞,连接临近物体、平滑其边界,但同时并不明显改变原来物体的面积。
CLOSE(X,B)通常由于噪声的影响,图像在阈值化后所得到的边界通常都很不平滑,物体区域具有一些噪声孔,而背景区域上散布着一些小的噪声物体,连续的开和闭运算可以有效的改善这种情况,而有时,我们需要经过多次腐蚀之,后再加上相同次数的膨胀,才能产生比较好的处理效果。
另外两种是3.击中,击不中变换HMT(模板严格匹配)以及4.边缘和骨架(Boundary and Skeleton)三、腐蚀和膨胀的Matlab实现:腐蚀:删除对象边界某些像素。
膨胀:给图像中的对象边界添加像素。
在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。
在膨胀操作时,输出像素值是输入图像相应像素邻域内所有像素的最大值。
在二进制图像中,如果任何像素值为1,那么对应的输出像素值为1;而在腐蚀操作中,输出像素值是输入图像相应像素邻域内所有像素的最小值。
在二进制图像中,如果任何一个像素值为0,那么对应的输出像素值为0。
结构元素的原点定义在对输入图像感兴趣的位置。
对于图像边缘的像素,由结构元素定义的邻域将会有一部分位于图像边界之外。
为了有效处理边界像素,进行形态学运算的函数通常都会给出超出图像、未指定数值的像素指定一个数值,这样就类似于函数给图像填充了额外的行和列。
对于膨胀和腐蚀操作,它们对像素进行填充的值是不同的。
对于二进制图像和灰度图像,膨胀和腐蚀操作使用的填充方法如下表:腐蚀和膨胀填充图像规则表规则腐蚀超出图像边界的像素值定义为该数据类型允许的最大值,对于二进制图像,这些像素值设置为1;对于灰度图像,unit8类型的最小值也为255。
膨胀超出图像边界的像素值定义为该数据类型允许的最小值,对于二进制图像,这些像素值设置为0;对于灰度图像,unit8类型的最小值也为0。
通过对膨胀操作使用最小值填充和对腐蚀操作使用最大值填充,可以有效地消除边界效应(输出图像靠近边界处的区域与图像其它部分不连续)。
否则,如果腐蚀操作使用最小值进行填充,则进行腐蚀操作后,输出图像会围绕着一个黑色边框。
结构元素:膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小的多。
二维平面结构元素由一个数值为0或1的矩阵组成。
结构元素的原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的邻域像素在进行膨胀或腐蚀操作时是否需要参与计算。
三维或非平面的结构元素使用0,1定义结构元素在x和y平面上的范围,第三维z定义高度。
(1)任意大小和维数的结构元素B原点坐标的获取:>> origin = floor((size(nhood)+1)/2)其中nhood 是指结构元素定义的邻域(STREL对象的属性nhood)(2)创建结构元素:(strel函数来创建任意大小和形状的STREL 对象,支持如线形line、钻石形diamond、圆盘形disk、球形ball等许多种常用的形状)>> se = strel ('diamond' ,3)se =Flat STREL object containing 25 neighbors.Decomposition: 3 STREL objects containing a total of 13 neighborsNeighborhood:0 0 0 1 0 0 00 0 1 1 1 0 00 1 1 1 1 1 01 1 1 1 1 1 10 1 1 1 1 1 00 0 1 1 1 0 00 0 0 1 0 0 0% se返回了结构元素的有关信息。
(3) 结构元素的分解为了提高执行效率,stel函数可能会将结构元素拆为较小的块,这种技术称为结构元素的分解。
例如要对一个11×11的正方形结构元素进行膨胀操作,可以首先对1×11的结构元素进行膨胀操作,然后再对11×1的结构元素进行膨胀,通过这样的分解,在理论上可以使执行速度提高6.5倍。
对圆盘形和球形结构元素进行分解,其结构是近似的,而对于其他形状的分解,得到的分解结果是精确的。
可以调用getsequence函数来查看分解所得的结构元素序列。
>> seq=getsequence(sel)seq =4x1 array of STREL objects>> seq(1)ans =Flat STREL object containing 5 neighbors. Neighborhood:0 1 01 1 10 1 0>> seq(2)ans =Flat STREL object containing 4 neighbors. Neighborhood:0 1 01 0 10 1 0>> seq(3)ans =Flat STREL object containing 4 neighbors. Neighborhood:0 0 1 0 00 0 0 0 01 0 0 0 10 0 0 0 00 0 1 0 0>> seq(4)ans =Flat STREL object containing 4 neighbors.Neighborhood:0 1 01 0 10 1 01.图像膨胀的Matlab实现:可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。
结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。
此外,imdilate还可以接受两个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。
举个实例如下:步骤1,首先创建一个包含矩形对象的二值图像矩阵。
>> BW=zeros(9,10);>> BW(4:6,4:7) =1BW =0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 1 1 1 1 0 0 00 0 0 1 1 1 1 0 0 00 0 0 1 1 1 1 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0步骤2,使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。
>> SE=strel('square',3)SE =Flat STREL object containing 9 neighbors.Neighborhood:1 1 11 1 11 1 1步骤3,将图像BW和结构元素SE传递给imdilate函数。
>> BW2=imdilate(BW,SE)BW2 =0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 1 1 1 1 1 1 0 00 0 1 1 1 1 1 1 0 00 0 1 1 1 1 1 1 0 00 0 1 1 1 1 1 1 0 00 0 1 1 1 1 1 1 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0步骤4,显示结果。
>> imshow(BW,'notruesize')>> imshow(BW2,'notruesize')膨胀前后效果图:2.图像腐蚀的Matlab实现:可以使用imerode函数进行图像腐蚀。
imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。
此外,imerode函数还可以接受3个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。
M——指定原始图像的行数。