【问题标题】:Area Size of Plotted Squares绘制正方形的面积大小
【发布时间】:2015-12-31 14:35:55
【问题描述】:

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

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

有人有好主意吗?

图片:

编辑[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)

【问题讨论】:

  • 到目前为止,您尝试过任何代码吗? SO 不是编码服务,如果您向我们展示您的尝试,人们将更有可能帮助您。
  • 感谢您的建议。我添加了一个注释来澄清这一点。
  • BW=scatter(b(:,1),b(:,2),15,[],'r','s','filled'); 给出错误。尝试先修复您的代码。

标签: matlab octave area


【解决方案1】:

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

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)

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

【讨论】:

  • 感谢您的回答。实际上,您显示的代码在我的环境(Octave 3.x)中不可用。毕竟我通过保存和重新加载图像一段时间来管理任务。抱歉延迟确认,再次感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多