clc I=imread('D:\课设图片\1.jpg'); [H,W,G]=size(I) ; H1=H/4;H2=H2/3;W1=W/10;W2=W85/100 ; S=(W2-W1)*(H2-H1); subplot(231),imshow(I),title('原图'); I1=im2bw(I,0.6); subplot(232),imshow(I1),title('二值化'); se=strel('disk',5); I2=imclose(I1,se); I3=imopen(I2,se); I4=imopen(I3,se); subplot(233),imshow(I4),title('开运算闭运算'); L=bwlabel(I4); L1=edge(L, 'log',0.003,4); % sigma=3 subplot(234),imshow(L1),title('基于log算子边缘检测'); subplot(235),imshow(L),title('框选'); STATS=regionprops(L,'all') strNum=max(L(:)); for i=1:1 : strNum rectangle('position', STATS(i).BoundingBox, 'edgecolor', 'r');%对所有区域框选 hold on; end subplot(236), imshow(I),title('在原图框出');%在源图像上显示 for i=1:1 : strNum Ar = cat(1, STATS(i).ConvexArea);%提取各框图像素数量 ind = find(Ar<S/4); end rectangle('position' ,STATS(ind).BoundingBox, 'edgecolor','r');%对所选区域框选。改进代码,选择特定面积的连通域并在原图像中框选出来
时间: 2023-11-20 19:06:29 浏览: 70
clc_BM.m:conv.m 函数-matlab开发
你的代码实现的功能是对一张图像进行目标检测和定位,其中包括图像预处理、形态学处理、边缘检测、区域分割和目标选取等步骤。你的代码中似乎有一点问题,其中 H2 的值应该是 H*2/3,而不是 H2/3。另外,你的代码中对所有区域都进行了框选,但是在最后只选择了特定面积的连通域来进行框选。这个特定面积是怎么确定的呢?
阅读全文