2016-10-10 3 views
1

Aujourd'hui, je voulais expérimenter avec des polygones semi-transparents (spécifiquement des triangles) dans Matlab. Ce que je dois faire est de dessiner plusieurs polygones (semi-transparents) (qui peuvent se chevaucher) en figure et ensuite obtenir une matrice (de taille H x W) de valeurs de pixels RVB.Matlab: Comment dessiner des polygones pour figurer et obtenir une matrice d'image de taille spécifiée?

Exemple de ce que je l'ai fait jusqu'à présent:

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) 

Lorsque la figure f est visible, je peux voir:

this

qui est sortie désirée. Mais dès que je l'appelle impression (...) et affiche les pixels, je vois:

this

qui a une zone blanche sur le côté droit, ce qui est indésirable.

Je suppose, ce problème est à appeler de:

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

mais comme je ne suis pas aussi expérimenté avec Matlab, je ne sais pas, comment y remédier. Des idées?

Note: Une autre approche pourrait être d'utiliser directement des matrices. J'ai trouvé une fonction poly2mask, qui pourrait remplir les triangles pour moi, mais en utilisant cela, je devrais calculer toutes les valeurs RGB (A) des triangles superposés moi-même. De plus, poly2mask ne donnera pas de 'transitions fluides' autour des triangles (la sortie est booléenne 0/1). Y a-t-il une fonction similaire à poly2mask, mais renvoyant des valeurs dans l'intervalle [0,1], ce qui devrait donner une certaine douceur aux bords?

P.S .: Je travaille sur Ubuntu 14.04, en utilisant Matlab R2015b.

Répondre

0

Il semble que le remplacement

axis off; 

avec

axis tight; 

résolu en quelque sorte le problème.