Why figure doesn't render properly? (Opengl painters)
19 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Simone Cotta Ramusino
el 13 de Oct. de 2022
Comentada: Simone Cotta Ramusino
el 21 de Oct. de 2022
I was trying to save a uint8 3D RGB matrix into png format with print(), but some pixels showed undesired shades. First try, I was saving a simple magenta rectangle (matrix 300x600x3) and the shades were on the borders: I solved setting the renderer to 'painters' (figures attached)
But when I tried the same on a much larger matrix (945x2556x4355) with more complex plot, even '-painters' does not work
Maybe here is not very clear, but in the original output I just want white and magenta pixels, while you can see here there are a lot of pink and grey shades that (I checked it) are not present in the original matrix and they don't show up when I display the image with imshow(). It's a matter of how Matlab represent the output.
I've read that Matlab can't mantain 'painters' for complex plot and adjust automatically the renderer to Opengl, so I tried to force it with several solutions:
imshow(layer1) % my matrix
s=1
fig=get(groot,'CurrentFigure');
fig.PaperUnits='points';
fig.PaperPosition=[0 0 288 144]; % I need a 600x300 pixel output
fig.Renderer='painters';
fig.RendererMode='manual';
filenamearray=["layer",s];
loopfilename=strjoin(filenamearray,'_');
axis off;
print('-painters','-dpng',loopfilename);
%%% or
print('-painters',loopfilename,"-dpng");
%%% or
print('-vector',loopfilename,"-dpng");
%%% or
print('-zbuffer',loopfilename,"-dpng");
%%% or
saveas(fig,"layer1",'png');
but they work only for the simple rectangle.
Any hint? Thanks in advance
8 comentarios
Robert U
el 14 de Oct. de 2022
Can you provide some data you are working with. Then, it would be possible to reconstruct your problem maybe, and try to fix it.
Kind regards,
Robert
Respuestas (2)
Robert U
el 14 de Oct. de 2022
Hi Simone Cotta Ramusion,
as suspected I could reproduce the smoothing at the edges. Setting smoothing off, eliminates the shaded starting and ending pixels in each line. Even I use the default renderer.
brick=zeros(300,600,3,'uint8');
brick(:,:,1)=165;
brick(:,:,2)=35;
brick(:,:,3)=99;
imshow(brick)
loops=1;
for index=1:loops
filenamearray=["face",index];
loopfilename=strjoin(filenamearray,'_');
imshow(brick);
fig=get(groot,'CurrentFigure');
fig.PaperUnits='points';
fig.PaperPosition=[0 0 288 144]; %
fig.GraphicsSmoothing = 'off';
axis off;
print(loopfilename,"-dpng");
end
16 comentarios
Robert U
el 21 de Oct. de 2022
Hi Simone Cotta Ramusino,
I found another post here: https://de.mathworks.com/matlabcentral/answers/54750-getting-better-high-resolution-images leading to the website https://matlab.fandom.com/wiki/FAQ#How_do_I_save_my_figure,_axes,_or_image?_I'm_having_trouble_with_the_built_in_MATLAB_functions.
I tried https://github.com/altmany/export_fig but without changing settings I did not succeed to remove the artifacts in the bigger brick export. Maybe, investing more effort is necessary.
Kind regards,
Robert
Ver también
Categorías
Más información sobre Graphics Performance en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!