标记图像,并且计算图像的面积等

更新时间:2024-01-26 07:37:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

本文来源:https://www.bwwdw.com/article/bxzw.html

Top