hanzhongren的个人博客分享 http://blog.sciencenet.cn/u/hanzhongren

博文

图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图

已有 13037 次阅读 2014-2-24 11:24 |个人分类:SAC, Matlab|系统分类:科研笔记

用latex撰写文档时,插入图片常用的格式为pdf, png和ps格式。在插入图片时,经常遇到的一个问题是:图片的空白边缘,会让生成的latex文档图片周围有大量空白,从而导致页面布局难看。最好的处理方式就是对图片进行编辑,去除图片的空白边缘。以下介绍几种去除图片边缘的方法。

1. 用matlab绘制图形,保存图形时去除白边
用matlab绘图,如果将图片保存成pdf格式,会导致pdf图片空白边缘非常大。matlab file exchange里面提供了一些函数用来定制图形输出,其中一个很重要的功能就是裁剪白边。
函数文件的地址:http://www.mathworks.com/matlabcentral/fileexchange/23629-exportfig
在使用这些函数时,如果将图片保存成pdf或eps文件时,需要安装gphostscript,具体安装参见该博客另一篇帖子。
举例:export gcf -pdf -r720 'test'   %生成test.pdf文件,图片分辨率为720,默认裁剪。

2. 用GMT绘制的图形(ps),在转换成pdf或png的过程中可以去除白边
ps2raster test.ps -A -E720 -Tg(去除白边)  <====>  ps2raster test.ps -E720 -Tg(不去白边)   png
ps2raster test.ps -A -E720 -Tf (去除白边)  <====>  ps2raster test.ps -E720 -Tf (不去白边) pdf

3. pdfcrop裁剪pdf
pdfcrop是texlive的一部分,可以用其很方便的裁剪pdf图片的空白边缘。
例:pdfcrop old.pdf new.pdf (生成的new.pdf边缘大小为0,默认)
pdfcrop --margins "5 10 5 10" old.pdf new.pdf (new.pdf边缘<left top right bottom>为5,10,5,10)
pdfcrop --margins 2 old.pdf new.pdf (new.pdf边缘<left top right bottom>都为2)
pdfcrop --margins "2 5" old.pdf new.pdf (new.pdf边缘<left top right bottom>为2,5,2,5)
margins的size单位为bp(bigpoint)

4. pdfedit裁剪
打开pdf文件,选择page--Edit Page Metrics--输入裁剪点的坐标--change。

5.  illustrator, adobe acrobat, inkscape
用这种大型的软件处理和编辑pdf文件,当然也包括裁剪。
注:inkscape是一个矢量图软件。



matlab 绘制统计直方图

这里介绍hist函数结合bar函数绘制统计直方图

一组原始采集数据,如:data=[2 3 -4 -1 4 -5 1 5 -2 -3]; 数据范围为range=-5:5;
首先可以采用hist函数进行分组:
n=hist(data,range);  将数据data根据range进行分组;返回数组n,n的维数同range;
然后用bar画图:
bar(range,n,'hist');   绘制直方图(柱状图),对分组较少的适用。

有时并没有给定分组范围range,而是希望分成count组:
还是使用hist函数分组:
n=hist(data,count); 将原始数据data自动分成count组,根据原始数据值函数自动设定分组范围,返回值n为数组,维数为count,内容为每一分组的频数;
bar(n); 绘制直方图;
如果这里没有给定count,hist(data)默认分成10组。

hist(data,range)直接绘制直方图,但是每个bar之间有间隙,所以,如果想没有间隙的直方图,推荐使用第一种方法。分组如果较多的话,推荐这种方法。



matlab常用的几个快捷键:

  • ctrl+r    注释

  • ctrl+t    取消注释

  • ctrl+i    自动对齐程序

  • ctrl+]    增加缩进

  • ctrl+[    减少缩进

  • ctrl+y   恢复撤销的更改

  • ctrl+w  关闭当前窗口

  • ESC    清除命令行中一行

  • ctrl+u   同ESC

  • ctrl+k   清除光标后至行尾的字符



1. 坐标轴刻度设置
set(gca, ’XTick’, [0 1 2]) X坐标轴刻度数据点位置,在值为0,1,2的地方显示刻度
set(gca,'XTickLabel',{'a','b','c'}) X坐标轴刻度处显示的字符
因此,set(gca,'xtick',[100 200 300],'xticklabel',[1 2 3]) X轴在值为100,200,300的地方显示刻度1,2,3
例1:y_tick = {'1.00e-004','1.01e-002','2.01e-002','3.01e-002','4.01e-002',...
         '5.01e-002','6.01e-002','7.01e-002','8.01e-002','9.01e-002'}
         set(gca, 'YtickLabel',y_tick);

例2:set(gca,'xticklabel',sprintf('%03.4f|',get(gca,'xtick')));
例1中,当tick值较复杂时,可将tick的值提前赋值到一个变量中,随后利用变量即可;
例2中,在坐标轴刻度的显示过程中可以用sprintf函数,这样即可根据用户的需要显示坐标刻度;注:"|"不可省略


set(gca,'xtick',[]) 不显示x轴的坐标刻度
set(gca,'FontName','Times New Roman','FontSize',14)设置坐标轴刻度字体名称,大小
‘FontWeight’,’bold’ 加粗 ‘FontAngle’,’italic’ 斜体
对字体的设置也可以用在title, xlabel, ylabel等中


2. 坐标轴范围设置
axis(gca,[xmin xmax ymin ymax]) 设置坐标轴范围
axis auto 根据数据自动设置坐标轴范围
axis off  关闭坐标轴
set(gca,'xlim',[-20 20],'ylim',[-20 20]);设置当前图像的坐标轴范围,等同于axis(gca,[xmin xmax ymin ymax])语句
xlim(gca,[-20 20]);设置当前图像的x坐标轴范围
ylim(gca,[-20 20]);设置当前图像的y坐标轴范围

3. 坐标轴网格
set(gca,'xgrid','on');开启x轴网格
grid on;开启坐标轴网格






MATLAB保存生成高质量的清晰图片

saveas保存jpg格式的图像线条变粗、变模糊,整幅图片就像有一层很薄的水印盖在上面。


解决方案:

(1)其实matlab的出图都是矢量图,你就直接在‘edit’里面选择copy,然后就paste到word里面,伸缩自如,保证清晰


(2)可以试试print

如要把图保存成jpeg的格式的话,可以这样
print -djpeg -r85 jpegtest

其中,

-djpeg是格式 d表示device,jpeg是格式,
-r85 表示像素 85dpi   r 表示resolution ,也就是分辨率的第一个字母
jpegtest 是文件名

也可以

print('-djpeg','-r300',Path)

print(gcf,'-djpeg','-r300',Path)

print( ... )

       Same as above but this calls PRINT as a MATLAB function instead of

       a MATLAB command. The difference is only in the parenthesized argument

       list. It allows the passing of variables for any of the input

       arguments and is especially useful for passing the handles

       of figures and/or models to print and filenames.


注:dpi的含义

Dots Per Inch的缩写。每英寸所打印的点数或线数,用来表示打印机打印分辨率。一般来说,该值越大,表明打印机的打印精度越高。

   dpi是指单位面积内像素的多少,也就是扫描精度。dpi越小,扫描的清晰度越低,由于受网络传输速度的影响,web上使用的图片都是72dpi,但是 冲洗照片不能使用这个参数,必须是300dpi或者更高350dpi。例如要冲洗4*6英寸的照片,扫描精度必须是300,那么文件尺寸应该是 (4*300)*(6*300)=1200像素*1800像素。






https://blog.sciencenet.cn/blog-432275-770483.html

上一篇:今天你点了多少次鼠标?
下一篇:tecplot 360
收藏 IP: 221.11.21.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-10-20 05:02

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部