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

2019-08-26 18:52

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


标记图像,并且计算图像的面积等.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: