<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>