MATLAB膨胀腐蚀(开,闭运算)源代码
matlab数字图像处理实验报告

《数字图像处理实验报告》实验一图像的增强一.实验目的1.熟悉图像在MATLAB下的读写、输出;2.熟悉直方图;3.熟悉图像的线性指数等;4.熟悉图像的算术运算和几何变换。
二.实验仪器计算机、MATLAB软件三.实验原理图像增强是指根据特定的需要突出图像中的重要信息,同时减弱或去除不需要的信息。
从不同的途径获取的图像,通过进行适当的增强处理,可以将原本模糊不清甚至根本无法分辨的原始图像处理成清晰的富含大量有用信息的可使用图像。
其基本原理是:对一幅图像的灰度直方图,经过一定的变换之后,使其成为均匀或基本均匀的,即使得分布在每一个灰度等级上的像素个数.f=H等或基本相等。
此方法是典刑的图像空间域技术处理,但是由于灰度直方图只是近似的概率密度函数,因此,当用离散的灰度等级做变换时,很难得到完全平坦均匀的结果。
频率域增强技术频率域增强是首先将图像从空间与变换到频域,然后进行各种各样的处理,再将所得到的结果进行反变换,从而达到图像处理的目的。
常用的变换方法有傅里叶变换、DCT变换、沃尔什-哈达玛变换、小波变换等。
假定原图像为f(x,y),经傅立叶变换为F(u,v)。
频率域增强就是选择合适的滤波器H(u,v)对F(u,v)的频谱成分进行处理,然后经逆傅立叶变换得到增强的图像。
四.实验内容及步骤1.图像在MATLAB下的读写、输出;实验过程:>> I = imread('F:\image\');figure;imshow(I);title('Original Image');text(size(I,2),size(I,1)+15, ...'', ...'FontSize',7,'HorizontalAlignment','right');Warning: Image is too big to fit on screen; displaying at 25% > In imuitools\private\initSize at 86In imshow at 1962.给定函数的累积直方图。
编程实现膨胀运算或者腐蚀运算

数字图像处理实验编程实现膨胀运算或者腐蚀运算姓名:学好:0904210239指导老师:王韬时间:2012年5月编程实现膨胀运算或者腐蚀运算一、实验原理腐蚀:是一种消除连通域的边界点,使边界向内收缩的处理。
设计一个结构元素,结构元素的原点定位在待处理的目标像素上,通过判断是否覆盖,来确定是否该点被腐蚀掉。
膨胀:是将与目标区域的背景点合并到该目标物中,使目标物边界向外部扩张的处理。
设计一个结构元素,结构元素的原点定位在背景像素上,判断是否覆盖有目标点,来确定是否该点被膨胀为目标点。
二、实验步骤腐蚀:1)扫描原图,找到第一个像素值为1的目标点;2)将预先设定好形状以及原点位置的结构元素的原点移到该点;3)判断该结构元素所覆盖范围内的像素值是否全部为1:如果是,则腐蚀后图像中的相同位置上的像素值为1;如果不是,则腐蚀后图像中的相同位置上的像素值为0;4)重复2)和3),直到所有原图中像素处理完成。
膨胀:1)扫描原图,找到第一个像素值为0的背景点;2)将预先设定好形状以及原点位置的结构元素的原点移到该点;3)判断该结构元素所覆盖范围内的像素值是否存在为1的目标点:如果是,则膨胀后图像中的相同位置上的像素值为1;如果不是,则膨胀后图像中的相同位置上的像素值为0;4)重复2)和3),直到所有原图中像素处理完成。
三、实验程序# include <afxwin.h># include <windows.h># include <iostream.h># include <stdlib.h># include <math.h># define PI 3.14159265typedef struct{double re;double im;}COMPLEX;COMPLEX Add(COMPLEX c1,COMPLEX c2){COMPLEX c;c.re=c1.re+c2.re;c.im=c1.im+c2.im;return c;}COMPLEX Sub(COMPLEX c1,COMPLEX c2){COMPLEX c;c.re=c1.re-c2.re;c.im=c1.im-c2.im;return c;}COMPLEX Mul(COMPLEX c1,COMPLEX c2){COMPLEX c;c.re=c1.re*c2.re-c1.im*c2.im;c.im=c1.re*c2.im+c2.re*c1.im;return c;}int nWidth;int nHeight;int nColorBits;int nColor;int nLen;int nByteWidth;BYTE * lpBitmap;BYTE * lpBits;void OpenFile(CString FileName);void SaveFile(CString FileName);void fushi();void pengzhang();void OpenFile(CString FileName){HANDLE hFile= ::CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EX ISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(hFile==0){printf("不能调开文件,请重新选择! \n");return;}DWORD WriteNum;BITMAPFILEHEADER BFH;ReadFile(hFile,&BFH,14,&WriteNum,NULL);if((BFH.bfType!='MB')||(WriteNum!=sizeof(BITMAPFILEHEADER))){printf("不是BMP位图文件或数据有误! \n");return;}nLen = GetFileSize(hFile,NULL)-sizeof(BITMAPFILEHEADER);lpBitmap= new BYTE[nLen];ReadFile(hFile,lpBitmap,nLen,&WriteNum,NULL);BITMAPINFOHEADER * BIH = ((BITMAPINFOHEADER*)lpBitmap);nWidth = BIH ->biWidth;nHeight = BIH ->biHeight;nColorBits= BIH ->biBitCount;nByteWidth= (nWidth*nColorBits+31)/32*4;nColor = (nColorBits>8)?0:(1<<nColorBits);lpBits = lpBitmap + sizeof(BITMAPINFOHEADER) +sizeof(RGBQUAD)*nColor;CloseHandle(hFile);}void SaveFile(CString FileName){HANDLE hFile= ::CreateFile(FileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREAT E_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);if(hFile ==0){printf("不能创建文件,请重新选择! \n");return;}unsigned long WriteNum;BITMAPFILEHEADER BFH;BFH.bfType = 'MB';BFH.bfSize = nLen + sizeof(BITMAPFILEHEADER);BFH.bfOffBits = sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER) + nColor * sizeof(RGBQUAD);BFH.bfReserved1 = BFH.bfReserved2 = 0;WriteFile(hFile,&BFH,sizeof(BITMAPFILEHEADER),&WriteNum,NULL);WriteFile(hFile,(BITMAPINFOHEADER* )lpBitmap,nLen,&WriteNum,NULL);CloseHandle(hFile);}void fushi(){unsigned char * data,* lpDst,* temp ;//分别指向源图像和缓存图像的指针temp=new BYTE[256*256];//暂时分配内存,以保存新图像for (int i=1;i<nHeight-1;i++){for (int j=1;j<nWidth-1;j++){data=(lpBits+nByteWidth*j+i);//指向原图像第j行第i个像素的指针lpDst=(temp+nByteWidth*j+i);//指向目标图像第j行第i个像素的指针*lpDst=255;//目标图像中的当前点先赋成白色if(*data==255){if( *(data-1)==0 || *(data+1)==0 ||*(data-nByteWidth)==0 || *(data+nByteWidth)==0 ||*(data-nByteWidth-1)==0 || *(data-nByteWidth+1)==0 ||*(data+nByteWidth-1)==0 || *(data+nByteWidth+1)==0)*lpDst=0;}else*lpDst=0;}}for(i=0;i<nHeight;i++){for(int j=0;j<nWidth;j++){data=(lpBits+nByteWidth*j+i);lpDst=(temp+nByteWidth*j+i);* data = * lpDst;}delete temp;//释放空间}void pengzhang(){unsigned char * data,* lpDst,* temp ;//分别指向源图像和缓存图像的指针temp=new BYTE[256*256];//暂时分配内存,以保存新图像for (int i=1;i<nHeight-1;i++){for (int j=1;j<nWidth-1;j++){data=(lpBits+nByteWidth*j+i);//指向原图像第j行第i个像素的指针lpDst=(temp+nByteWidth*j+i);//指向目标图像第j行第i个像素的指针*lpDst=0;//目标图像中的当前点先赋成黑色if(*data==0){if( *(data-1)==255 || *(data+1)==255 ||*(data-nByteWidth)==255 || *(data+nByteWidth)==255 ||*(data-nByteWidth-1)==255 || *(data-nByteWidth+1)==255 ||*(data+nByteWidth-1)==255 || *(data+nByteWidth+1)==255)*lpDst=255;}else*lpDst=255;}}for(i=0;i<nHeight;i++){for(int j=0;j<nWidth;j++){data=(lpBits+nByteWidth*j+i);lpDst=(temp+nByteWidth*j+i);* data = * lpDst;}}delete temp;//释放空间}{char OpenFileName[100];char SaveFileName[100];printf("输入待处理的图像路径: \n");gets(OpenFileName);printf("保存处理图像结果的路径: \n");gets(SaveFileName);OpenFile(OpenFileName);cout<<"选择:1腐蚀,2膨胀"<<endl;int n;cin>>n;switch(n){case 1:fushi();break;case 2:pengzhang();break;}SaveFile(SaveFileName);return 0;}四、实验结果原图像:腐蚀后:膨胀后:。
matlab腐蚀膨胀分割

matlab腐蚀膨胀分割英文回答:Erosion and dilation are two fundamental operations in image segmentation using MATLAB. These operations are used to remove noise and enhance the features of the image.Erosion is a morphological operation that shrinks the boundaries of objects in an image. It is achieved by convolving the image with a structuring element, which is usually a small binary matrix. The structuring element acts as a filter that scans the image and removes pixels that do not meet certain criteria. This process helps in removing small details and smoothing the image.For example, let's say we have an image of a handwritten digit with some noise. By applying erosion, we can remove the noise and make the digit appear clearer. The structuring element could be a small square matrix with all ones. The erosion operation will scan the image and removepixels that do not have all neighboring pixels as ones. This will effectively shrink the boundaries of the digit and remove any noisy pixels.Dilation, on the other hand, is a morphological operation that expands the boundaries of objects in an image. It is achieved by convolving the image with a structuring element that defines the shape and size of the dilation. Dilation is useful for filling in gaps andjoining broken parts of objects.For example, let's consider an image of a circle with a gap in it. By applying dilation with a circular structuring element, we can fill in the gap and make the circle complete. The dilation operation will scan the image and add pixels to the boundaries of objects that meet certain criteria defined by the structuring element.In MATLAB, erosion and dilation operations can be performed using the `imerode` and `imdilate` functions, respectively. These functions take the input image and the structuring element as arguments and return the eroded ordilated image.To illustrate this, let's say we have a binary image of a letter 'A' with some noise. We can use erosion to remove the noise and then use dilation to enhance the features of the letter. Here's the MATLAB code:matlab.% Read the image.image = imread('letter_A.png');% Define the structuring element.se = strel('square', 3);% Perform erosion.eroded_image = imerode(image, se);% Perform dilation.dilated_image = imdilate(eroded_image, se);% Display the results.subplot(1, 3, 1), imshow(image), title('OriginalImage');subplot(1, 3, 2), imshow(eroded_image), title('Eroded Image');subplot(1, 3, 3), imshow(dilated_image), title('Dilated Image');This code will display the original image, the eroded image, and the dilated image side by side for comparison. By visually inspecting the images, we can see the effects of erosion and dilation on the segmentation of the letter 'A'.中文回答:腐蚀和膨胀是使用MATLAB进行图像分割的两种基本操作。
python简单图像处理(13)二值图腐蚀和膨胀,开运算、闭运算

python简单图像处理(13)⼆值图腐蚀和膨胀,开运算、闭运算我们直接看图吧我们把粗框内的区域看作原图像假设有⼀个圆在图像空间移动,取⼀个点作为圆的中⼼,若圆的区域被完全包含在原图像中则我们把它放到腐蚀后的区域中若只有⼀部分在原图像区域或没有⼀个点在原图区域中,我们则不会把它放在腐蚀区中显然,粗框区域腐蚀后会变成内部填充框区域⽽膨胀却恰恰相反把粗框线看作原图的话,取原图上⼀点为圆的中⼼,所以在圆的区域都被放在膨胀区显然,膨胀后,原图会变成外边框的区域上⾯,我们是以圆为窗的,事实上你可以使⽤任意窗形,不过最好有⼀个中⼼点好啦,我们来看看利⽤腐蚀和膨胀有什么效果吧import cvdef Two(image):w = image.widthh = image.heightsize = (w,h)iTwo = cv.CreateImage(size,8,1)for i in range(h):for j in range(w):iTwo[i,j] = 0 if image[i,j] <220 else 255return iTwodef Corrode(image):w = image.widthh = image.heightsize = (w,h)iCorrode = cv.CreateImage(size,8,1)kH = range(2)+range(h-2,h)kW = range(2)+range(w-2,w)for i in range(h):for j in range(w):if i in kH or j in kW:iCorrode[i,j] = 255elif image[i,j] == 255:iCorrode[i,j] = 255else:a = []for k in range(5):for l in range(5):a.append(image[i-2+k,j-2+l])if max(a) == 255:iCorrode[i,j] = 255else:iCorrode[i,j] = 0return iCorrodedef Expand(image):w = image.widthh = image.heightsize = (w,h)iExpand = cv.CreateImage(size,8,1)for i in range(h):for j in range(w):iExpand[i,j] = 255for i in range(h):for j in range(w):if image[i,j] == 0:for k in range(5):for l in range(5):if -1<(i-2+k)<h and -1<(j-2+l)<w:iExpand[i-2+k,j-2+l] = 0return iExpandimage = cv.LoadImage('pic3.jpg',0)iTwo = Two(image)iCorrode = Corrode(iTwo)iExpand = Expand(iTwo)cv.ShowImage('image',image)cv.ShowImage('iTwo',iTwo)cv.ShowImage('iCorrode',iCorrode)cv.ShowImage('iExpand',iExpand)cv.WaitKey(0)看看运⾏效果吧第⼀幅图是原图的灰度图,第⼆幅图是对其做了⼆值处理对于⼆值图像来说,对⿊⾊进⾏腐蚀与对⽩⾊进⾏膨胀得到的效果是⼀样的,对⽩⾊进⾏腐蚀与对⿊⾊进⾏膨胀的得到的效果是⼀样的。
matlab腐蚀运算 -回复

matlab腐蚀运算-回复什么是腐蚀运算?腐蚀运算是数学形态学中的一种基本操作,被广泛应用于图像处理和计算机视觉领域。
它是指对二值图像进行局部区域的缩小操作,通过对局部区域内的像素进行逻辑与运算,将该区域内值为1的像素点缩小(腐蚀)为0,从而得到一个新的图像。
腐蚀运算的原理是通过对待处理的图像的每一个像素点,与结构元进行对应位置的逻辑与运算。
如果结构元内的所有像素点都为1,则腐蚀后的像素点置1,否则置0。
通过此操作,仅保留原图像中与结构元相似的形状。
在Matlab中,可以使用imerode函数进行腐蚀运算。
imerode函数接受两个输入参数,第一个参数为待处理的图像,第二个参数为结构元,结构元是一个邻域矩阵,用于定义腐蚀运算的局部区域。
下面我们将一步一步介绍如何在Matlab中使用腐蚀运算进行图像处理。
第一步:导入图像首先,我们需要导入待处理的图像。
在Matlab中,可以使用imread函数读取图像文件,并将其存储为一个矩阵。
导入图像的代码如下所示:matlabimage = imread('my_image.jpg');第二步:转换为二值图像腐蚀运算通常应用于二值图像,因此我们需要将导入的图像转换为二值图像。
在Matlab中,可以使用im2bw函数将图像转换为二值图像。
im2bw 函数接受两个输入参数,第一个参数为待转换的图像,第二个参数为二值化的阈值。
代码示例:matlabbw_image = im2bw(image, graythresh(image));其中,graythresh函数用于自动计算图像的阈值。
第三步:创建结构元在腐蚀运算中,结构元定义了局部区域的形状和大小。
我们可以使用strel 函数创建结构元。
strel函数接受一个输入参数,用于指定结构元的形状。
常见的结构元包括矩形、圆形、十字形等。
代码示例:matlabse = strel('rectangle', [5, 5]);上述代码创建了一个尺寸为5x5的矩形结构元。
matlab 的腐蚀与膨胀结构元素

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

《数字图像处理》实验报告姓名学号专业电子科学与工程学院实验 5一、实验目的本次实验的处理对象是二值图像,关于二值图像的处理运算主要包括腐蚀和膨胀。
它们是其他处理过程的主要运算环节。
开闭操作通过腐蚀和膨胀的不同顺序组合,能够使图像平滑,开闭操作再组合能够成噪声滤波器。
形态学中的击中击不中变换也应用了腐蚀的运算,用于判断图像中能否找到目标结构,这在图像细化中也得到了应用。
本次实验主要实现:1.图像的边缘提取;2.在边缘提取的基础上实现区域填充;3.在区域填充的基础上实现图像细化;4.在图像细化的基础上实现图像粗化。
在Matlab软件的自带函数库中其实本身就包含有以上处理过程的函数,为了深入理解每种处理过程的原理,本次实验所有运算都自行编写实现。
二、核心代码及运行后截图主函数:%% 读取图像clear;clc;I = imread('');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)。
观察图像其他地方,有足够的像素宽度被腐蚀,由此提取的边缘也很清晰。
matlab中有关膨胀与腐蚀的解释

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我们称为形态学上的击中或击不中变换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
clear,clc;
h=imread('ceshi2.bmp');
i=im2bw(h);
i1i=187;
i1j=192;
for ai=181:193
for aj=186:198
if(sqrt(double(ai-i1i)^2+double(aj-i1j)^2)<=5)
i(ai,aj)=1;%定义圆形结构元素
end
end
end
figure,imshow(i);
i1=i;
for i1i=6:205%用B腐蚀A
for i1j=6:205
flag=0;
if(i1i>=181&&i1i<=193&&i1j>=186&&i1j<=198)
continue;
else
if(i(i1i,i1j)==1)
for ai=i1i-5:i1i+5
for aj=i1j-5:i1j+5
if(i1(ai,aj)==0&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)
i(i1i,i1j)=0;
flag=1;
break;
end
end
if(flag==1)
break;
end
end
end
end
end
end
figure,imshow(i);
%在上面C的图像上用B进行膨胀
i2=i;
for i1i=6:205%用B膨胀C
for i1j=6:205
flag=0;
if(i1i>=175&&i1i<=199&&i1j>=180&&i1j<=204)
continue;
else
for ai=i1i-5:i1i+5
for aj=i1j-5:i1j+5
if(i2(ai,aj)==1&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)
i(i1i,i1j)=1;
flag=1;
break;
end
end
if(flag==1)
break;
end
end
end
end
end
figure,imshow(i);
%在上面D的图像上用B进行膨胀
i2=i;
for i1i=6:205%用B膨胀D
for i1j=6:205
flag=0;
if(i1i>=175&&i1i<=199&&i1j>=180&&i1j<=204)
continue;
else
for ai=i1i-5:i1i+5
for aj=i1j-5:i1j+5
if(i2(ai,aj)==1&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)
i(i1i,i1j)=1;
flag=1;
break;
end
end
if(flag==1)
break;
end
end
end
end
end
figure,imshow(i);
%在上面E的图像上用B进行腐蚀
i1=i;
for i1i=6:205%用B腐蚀E
for i1j=6:205
flag=0;
if(i1i>=181&&i1i<=193&&i1j>=186&&i1j<=198)
continue;
else
if(i(i1i,i1j)==1)
for ai=i1i-5:i1i+5
for aj=i1j-5:i1j+5
if(i1(ai,aj)==0&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)
i(i1i,i1j)=0;
flag=1;
break;
end
end
if(flag==1)
break;
end
end
end
end
end
end
figure,imshow(i);。