养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

matlab中如何一个大区域中包含的小区域

时间:2024-11-13 08:41:00

在matlab处理图像时,一个大的连通区域中包含着一个小的连通区域,但是我们只留下大的连通区剔除小的连通区,下面跟大家分享一下。

工具/原料

computer

matlab

方法/步骤

1、这是我们要处理的图片,其中大圈为我们想要留下的,而每个大圈中的小圈是我们想要去除的

matlab中如何一个大区域中包含的小区域

2、首先我们要对需要处理的图像进行读入,这时我们需要用到imread('')函数,其意思就是imageread的意思,如果你想知道读入的效果,那么你可以使用imshow()函数来显示图片,操作过后如下图所示

matlab中如何一个大区域中包含的小区域

3、将读入的原图变化为二值图来进行下一步的处理,如果想要看处理后的图片同样可以使用imshow()函数,不过感觉处理前后似乎没有太大差别。

matlab中如何一个大区域中包含的小区域

4、下面要反向填充图片中的洞,其中~是“非”的意思,同样我们可以使用imshow()函数来看一下处理结果,这次似乎是改变了很多。

matlab中如何一个大区域中包含的小区域

5、下一步将图片2和3合在一起,同样用imshow()函数来展示一下,好像有点意思了

matlab中如何一个大区域中包含的小区域

6、对合成后的图片进行填充,再次使用imshow()函数来看一下效果,好像跟第二步的图一样啊

matlab中如何一个大区域中包含的小区域

7、如果你想在一张图框中对比几张图的差异之锟侯希哇处,那么你可以使用subplot()函数,代码如图所示figure;%如果你想看一下每一步图片处理后的结果,%你可以使用下面的语法在旎髂坑若同一张图框中对比展示%subplot(3,2,1)是在一副图框中创建一个3行2列的矩阵,%1是第一个图片的位置,imshow()函数是imageshow的意思,即图片显示subplot(3,2,1);imshow(image1);subplot(3,2,2);imshow(image2);subplot(3,2,3);imshow(image3);subplot(3,2,4);imshow(image4);subplot(3,2,5);imshow(image5);subplot(3,2,6);imshow(image1);

matlab中如何一个大区域中包含的小区域

8、如果你觉得上述语句有些啰嗦,那么你可以捂执涡扔使用下面的循环语句进行图片显示figure;fork=1:6;subplot(3,2,k);imshow(eval(['image刻八圄俏9;,int2str(k)]));%notice:matlab中不建议使用eval()函数,因为他的运行效率较低。end

matlab中如何一个大区域中包含的小区域

9、接下来就是对区域(region)的性质(pr艺皱麾酪operty)进行定义了regionsproperties=regionprops(足毂忍珩image5,'BoundingBox');%对区域的性质进行确定,最小包裹矩形边界框(BoundingBox)运行完代码后workspace中出现一个新的空间为regionsporperties,双击它,之后再双击第一个单元格

matlab中如何一个大区域中包含的小区域

10、双击boundingBox会出现四个数,这四个数分别是最小矩形框左上角的x坐标,y坐标,x方向的长度,y方向的长度。

matlab中如何一个大区域中包含的小区域

matlab中如何一个大区域中包含的小区域

11、注意重点来了,有了这四个值你就能确定这个矩形框了,如下图所示大连通区有一个boundingBox,小连通区也有一个boundingBox

matlab中如何一个大区域中包含的小区域

12、下面就是去除大连同区内的怅屹岖噤小连通区need=ones(1,length(regionsproperties));%生成单位矩阵,其中所有元素均为1,可以自己尝试一下form=l:length(鸡堕樱陨regionsproperties);%m从1到regionproperties的长度遍历bbm=regionsproperties(m).BoundingBox;%变量bbm是上面变量regionsproperties第m个连通区的BoundingBoxforn=1:length(regionsproperties);bbn=regionsproperties(n).BoundingBox;%这是在为比较小的连通区与大的连通区所准备ifm~=n&&...bbm(1)<bbn(1)&&bbm(2)<bbn(2)&&...bbm(1)+bbm(3)>bbn(1)+bbn(3)&&bbm(2)+bbm(4)>bbn(2)+bbn(4);(解释:如果m不等于n,并且regionm的BoundingBox的x坐标小于regionn的x坐标,同理y也是一样,然而regionm的第二个x坐标大于regionn的第二个x坐标,y同理,那么说明regionn包含于regionm中,所以予以剔除。)need(n)=0;把之前的单位1矩阵弄成0endendend

matlab中如何一个大区域中包含的小区域

13、保留的区域id=1;fork=1:length(regionsproperties)ifneed(k)==1regions(id)=regionsproperties(k);id=id+1;endendlength(regions);至此就成功了,祝你成功

© 一点知识