MATLAB的图像提取形态学实战之对特殊形状物体的识别确定——圆形目标的识别计算
clear all;close all;clc;
RGB01=imread('X233.jpg');
subplot(221);
imshow(RGB01);title('原始图像');
I01=rgb2gray(RGB01);
threshold=graythresh(I01);
bw01=im2bw(I01,threshold);%阈值分割二值化
subplot(222);
imshow(bw01);title('二值图像');
bw02=bwareaopen(bw01,5);%形态学开运算去除像素小于10的目标
subplot(223);
imshow(bw02);title('开运算去除噪声');
sse=strel('disk',2);
bw03=imclose(bw02,sse);%对图像进行填充缝隙和孔洞
%寻找图像目标的边界
[B,L]=bwboundaries(bw03,'noholes');
subplot(224);hold on;
imshow(label2rgb(L,@jet,[.1 .1 .1]));title('检测目标图像');
for k =1:length(B)
boundary=B{k};
plot(boundary(:,2),boundary(:,1),'y','LineWidth',1);
end
stats=regionprops(L,'Area','Centroid');
threshold=0.95;
for k =1:length(B)
boundary=B{k};
delta_sq=diff(boundary).^2;
perimeter=sum(sqrt(sum(delta_sq,2)));
area=stats(k).Area;
metric=4*pi*area/perimeter^2;
metric_str=sprintf('%2.2f',metric);
if metric>threshold
centroid=stats(k).Centroid;
plot(centroid(1),centroid(2),'ko');
end
text(boundary(1,2)-35,boundary(1,1)+13,metric_str,...
'Color','y','FontSize',14,'FontWeight','bold');
end
运行效果如图:
图片素材不是太好,不过算法从理论上看,没有问题。