matlab图像处理中提取面积、周长、长短轴的程序出错误,求高手指点!

%mainprogram.m
clear all
close all

%%%%%%%%%我是强大的分割线%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
img = imread('e:\\123.jpg');
%img=imresize(img,0.5);
Rimg=img(:,:,1); Gimg=img(:,:,2); Bimg=img(:,:,3);
figure,imshow(img);
hsv=rgb2hsv(img); %rgb变为hsv模型
v=hsv(:,:,2);
figure,imshow(v)

level=graythresh(v); %求最优阈值
BWimg=im2bw(v,level); %变为二值图像
%BWimg=~BWimg;
figure,imshow(BWimg);

se1=strel('disk',15);
closeBW=imclose(BWimg,se1); %灰度值形态学闭运算
closeBW=imfill(closeBW,'holes'); %填充
figure,imshow(closeBW) %已经得到了完整的分割图片closeBW
hold on
% %%%%%%%%分割模块结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

sprintf('面积m');
bwarea(closeBW);
% stats = regionprops(L,'all');
% stats = regionprops(L,'Area');
% stats(2)
LL=bwlabel(closeBW);
stats2=regionprops(LL,'Area');
B=bwboundaries(LL);
k=[];
for i=1:max(LL(:))
boundary=B{i};
lengthboundary=size(boundary,1);
k=[k lengthboundary];
end
[value index]=max(k);
boundary=B{index};
%
boundaryx=boundary(:,2);
boundaryy=boundary(:,1);
[rectx,recty,area,perimeter] = minboundrect(boundaryx,boundaryy,'a');
plot(rectx,recty)
hold off

disp('面积是');disp(stats2(index).Area)
%
disp('周长是');disp(value)
% value;

disp('短轴是')
w=sqrt((rectx(1)-rectx(2))^2+(recty(1)-recty(2))^2);
disp(w)
disp('长轴是')
h=sqrt((rectx(3)-rectx(2))^2+(recty(3)-recty(2))^2);
disp(h)
disp('长短轴之比是')
ratio=h/w;
disp(ratio)

你遇到了什么错误?

    不同的图像可能导致出现不同的问题(我试了几个不同的图像);

    最顺利的条件下,程序运行到下面一行:

    [rectx,recty,area,perimeter] = minboundrect(boundaryx,boundaryy,'a');

    而minboundrect这个函数未定义。

    后面的代码应该没什么太多问题了,主要是缺少一个函数文件。

     

追问

谢谢您的回答,
我运行的时候也是出现
[rectx,recty,area,perimeter] = minboundrect(boundaryx,boundaryy,'a');
这是问题。由于我刚接触matlab,请问这个函数minboundrect怎么定义?

追答

这个函数用于求最小外接矩形,我给你找了一个,但代码比较长,在这里贴不下。
请到MATLAB中文论坛(ilovematlab)下载。
具体链接我就不贴了(恶心的百度知道,贴链接经常导致各种问题),百度“minboundrect”,第2、第5个链接就是。

温馨提示:答案为网友推荐,仅供参考