<span style="font-size:18px;">I=imread('pillsetc.png');
imshow(I);
I=rgb2gray(I); %彩色图像灰度化
threshold=graythresh(I); %设置灰度图像的最佳阈值
bw=im2bw(I,threshold); %由阈值得到二值图
figure;
imshow(bw);
bw=bwareaopen(bw,30); %利用形态学开运算去除图像中小于像素少于30个的目标
figure;
imshow(bw);
se=strel('disk',2); %形成一个圆的算子
bw=imclose(bw,se); %进行闭运算
bw=imfill(bw,'holes'); %填充图像中的空洞
figure;
imshow(bw);
[B L]=bwboundaries(bw,'noholes'); %寻找图像的边界
figure;
imshow(label2rgb(L,@jet,[0.5 0.5 0.5])); %用彩色图像显示图像的各个目标
hold on
%%
for k=1:length(B)
boudary=B{k};
plot(boudary(:,2),boudary(:,1),'w','LineWidth',2)
end %绘制图像目标的边界 Bc存储的是边界的坐标
stats=regionprops(L,'Area','Centroid');
threshold=0.94;
for k=1:length(B)
boudary=B{k};
delta_sq=diff(boudary).^2;
perimeter=sum(sqrt(sum(delta_sq,2))); %计算边界图像的周长
area=stats.Area; %计算目标的面积
metric=4*pi*area/perimeter^2;
metric_string=sprintf('%2.2f',metric); %保存计算的结果
if metric>threshold
centroid=stats(k).Centroid;
plot(centroid(1),centroid(2),'ko');
end %找到各个目标的质心,
text(boudary(1,2)-35,boudary(1,1)+13,metric_string,'Color','y','FontSize',14,'FontWeight','bold');
end
</span>
提取图像的边界,用数字标记不同的目标边界
最新推荐文章于 2023-12-06 08:21:33 发布