用Matlab的saveas另存图像无白边的方法

做图像处理的时候,有时候需要把中间结果或者最终结果存下来。如果是普通的图像,那可以直接用imwrite来存储。但有时候,我们显示了图像以后,又在上面plot了一些结果。这样,存储figure的时候用到的就是saveas函数。这个函数存储的图像默认有一个很宽的边。例如
1
2 3 4 |
h =
imshow(img); plot(x,y,'r*'); saveas(h, filename); |
这里,我提供一个小函数,可以将图像以真正的尺寸保存下来。这样有两个好处
1. 美观,便于浏览,也便于贴到文档里
2. 没有多余的像素,可以继续进行后处理,不用担心像素坐标对不上号的问题。
这个函数如下:
1
2 3 4 5 6 7 8 9 10 |
function
% saveas_center(h, save_file, width, height) set(0,'CurrentFigure',h); set(gcf,'PaperPositionMode','auto'); set(gca,'position',[0,0,1,1]); set(gcf,'position',[1,1,width,height]); saveas(h, save_file); |
只要知道了尺寸,通过使用这个saveas_center函数,就可以保存没有多余边界的图像了。
另外,文章发出后,评论中有网友提供了一种更好的方法。在matlab的files exchange里面有一个工具箱,叫做export_fig (链接)。这个工具箱专门用来导出matlab绘制的图像,功能包括重建坐标轴,保存成多种格式,多种颜色空间,背景透明,多种线性等,当然也包括上面提到的裁剪边缘。
感谢热心网友!
http://www.bfcat.com/wp-content/uploads/auto_save_image/2012/04/005939DBx.png