绘制正方形的面积大小

Area Size of Plotted Squares

我正在尝试计算分散正方形的总面积,如下图所示。

我知道有一个函数可以通过综合凸来估计面积大小,但我不确定是否可以使用类似的方法来解决这个问题。

谁有好主意?

图片:

编辑[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- 您不需要用零初始化 b,然后使用 for-loop 随机值填充它。相反,您可以在一行代码中完成所有这些:

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)

有关更多信息,请查看以下文档:getframe, frame2im