【发布时间】:2019-08-23 14:12:53
【问题描述】:
有一个原始图像test1.jpg。问题是在图像中显示轴并保持图像质量。 我正在运行以下代码,取自matlab, multiple axes or scales for image pixels and real distance:
img = imread('test1.jpg');
% define variables
imgsize1 = size(img,1); % size on screen
imgsize2 = size(img,2);
xreal = 1; % meter
yreal = 1; % meter
% create figure
figure('Position',[0,0,imgsize1,imgsize2]);
% pixel axes and actual plot
a=axes('Position',[.2 .2 .7 .7]);
set(a,'Units','normalized');
iptsetpref('ImshowAxesVisible','on');
imshow(img,'Parent',a);
% real world axis (below)
b=axes('Position',[.2 .1 .7 1e-12]);
set(b,'Units','normalized');
set(b,'Color','none');
set(b,'xlim',[0 xreal]);
% real world axis (left)
c=axes('Position',[.09 .2 1e-12 .7 ]);
set(c,'Units','normalized');
set(c,'Color','none');
set(c,'ylim',[0 yreal],'YDir','reverse');
% set labels
xlabel(a,'Pixels')
xlabel(b,'Real distance (m)')
ylabel(a,'Pixels');
ylabel(c,'Real distance (m)');
saveas(gcf,'test2.jpg');
1) 获得的图像 test2.jpg 质量很差 - 它变得强烈像素化。 2) 横轴比图片大。
我尝试使用 imwrite,但它不会在图像中保存坐标轴。
请指教,我该如何解决这些问题。 我将非常感谢任何帮助。
原始图像和获得的图像附在此消息中。 original image
【问题讨论】:
-
问题是您无法创建大于屏幕尺寸的图形。因此,无论您显示什么都会被降采样,然后在保存时,它会失去分辨率。为了保存所有额外内容,您必须创建一个图形句柄 fig1 = figure('Position',[0,0,imgsize1,imgsize2]);然后保存句柄 saveas(fig1,'test2.jpg');
-
你写的代码我改了,结果还是一样。
-
您是否尝试使用
print而不是saveas?它做同样的事情,但有更多的选项来控制分辨率。你会做类似print -djpeg -r600 filename.jpg的事情。-r选项指定输出的分辨率(以每英寸像素为单位)。如果图像仍然像素化,请进一步提高分辨率。
标签: matlab axes imshow imread image-quality