绘制正方形的面积大小

时间:2015-12-31 14:35:55

标签: matlab octave area

我试图像下图一样计算散乱方块的面积总面积。

我知道有一个功能可以通过制作一个全面的凸面来估计面积大小,但我不确定我是否可以使用一些类似的方法来解决这个问题。

有没有人有个好主意?

图片:enter image description here

编辑[2016年1月1日]: 我试过的代码是这样的。它可以工作,但每次必须保存并加载.png图像。我想询问是否可以在没有保存图像的情况下计算尺寸。

clear

b=zeros(127,2); %matrix

for i=1:127
    rnd=randn(1,2);
    b(i,:)=30.*rnd;
end

BW=scatter(b(:,1),b(:,2),15,[],'r','s','filled');

view(2) %view from Z+
axis off
saveas(gcf,'scatter.png')

close all

BWbase = imread('scatter.png'); %import
BW = im2bw(BWbase,0.5); %convert to binary data
imshow(BW);
bwarea(BW)

1 个答案:

答案 0 :(得分:0)

如果您知道正确的功能,则无需保存并加载图像。您的代码有一些我修复过的问题,我将在此解释:

1-您不需要用零初始化b,然后使用随机值的for循环填充它。相反,你可以在一行代码中完成所有这些:

b = 30 * randn(127,2);

2-然后使用scatter绘制点数。我已删除[]来修复命令。

BW = scatter(b(:,1),b(:,2),15,'r','s','filled');

请注意,这不是图像,而是需要转换为图像的图形。您正在寻找的功能是getframe。此功能记录图形中的帧。您可以通过向其提供当前数字gcf来调用它。

F = getframe(gcf);

4-现在您的框架存储在F中,但它还不是图像。要将其转换为图片,您需要使用frame2im函数。

[X, Map] = frame2im(F);

5-然后,就像你自己一样,将图像转换为二进制并计算面积:

BW2 = im2bw(X,0.5); 
bwarea(BW2)

整个代码可以在这里看到:

b = 30 * randn(127,2);
BW = scatter(b(:,1),b(:,2),15,'r','s','filled');
axis off
F = getframe(gcf);
[X, Map] = frame2im(F);
BW2 = im2bw(X,0.5); 
imshow(BW2);
bwarea(BW2)

enter image description here

有关详细信息,请查看以下文档:getframeframe2im