【经典回复】 求不规则图形面积
我想求这个不规则图形的面积,请问各位大神应该怎么求啊?最好能详细点,刚刚接触matlab不是很会,谢谢!
经典回复:
此方法是基于蒙特卡洛的撒粒子估计面积。
a=imread('C:\Users\Administrator\Desktop\as.jpg');
b=rgb2gray(a);
figure(1);
imshow(b)
b=double(b);
% 得到原图的宽高
=size(b);
% 二值化
for i=1:m
for j=1:n
if b(i,j)>0
b(i,j)=255;
end
end
end
% 初始化撒点个数
num_Dian=10000;
P=rand(num_Dian,2);
x=m*P(:,1);
x= floor(x);
y=n*P(:,2);
y= floor(y);
% 会出撒的点
hold on
plot(x,y,'*');
% 得到不规则图形边界点的个数及坐标
=find(b==255); % 得到坐标
num_of_YuanBianShang_Dian=length(Yuan_x); % 得到个数
% 初始化圈内撒的点的个数
count_Dian_In_YuanNei=0;
for ii=1:m
% 从第一行开始遍历,每当碰到第一个不规则图形的边界时候
% 得到该图形在这一行的两个端点,通过判断两端点内撒的点
% 的个数来统计所有在图形内的点的个数
cc=find(b(ii,:)==255);
if cc
% 找到第ii行不规则图形为白点的坐标
=find(b(ii,:)==255);
% 找到第ii行不规则图形两个端点内撒的点的位置
location_x=find(x==ii);
if ~isempty(location_x)
num_location_x=size(location_x);
for kk=1:num_location_x
if y(location_x(kk))<=max(Dian_y)&&y(location_x(kk))>=min(Dian_y)
% 统计第ii行不规则图形两个端点内撒的点的个数
count_Dian_In_YuanNei=count_Dian_In_YuanNei+1;
end
end
end
end
end
% 不规则图形的面积为:
S=m*n*(count_Dian_In_YuanNei/num_Dian)
结果图片
可以的,值得学习一下
谢谢楼主分享
imshow(b)
cc=find(b(ii,==255);
=find(b(ii,==255);
有点小问题
需要修改一下,如下
imshow(b);
cc=find(b(ii==255));
=find(b(ii==255));
页:
[1]