绘制正方形的面积大小
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)
我正在尝试计算分散正方形的总面积,如下图所示。
我知道有一个函数可以通过综合凸来估计面积大小,但我不确定是否可以使用类似的方法来解决这个问题。
谁有好主意?
图片:
编辑[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)