clear all close all
A=imread('12.jpg'); %读入图像
I1=rgb2gray(A); %灰度处理,自动取值二值化 figure;imshow(I1); level=graythresh(I1); I2=im2bw(I1,0.3); figure;imshow(I2);
se = strel('square',1); %进行开运算,使图像形成几个连通域 A2=imerode(I2,se); %降噪处理 figure;imshow(I2); bw= imopen(I2,se);
figure,imshow(bw);
%寻找不包括孔连通域的边缘,并且把每个连通域的边界描出来 [B,L] = bwboundaries(bw,4);
figure;imshow(label2rgb(L, @jet, [.5 .5 .5])) hold on
for k = 1:length(B) boundary = B{k};
plot(boundary(:,2),boundary(:,1),'w','LineWidth',2) end
% 找到每个连通域的质心
stats = regionprops(L,'Area','Centroid'); % 循环历遍每个连通域的边界 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 =80*area/perimeter^2; % 要显示的匹配度字串
metric_string = sprintf('%2.2f',metric); % 标记出匹配度接近1的连通域 if metric >= 6 && metric <= 7 centroid = stats(k).Centroid;
plot(centroid(1),centroid(2),'ko');
% 提取该连通域所对应在二值图像中的矩形区域 goalboundary = boundary; s = min(goalboundary, [], 1); e = max(goalboundary, [], 1);
%将目标区域分别向两侧延伸7个像素
goal = imcrop(A2,[s(2) s(1) e(2)-s(2) e(1)-s(1)]); end
% 显示匹配度字串
text(boundary(1,2)-35,boundary(1,1)+13,... metric_string,'Color','g',... 'FontSize',14,'FontWeight','bold'); end
goal = ~goal; %将目标区域进行反处理 figure,imshow(goal);
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库标记图像,并且计算图像的面积等在线全文阅读。
相关推荐: