Matlab:如何绘制多边形来绘制并获得指定大小的图像矩阵?
Matlab: How to draw polygons to figure and get image matrix of specified size?
今天我想在 Matlab 中试验半透明多边形(特别是三角形)。我需要做的是将几个(半透明)多边形(可以重叠)绘制成图形,然后得到 RGB 像素值的矩阵(大小为 H x W)。
示例 我目前所做的:
H = 100; % Desired height (in pixels)
W = 150; % Desired width (in pixels)
f = figure('Position',[0,0,W,H],'Resize', 'off', 'DockControls', 'off','PaperUnits','inches','PaperPosition',[0,0,W,H]);
axis off;
hold on;
% Background
fill([0,W,W,0,0], [0,0,H,H,0], 'black', 'FaceAlpha',1, 'EdgeColor', 'none');
% Other polygons
fill([20,60,95], [40,80,10], 'r', 'FaceAlpha',0.5, 'EdgeColor', 'none');
fill([10,45,80], [10,90,25], 'g', 'FaceAlpha',0.5, 'EdgeColor', 'none');
% ... there will be more of them
set(gca,'Position',[0,0,1,1]) % This seems to be a problem
pixels = print('-RGBImage','-r1'); % Get RGB matrix
% Try to show the result
figure
imshow(pixels)
当数字f
可见时,我可以看到:
这是期望的输出。但是一旦我调用 print(...) 并显示像素,我就会看到:
右侧有一个白色区域,这是不需要的。
我想,问题出在调用:
set(gca,'Position',[0,0,1,1])
但由于我对 Matlab 不是很熟悉,所以我不知道如何修复它。有什么想法吗?
注意:另一种方法可以直接使用矩阵。我找到了一个函数 poly2mask,它可以为我填充三角形,但是使用它,我需要自己计算覆盖三角形的所有 RGB(A) 值。此外,poly2mask 不会在三角形的边缘周围给出 'fluent transitions'(因为输出是布尔值 0/1)。 是否有一些函数类似于 poly2mask,但返回区间 [0,1] 中的值,应该使边缘平滑一些?
P.S.: 我正在研究 Ubuntu 14.04,使用 Matlab R2015b。
看来,替换
axis off;
和
axis tight;
以某种方式解决了问题。
今天我想在 Matlab 中试验半透明多边形(特别是三角形)。我需要做的是将几个(半透明)多边形(可以重叠)绘制成图形,然后得到 RGB 像素值的矩阵(大小为 H x W)。
示例 我目前所做的:
H = 100; % Desired height (in pixels)
W = 150; % Desired width (in pixels)
f = figure('Position',[0,0,W,H],'Resize', 'off', 'DockControls', 'off','PaperUnits','inches','PaperPosition',[0,0,W,H]);
axis off;
hold on;
% Background
fill([0,W,W,0,0], [0,0,H,H,0], 'black', 'FaceAlpha',1, 'EdgeColor', 'none');
% Other polygons
fill([20,60,95], [40,80,10], 'r', 'FaceAlpha',0.5, 'EdgeColor', 'none');
fill([10,45,80], [10,90,25], 'g', 'FaceAlpha',0.5, 'EdgeColor', 'none');
% ... there will be more of them
set(gca,'Position',[0,0,1,1]) % This seems to be a problem
pixels = print('-RGBImage','-r1'); % Get RGB matrix
% Try to show the result
figure
imshow(pixels)
当数字f
可见时,我可以看到:
这是期望的输出。但是一旦我调用 print(...) 并显示像素,我就会看到:
右侧有一个白色区域,这是不需要的。
我想,问题出在调用:
set(gca,'Position',[0,0,1,1])
但由于我对 Matlab 不是很熟悉,所以我不知道如何修复它。有什么想法吗?
注意:另一种方法可以直接使用矩阵。我找到了一个函数 poly2mask,它可以为我填充三角形,但是使用它,我需要自己计算覆盖三角形的所有 RGB(A) 值。此外,poly2mask 不会在三角形的边缘周围给出 'fluent transitions'(因为输出是布尔值 0/1)。 是否有一些函数类似于 poly2mask,但返回区间 [0,1] 中的值,应该使边缘平滑一些?
P.S.: 我正在研究 Ubuntu 14.04,使用 Matlab R2015b。
看来,替换
axis off;
和
axis tight;
以某种方式解决了问题。