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°倍数的边缘)。
matlab边缘检测算法
Matlab提供了多种用于边缘检测的算法和函数。
以下是一些常用的Matlab边缘检测算法:Canny边缘检测算法:Canny算法是一种经典的边缘检测算法,具有良好的边缘定位和低误报率。
在Matlab中,可以使用edge函数进行Canny边缘检测,例如:matlabCopy codeI = imread('image.jpg');edgeImg = edge(I, 'Canny');imshow(edgeImg);Sobel算子:Sobel算子是一种基于梯度的边缘检测算子,常用于提取图像中的水平和垂直边缘。
在Matlab中,可以使用edge函数进行Sobel边缘检测,例如:matlabCopy codeI = imread('image.jpg');edgeImg = edge(I, 'Sobel');imshow(edgeImg);Prewitt算子:Prewitt算子也是一种基于梯度的边缘检测算子,类似于Sobel算子,但略有不同。
在Matlab中,可以使用edge函数进行Prewitt边缘检测,例如:matlabCopy codeI = imread('image.jpg');edgeImg = edge(I, 'Prewitt');imshow(edgeImg);Laplacian算子:Laplacian算子是一种基于二阶导数的边缘检测算子,可以检测图像中的边缘和纹理变化。
在Matlab中,可以使用edge函数进行Laplacian边缘检测,例如:matlabCopy codeI = imread('image.jpg');edgeImg = edge(I, 'log');imshow(edgeImg);以上只是一些常用的Matlab边缘检测算法示例。
除了这些算法,Matlab还提供了其他边缘检测算法和函数,如Roberts算子、LoG算子等。
基于MATLAB的数字图像与边缘检测毕业设计论文
基于MATLAB的数字图像分析与边缘检测摘要:图像处理是用计算机对图像进行一系列的操作,一般操作是先将图像数字化,即易于获得某种预期结果的技术,其中边缘检测是图像处理中必不可少的一步,采用微分算子检测边缘是最常用的,也是处理效果比较好的一种。
MATLAB图像处理工具箱提供了边缘检测(edge)函数,它能利用多种算子进行图像的边缘检测,语言结构简单,本文主要介绍了数字图像处理主要研究领域中边缘检测的方法,并利用MATLAB图像处理工具箱提供的函数处理图片,对图像进行边缘检测,给出了各种算子检测边缘的结果并进行相互比较。
关键字:图像处理,MatLab ,边缘检测ABSTRACTImage processing is to analyze images by computers to achieve desired a series of results. Edge detection is an absolutely necessary step in image processing and the use of differential operators to detect edge is one of the most common and effective methods. Image processing Mat lab Toolbox User’s Guide, Has provided the edge function, It can use many kinds of operators to carry on the image the edge examination. Edge detection is one of the main methods in the research field of digital image processing. The image processing function provided by the Mat Lab image processing tool box is employed to perform edge detection for image so that the program and processing result are obtained.Key words: Image processing , MatLab,Edge detection独创声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。
基于MATLAB的图像边缘提取并计算其角度和距离
MATLAB目的:检测下列图像的白色区域和红色区域的边缘,并计算其角度和距离。
1)利用烟草包装纸、基准线以及传送带三者之间的特性,首先将高速相机拍摄到的图片进行红色通道分离。
2)将通道分离后的图片进行二值化,得到二值图像3)将所得到的二值图像进行边缘检测4)将边缘检测后的图像先腐蚀运算,再进行膨胀运算,得到最终图像5)将图8最终得到的两条边界线使用MATLAB进行最小二乘法拟合,分别得到两条边界线的关系式,并使用数学方法计算出两条边界线的角度以及图像最左端的直线距离。
此例中,计算得到的两边沿的偏离角大小为3.15°,两边沿最左端距离大小为303.51像素。
clear clcimage=imread('Image.jpg'); %读取图片imtool(image); %显示所读取的图片imager = image(:,:,1); %提取图片红色通道imtool(imager);BW = im2bw(imager,0.15); %二值化BW = ~BW;imtool(BW);BW1 = edge(BW,'canny',0.95); %检测边缘imtool(BW1);se1 = strel('line',9,176); %腐蚀IM1 = imerode(BW1,se1);imtool(IM1);se2 = strel('line',60,176); %膨胀IM2 = imdilate(IM1,se2);imtool(IM2);[a,b]=size(IM2);[h,w]=find(IM2==1); %筛选边界点,像素值为1yx=[h,w];yx_size = size(yx); %像素点坐标对数%数据筛选出上下边界线以供拟合p=1;q=1;for k=1:yx_size(1,1)if(yx(k,1)>=600)yx1(p,:) = yx(k,:);p = p+1;elseyx2(q,:) = yx(k,:);q = q+1;endendyx1_c1 = yx1(:,1);yx1_c2 = yx1(:,2);yx2_c1 = yx2(:,1);yx2_c2 = yx2(:,2);%绘制分离边界的像素点plot(w,h,'r.')axis([0 b 0 a]);hold on%绘制拟合的直线xy1=polyfit(yx1_c2,yx1_c1,1);plot(1:b,polyval(xy1,1:b),'b-')axis([0 b 0 a]);hold onxy2=polyfit(yx2_c2,yx2_c1,1);plot(1:b,polyval(xy2,1:b),'y-')axis([0 b 0 a]);hold on%计算两直线的夹角angle_xy = 180*atan( abs((xy2(1,1)-xy1(1,1)))/(1+xy1(1,1) *xy2(1,1)) )/pi %角度%计算最左端的距离,以像素点为单位dist_xy = polyval(xy1,0)-polyval(xy2,0)。
matlab 腐蚀、膨胀、开运算、闭运算
《深度探讨:Matlab中的腐蚀、膨胀、开运算和闭运算》在图像处理领域,腐蚀、膨胀、开运算和闭运算是常用的图像处理技术。
它们可以帮助我们对图像进行形态学处理,从而对图像进行特定的操作和增强。
本文将从简单入手,深入探讨Matlab中的腐蚀、膨胀、开运算和闭运算的原理、应用和个人观点。
1. 腐蚀腐蚀是一种图像形态学处理操作,其主要作用是“侵蚀”目标的边界。
在Matlab中,可以使用im erode函数来进行腐蚀操作。
腐蚀操作可以帮助我们去除图像中的细小细节或者连接目标,使得图像中的目标变得更加清晰和突出。
腐蚀操作的核心思想在于利用一个结构元素对图像进行扫描,当结构元素与图像相交时,输出图像的对应像素值将取决于结构元素中的最小像素值。
2. 膨胀相对于腐蚀,膨胀是一种图像形态学处理操作,其主要作用是“膨胀”目标的边界。
在Matlab中,可以使用im dilate函数来进行膨胀操作。
膨胀操作可以帮助我们连接图像中的细小裂缝或者增强目标的边界,使得图像中的目标变得更加完整和饱满。
膨胀操作的核心思想在于利用一个结构元素对图像进行扫描,当结构元素与图像相交时,输出图像的对应像素值将取决于结构元素中的最大像素值。
3. 开运算开运算是腐蚀操作和膨胀操作的结合,其主要作用是先进行腐蚀操作,然后进行膨胀操作。
在Matlab中,可以使用im open函数来进行开运算。
开运算可以帮助我们去除图像中的噪声或者平滑图像中的目标,使得图像中的目标更加清晰和稳定。
开运算的核心思想在于先利用腐蚀操作去除细小细节,然后利用膨胀操作连接目标。
4. 闭运算闭运算是膨胀操作和腐蚀操作的结合,其主要作用是先进行膨胀操作,然后进行腐蚀操作。
在Matlab中,可以使用im close函数来进行闭运算。
闭运算可以帮助我们填充图像中的小洞或者平滑图像中的目标边界,使得图像中的目标更加完整和稳定。
闭运算的核心思想在于先利用膨胀操作连接裂缝,然后利用腐蚀操作去除小洞。
Matlab中的边缘检测技术
Matlab中的边缘检测技术引言在数字图像处理领域,边缘检测一直是一个重要的研究课题。
通过边缘检测,可以有效地从图像中提取出物体的轮廓信息,为后续的图像分割、目标识别等任务提供基础。
Matlab作为一种功能强大的图像处理工具,提供了多种边缘检测技术和相应的函数库,方便用户进行图像处理和分析。
本文将介绍Matlab中常用的边缘检测技术及其应用。
一、基础概念在开始介绍具体的边缘检测技术之前,有必要了解一些基础概念。
图像的边缘通常指的是图像中像素灰度级变化较大的区域,这些区域往往对应着物体的边界。
边缘通常可以分为两类:强边缘和弱边缘。
强边缘是指图像中像素灰度级变化明显的区域,而弱边缘则表示变化相对较小的区域。
二、Sobel算子Sobel算子是一种基于梯度的边缘检测方法,常用于检测二维图像的边缘。
其核心思想是通过计算图像中像素点的灰度梯度,找出灰度变化最剧烈的区域。
Matlab中提供了sobel函数,可以方便地使用Sobel算子进行边缘检测。
例如,使用以下代码可以实现对图像im的边缘检测:```im = imread('image.jpg');im_gray = rgb2gray(im);im_sobel = edge(im_gray, 'sobel');imshow(im_sobel);```在上述代码中,我们首先通过imread函数读取图像文件,然后使用rgb2gray函数将图像转换为灰度图像。
最后,使用edge函数结合'sobel'参数进行边缘检测,并使用imshow函数显示结果图像。
三、Canny算子Canny算子是一种更为精确和复杂的边缘检测算法。
相比于Sobel算子,Canny 算子能够更准确地定位边缘,并且可以抑制噪声的干扰。
Matlab中同样提供了canny函数,方便用户使用Canny算子进行边缘检测。
以下是一个示例代码:```im = imread('image.jpg');im_gray = rgb2gray(im);im_canny = edge(im_gray, 'canny');imshow(im_canny);```在上述代码中,我们同样首先读取图像文件并转换为灰度图像。
matlab二值形态学腐蚀运算实现
文章标题:深度探讨:matlab二值形态学腐蚀运算实现在数字图像处理领域,二值形态学是一种常用的图像处理方法,而腐蚀运算则是其中的重要步骤之一。
本文将深入探讨matlab中二值形态学腐蚀运算的实现方法,旨在帮助读者全面理解这一主题。
一、matlab中二值形态学概述二值形态学是以图像中的目标物体的形状和结构为基础来处理图像的一种方式。
而腐蚀运算是其中的一种基本运算,它可以用于去除图像中的小的噪点,或者分离接触的物体。
其实实现一个图像的腐蚀操作,需要用一个b大小的结构元素SE腐蚀A。
若A(x,y)及其邻域的像素与SE对应的像素完全相同,才能输出1;否则为0。
二、二值形态学腐蚀运算的matlab实现在matlab中,我们可以通过imerode函数来实现二值形态学腐蚀运算。
该函数的调用格式为:```BW2 = imerode(BW,SE);```其中BW是输入的二值图像,SE是结构元素,BW2是腐蚀后的输出图像。
三、深入理解腐蚀运算的实现原理腐蚀运算的实现原理是基于结构元素和二值图像进行像素级别的比较,从而得到腐蚀后的图像。
在实际操作中,我们可以通过不同大小和形状的结构元素来实现不同效果的腐蚀运算。
通过多次实验,我们可以发现不同的结构元素对腐蚀运算的效果有着明显的影响,这也是二值形态学腐蚀运算的一大特点。
四、个人观点和理解对于二值形态学腐蚀运算,我个人认为其实现原理非常灵活,可以根据具体的图像和处理需求来选取合适的结构元素,从而得到理想的腐蚀效果。
在实际应用中,我们需要根据具体情况做出合理的选择,才能达到最佳的处理效果。
总结与回顾通过本文的深度讨论,读者不仅可以理解matlab中二值形态学腐蚀运算的具体实现方法,还可以掌握其实现原理和灵活应用。
二值形态学腐蚀运算在数字图像处理领域有着广泛的应用,希望本文对您有所帮助。
通过本文的深入讨论,读者可以更好地理解matlab中二值形态学腐蚀运算的实现方法,以及其在数字图像处理中的重要性和应用价值。
matlab灰度值二值化膨胀腐蚀
在MATLAB中,可以使用图像处理工具箱进行图像的灰度值二值化、膨胀和腐蚀操作。
以下是一个简单的示例代码,展示如何进行这些操作:
读取图像
img = imread('image.png');
转换为灰度图像
gray_img = rgb2gray(img);
二值化图像
binary_img = imbinarize(gray_img);
显示原始图像和二值化图像
subplot(1,2,1);
imshow(gray_img);
title('原始图像');
subplot(1,2,2);
imshow(binary_img);
title('二值化图像');
膨胀操作
se = strel('disk', 5); % 创建结构元素
dilated_img = imdilate(binary_img, se);
显示膨胀后的图像
figure;
imshow(dilated_img);
title('膨胀后的图像');
腐蚀操作
eroded_img = imerode(binary_img, se);
显示腐蚀后的图像
figure;
imshow(eroded_img);
title('腐蚀后的图像');
在上述代码中,首先读取图像并将其转换为灰度图像。
然后,使用imbinarize函数将灰度图像二值化。
接着,使用strel函数创建结构元素,并使用imdilate函数对二值化图像进行膨胀操作。
最后,使用imerode函数对二值化图像进行腐蚀操作。
Matlab做图像边缘检测的多种方法
Matlab做图像边缘检测的多种方法Matlab做图像边缘检测的多种方法1、用Prewitt算子检测图像的边缘I = imread('bacteria.BMP');BW1 = edge(I,'prewitt',0.04); % 0.04为梯度阈值figure(1);imshow(I);figure(2);imshow(BW1);2、用不同σ值的LoG算子检测图像的边缘I = imread('bacteria.BMP');BW1 = edge(I,'log',0.003); % σ=2imshow(BW1);title('σ=2')BW1 = edge(I,'log',0.003,3); % σ=3figure, imshow(BW1);title('σ=3')3、用Canny算子检测图像的边缘I = imread('bacteria.BMP');imshow(I);BW1 = edge(I,'canny',0.2);figure,imshow(BW1);4、图像的阈值分割I=imread('blood1.tif');imhist(I); % 观察灰度直方图,灰度140处有谷,确定阈值T=140 I1=im2bw(I,140/255); % im2bw函数需要将灰度值转换到[0,1]范围内figure,imshow(I1);5、用水线阈值法分割图像afm = imread('afmsurf.tif');figure, imshow(afm);se = strel('disk', 15);Itop = imtophat(afm, se); % 高帽变换Ibot = imbothat(afm, se); % 低帽变换figure, imshow(Itop, []); % 高帽变换,体现原始图像的灰度峰值figure, imshow(Ibot, []); % 低帽变换,体现原始图像的灰度谷值Ienhance = imsubtract(imadd(Itop, afm), Ibot);% 高帽图像与低帽图像相减,增强图像figure, imshow(Ienhance);Iec = imcomplement(Ienhance); % 进一步增强图像Iemin = imextendedmin(Iec, 20); figure,imshow(Iemin) % 搜索Iec中的谷值Iimpose = imimposemin(Iec, Iemin);wat = watershed(Iimpose); % 分水岭分割rgb = label2rgb(wat); figure, imshow(rgb); % 用不同的颜色表示分割出的不同区域6、对矩阵进行四叉树分解I = [ 1 1 1 1 2 3 6 61 12 1 4 5 6 81 1 1 1 10 15 7 71 1 1 1 20 25 7 720 22 20 22 1 2 3 420 22 22 20 5 6 7 820 22 20 20 9 10 11 1222 22 20 20 13 14 15 16];S = qtdecomp(I,5);full(S)7、将图像分为文字和非文字的两个类别I=imread('4-11.jpg');I1=I(:,:,1);I2=I(:,:,2);I3=I(:,:,3);[y,x,z]=size(I);d1=zeros(y,x);d2=d1;myI=double(I);I0=zeros(y,x);for i=1:xfor j=1:y%欧式聚类d1(j,i)=sqrt((myI(j,i,1)-180)^2+(myI(j,i,2)-180)^2+(myI(j,i,3)-180)^2);d2(j,i)=sqrt((myI(j,i,1)-200)^2+(myI(j,i,2)-200)^2+(myI(j,i,3)-200)^2);if (d1(j,i)>=d2(j,i))I0(j,i)=1;endendendfigure(1);imshow(I);% 显示RGB空间的灰度直方图,确定两个聚类中心(180,180,180)和(200,200,200)figure(2);subplot(1,3,1);imhist(I1);subplot(1,3,2);imhist(I2);subplot(1,3,3);imhist(I3);figure(4);imshow(I0);8、形态学梯度检测二值图像的边缘I=imread('wrod213.bmp');imshow(I);I=~I; % 腐蚀运算对灰度值为1的进行figure, imshow(I);SE=strel('square',3); % 定义3×3腐蚀结构元素J=imerode(~I,SE);BW=(~I)-J; % 检测边缘figure,imshow(BW);9、形态学实例——从PCB图像中删除所有电流线,仅保留芯片对象I=imread('circbw.tif');imshow(I);SE=strel('rectangle',[40 30]); % 结构定义J=imopen(I,SE); % 开启运算figure,imshow(J);。
基于MATLAB的边缘检测算法分析
基于MATLAB的边缘检测算法分析作者:杨晨晓李铭李炎君来源:《中国教育技术装备》2020年第20期摘要边缘检测是分割与处理图像的主要内容之一,广泛应用于医学、地理、化学等各大领域。
图像不同的意思就是形状、大小各异。
为提取图像的边缘信息中显示的特征像素点,分析四种边缘检测方法以及四种形态学的基本运算,并通过实验作出比较。
关键词 MATLAB;边缘检测;Canny算子;开运算;闭运算中图分类号:TP301.4 文献标识码:B文章编号:1671-489X(2020)20-0039-03Abstract Edge detection is one of the main contents of image seg-mentation and processing. It is widely used in medicine, geography, chemistry and other fields. Different images represent different shapesand sizes of image edges, that is, different pixels of feature points. Inorder to extract the feature points of image edge position, this paper introduces four edge detection methods and the application of four basic operations of mathematical morphology.Key words MATLAB; edge detection; Canny operator; open opera-tion; closed operation1 引言邊缘检测在图文识别、车牌识别、遥感特征地图的提取等方面都起着重大作用,目标是提取出图像中各种参数变化的特征点。
2019年整理基于MATLAB边缘检测与提取的几种方法的比较精品资料
基于MATLAB边缘检测与提取的几种方法的比较数字图像边缘检测(Digital Image Processing)又称为计算机图像边缘检测,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
由于图像边缘是图像最基本的特征之一,往往携带着一幅图像的大部分信息。
而边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。
在通常情况下,我们可以将信号中的奇异点和突变点认为是图像中的边缘点,其附近灰度的变化情况可从它相邻像素灰度分布的梯度来反映。
根据这一特点,提出了多种边缘检测算子:如Robert算子、Sobel 算子、Prewitt 算子、Laplacian 算子,Canny算子等。
这些方法多是以待处理像素为中心的邻域作为进行灰度分析的基础,实现对图像边缘的提取并已经取得了较好的处理效果。
经典的边界提取技术大都基于微分运算。
首先通过平滑来滤除图像中的噪声,然后进行一阶微分或二阶微分运算,求得梯度最大值或二阶导数的过零点,最后选取适当的阈值来提取边界。
本文主要介绍几种经典的边缘提取算法,选取两种用MATLAB语言编程实现,对提取结果进行比较和分析。
图像边缘检测的基本步骤:(1)滤波。
边缘检测主要基于导数计算,但受噪声影响。
但滤波器在降低噪声的同时也导致边缘强度的损失。
(2)增强。
增强算法将邻域中灰度有显著变化的点突出显示。
一般通过计算梯度幅值完成。
(3)检测。
但在有些图像中梯度幅值较大的并不是边缘点。
最简单的边缘检测是梯度幅值阈值判定。
(4)定位。
精确确定边缘的位置。
几种边缘算子的比较以柚子的图片为例1、Roberts算子是一种利用局部差分算子寻找边缘的算子,Roberts算子边缘定位准,但是对噪声敏感。
适用于边缘明显而且噪声较少的图像分割,在应用中经常用Roberts算子来提取道路。
Matlab基于腐蚀和膨胀的边缘检测
Matlab基于腐蚀和膨胀的边缘检测腐蚀:删除对象边界某些像素。
膨胀:给图像中的对象边界添加像素。
在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。
在膨胀操作时,输出像素值是输入图像相应像素邻域内所有像素的最大值。
在二进制图像中,如果任何像素值为1,那么对应的输出像素值为1;而在腐蚀操作中,输出像素值是输入图像相应像素邻域内所有像素的最小值。
在二进制图像中,如果任何一个像素值为0,那么对应的输出像素值为0。
结构元素的原点定义在对输入图像感兴趣的位置。
对于图像边缘的像素,由结构元素定义的邻域将会有一部分位于图像边界之外。
为了有效处理边界像素,进行形态学运算的函数通常都会给出超出图像、未指定数值的像素指定一个数值,这样就类似于函数给图像填充了额外的行和列。
对于膨胀和腐蚀操作,它们对像素进行填充的值是不同的。
对于二进制图像和灰度图像,膨胀和腐蚀操作使用的填充方法如下表:腐蚀和膨胀填充图像规则表规则超出图像边界的像素值定义为该数据类型允许的最大值,对于二进制图像,这些像素值设置为1;对于灰度图像,腐蚀unit8类型的最小值也为255。
超出图像边界的像素值定义为该数据类型允许的最小值,对于二进制图像,这些像素值设置为0;对于灰度图像,膨胀unit8类型的最小值也为0。
通过对膨胀操作使用最小值填充和对腐蚀操作使用最大值填充,可以有效地消除边界效应(输出图像靠近边界处的区域与图像其它部分不连续)。
否则,如果腐蚀操作使用最小值进行填充,则进行腐蚀操作后,输出图像会围绕着一个黑色边框。
结构元素:膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小的多。
二维平面结构元素由一个数值为0或1的矩阵组成。
结构元素的原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的邻域像素在进行膨胀或腐蚀操作时是否需要参与计算。
三维或非平面的结构元素使用0,1定义结构元素在x和y平面上的范围,第三维z定义高度。
MATLAB数字图像的腐蚀、填充、细化与粗化
《数字图像处理》实验报告学号专业电子科学与工程学院实验 5一、实验目的本次实验的处理对象是二值图像,关于二值图像的处理运算主要包括腐蚀和膨胀。
它们是其他处理过程的主要运算环节。
开闭操作通过腐蚀和膨胀的不同顺序组合,能够使图像平滑,开闭操作再组合能够成噪声滤波器。
形态学中的击中击不中变换也应用了腐蚀的运算,用于判断图像中能否找到目标结构,这在图像细化中也得到了应用。
本次实验主要实现:1.图像的边缘提取;2.在边缘提取的基础上实现区域填充;3.在区域填充的基础上实现图像细化;4.在图像细化的基础上实现图像粗化。
在Matlab软件的自带函数库中其实本身就包含有以上处理过程的函数,为了深入理解每种处理过程的原理,本次实验所有运算都自行编写实现。
二、核心代码与运行后截图主函数:%% 读取图像clear;clc;I = imread('onepiece.jpg');I = im2bw(I); % 转换为二值图像[m,n] = size(I);%% 边界提取f = im2bw([0,1,0;1,1,1;0,1,0]); % 腐蚀用的结构元素F = fs(I,f);BW = im2bw(I-F); % 用原图减去腐蚀获得边缘figure;imshow(I);title('原图');figure;imshow(F);title('腐蚀图像');figure;imshow(BW);title('边界');在上面的运行效果图上看来,由于原图选择的原因,周围一圈白线有一定宽度但不足够粗,大概只有2~3个像素宽度而腐蚀用元素大小为3×3,这导致腐蚀后图像留下的白线看起来残缺不全,用原图减去腐蚀后得到的边缘图像也在白线处有“粘在一块”的现象。
只要使用更高一些分辨率的图片即可避免这样的情况。
但出于后续试验的运行速度考虑,本实验就使用此图(300×300)。
- 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——指定原始图像的行数。