2015-12-31 95 views
-1

我正在尝试计算分散正方形的面积总面积,就像下图所示。绘制正方形的面积大小

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

有没有人有一个好主意?

图片: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) 
+0

你到目前为止尝试过任何代码吗? SO不是一种编码服务,如果你告诉我们你试过的是什么,人们将更有可能帮助你。 –

+1

谢谢你的建议。我已经添加了一个注释来澄清这一点。 –

+0

BW = scatter(b(:,1),b(:,2),15,[],'r','s','filled');'给出错误。尝试先修复你的代码。 – NKN

回答

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

+0

感谢您的回答。 事实上,您显示的代码在我的环境(Octave 3.x)中不可用。毕竟我通过在特定时间保存并重新加载图像来管理任务。 对不起,延迟确认,再次感谢您的建议。 –

相关问题