2016-10-10 75 views
1

今天我想在Matlab中對半透明多邊形(特別是三角形)進行實驗。我需要做的是繪製幾個(半透明)多邊形(可以重疊)到圖中,然後得到RGB像素值的矩陣(大小爲H×W)。Matlab:如何繪製多邊形來繪製圖像並獲得指定大小的圖像矩陣?

例的什麼我迄今所做

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是可見的,我可以看到:

this

這是需要的輸出

。但只要我把打印(...)和顯示像素,我看到:

this

這對右側,這是不希望一個白色區域。

我想,這個問題是在調用的:

set(gca,'Position',[0,0,1,1]) 

但我不這麼用Matlab經歷過,我不知道如何解決它。有任何想法嗎?

注意:另一種方法可以直接使用矩陣。我找到了一個函數poly2mask,它可以爲我填充三角形,但是使用它,我需要自己計算覆蓋三角形的所有RGB(A)值。此外,poly2mask不會給出三角形邊緣的「流暢轉換」(因爲輸出是布爾0/1)。 有沒有一些功能類似於poly2mask,但返回間隔[0,1]的值,這應該給邊緣一些平滑?

P.S .:我正在使用Matlab R2015b在Ubuntu 14.04上工作。

回答

0

看來,與

axis tight; 

更換

axis off; 

在某種程度上解決了這個問題。