问题场景:
使用matlab生成训练图像,想将所画图像去除坐标值和白边,并按一定长宽(分辨率)输出,在这个过程中遇到了几个问题,记录一下解决过程。
用saveas函数输出指定256x256大小的图像
问题描述
首先相当的是利用图像句柄的‘Position’属性进行设置
set(gcf,'Position',[0,0,256,256]);
set(gca,'Position',[0,0,1,1]); %去除白边
axis off; %关闭坐标
saveas(f,'pic0.png');
但查看输出图像却是400x400的,与想要的分辨率不同,就很疑惑,查看saveas函数的说明
说明saveas并不是按照设置的Position属性进行输出的,而是进行了转换,通过PaperPosition可以查看,因此我们查看这个属性。
在figure的属性中可以看到PaperPosition值,它的含义如下图所示:
于是可以通过PaperPositon的Width:6.7733cm,转换成英寸:
6.7733
/
2.54
=
2.6666
i
n
c
h
6.7733/2.54=2.6666inch
6.7733/2.54=2.6666inch
而saveas的分辨率是150dpi,150×2.6666=399.99 由此得到了400*400图像的形成经过。经过反推可以知道,想要得到分辨率256x256的图像,其PaperPosition的Width为
256
/
150
=
1.70667
i
n
c
h
256/150 = 1.70667inch
256/150=1.70667inch
对比两个PaperPosition的尺寸可以知道,将Position参数设置成
256
∗
1.70667
2.66667
=
163.8383
256*\frac{1.70667}{2.66667}=163.8383
256∗2.666671.70667=163.8383
即set(gcf,‘Position’,[0,0,163.84,163.84])
观察结果
输出是256×256的,满足要求,并且是纯图、不包含横纵坐标。至此问题得到解决。