MATLAB批量打印输出600PPI的图像且图像不留空白
一 前言
最近收到审稿人的修改意见,其中有三条:一条为<RC: There were only five images evaluated in the experiment, and I recommend increasing to twenty to further evaluate the algorithm performance.>他说我论文只有五副图像用来评价算法性能,推荐我至少用20副图像来仿真算法效果. 另外一条为《1.2. Quality RC: The manuscript should include graphics with a resolution of no less than 600ppi.》论文中每个图像(图片)的分辨率不低于600ppi. 第二条让论文的每张图像PPI为600PPI,则是让图像更高清,细节很清晰!绝大多数人都是截屏MATLAB图像,自然很模糊,达不到600PPI的要求,后面给出解决办法。第三条为ablation experiment,<The manuscript has not shown the ablation experiments.>其实传统的红外图像细节增强,直接用matlab实现算法处理,很多经典的论文,如UM,直方图,BF&DDE,GF&DDE,LEPF&DDE等都没有消融实验.这个一般出现在基于深度学习的目标检测,如论文<Attention Guided Low-Light Image Enhancement with a Large Scale Low-Light Simulation Dataset>的5.4 Ablation Study.通过阅读这篇论文,理解消融实验有三点: 你的算法如果由三个关键创新点组成,那么你就分别去掉这三部分得到对应的实验效果如matlab仿真图像.第二点就是用客观指标去评价,如PSNR,SSIM,RMSC.第三点至少五副图像用于在视觉效果和客观指标评价.当然以审稿人的严谨态度,你至少得搞30副图像.
但绝大多数SCI论文的实验部分都是五副红外图像,三个参考算法,即每一张红外图像对应五副不同的结果,那么5副图像就是25张图像了,这样下来已经占了论文的大多数篇幅了.如果增加为20副,那至少得放100张不同结果的图像,估计得占两页纸! 我TM, 真是无语! 都是按照发表的论文写的,审稿人竟然提出如此要求.....
但要毕业只好硬着头皮搞, 哪怕审稿人让我摘星星,我也得踮起脚尖向上跳!
二 MATLAB如何实现一次打印20副图像
(一)下载20副红外图像
既然要做二十副红外图像的算法实验,首先得找到二十张红外图像,那就去网上找红外图像数据集,一篇博客如下:https://blog.csdn.net/qq_15698613/article/details/109052006
由于最近也在数字IC找工作,还是推荐一下学习IC基础知识的博客;https://blog.csdn.net/mu_guang_/category_10397670.html
重点推荐两个数据集:用于基于深度学习的红外目标检测
1.第一个数据集
http://csr.bu.edu/BU-TIV/BUTIV.html
2.第二个数据集Thermal Infrared Dataset
https://projects.asl.ethz.ch/datasets/doku.php?id=ir:iricra2014
这些数据集,基本上都是几百几千张图像,所以都是1个G或4个G的大小,很可怕!所以我直接开通了百度网盘会员下载,不然4个G下载不了!若是对深度学习的红外目标检测感兴趣,那就必然下载用于算法研究!
(二) matlab实现对输入的20副红外图像算法处理后输出
思路是;分成两步,第一步是把算法处理后的20副红外图像放在一个元胞向量中;第二步,输出显示每一个算法的结果图像,并分配一个文件名;
1.第一步算法处理得到20副红外图像的输出结果
把输入的20副红外图像赋值给5行4列的元胞数组,用循环实现对元胞数组中的每一副红外图像做算法处理,赋值给一个包含20个元素的元胞向量OUT1,代码如下:
%this file is used to
%once display the result of Algorithm for 20 images
%pattention:the function can't have a figure
%--subplot(1,1,1);or imshow(test_R2);
clc;
close all;
clear;
%----a example for display different solution images----
%324*256
I1=imread('../infrared/17sempach_BG1_1.png');
I2=imread('../infrared/18sempach_BG2_1.png');
I3=imread('../infrared/19sempach_BG3_1.png');
I4=imread('../infrared/20sempach_BG4_1.png');
%324*256
%512*512
I5=imread('../infrared/01orange_raw01.png');
I6=imread('../infrared/02orange01_nuc.png');
I7=imread('../infrared/11green_TIV01.png');
I8=imread('../infrared/12red_TIV01.png');
%512*512
%640*512
I9=imread('../infrared/03red_cma01.png');
I10=imread('../infrared/04red_cmb01.png');
I11=imread('../infrared/06cmA_seq01.png');
I12=imread('../infrared/07cmC_seq01.png'); I13=imread('../infrared/08cmA_seq1_01.png');
I14=imread('../infrared/09cmB_seq2_01.png');
I15=imread('../infrared/21FLIR_video_00001.tiff');
I16=imread('../infrared/22FLIR_08863.tiff');
I17=imread('../infrared/23FLIR_thermal1.tiff');
%640*512
%1024*512
I18=imread('../infrared/13raw01.png');
I19=imread('../infrared/14seq3_nuc01.png');
I20=imread('../infrared/15seq4_nuc01.png');
%1024*512
%1024*640
I21=imread('../infrared/16seq5_nuc01.png');
%1024*640
%1024*1024
I22=imread('../infrared/03red_cma01.png');
I23=imread('../infrared/10seq3_raw01.png');
%1024*1024
%----a example for display different solution of images----
%input 20 different images
%Picture save "batch"
I = cell(5,4);
I{1,1}=I1; I{1,2}=I2; I{1,3}=I3; I{1,4}=I4;
I{2,1}=I5; I{2,2}=I6; I{2,3}=I7; I{2,4}=I8;
I{3,1}=I9; I{3,2}=I10;I{3,3}=I11;I{3,4}=I12;
I{4,1}=I13; I{4,2}=I14;I{4,3}=I15;I{4,4}=I16;
I{5,1}=I17; I{5,2}=I18;I{5,3}=I19;I{5,4}=I20;
out1 = cell(1,20);
%Picture save "batch" by method 1
%this method is not recommend
%Not centered
% for i =1:2
% for j = 1:2
% temp = I{i,j};
% out = GABF_DDE_top820(temp);
% out1{(2*(i-1)+j)} = out;
% H = figure;
% subplot(2,2,(2*(i-1)+j));
% imshow(out);title({num2str(i);num2str(j)});
% print(H,'-dtiffn','-r600',num2str((2*(i-1)+j)));
% end
% end
%Picture save "batch" by method 2
%the result is centred
%recommened
for i =1:5
for j = 1:4
temp = I{i,j};
out = GABF_DDE_top820(temp);
out1{(4*(i-1)+j)} = out;
% subplot(5,4,(4*(i-1)+j));
% imshow(out);title({num2str(i);num2str(j)});
end
end
2.第二步,为每一个输出结果分配文件名,且让图像显示窗口不留空白
先用一个元胞向量filename存放20个红外图像的文件名,然后结合print函数和循环结构,给每个结果指定保存图片格式如tiff,图像的分辨率600PPI('-r600'),文件名filename{k}
其中的一个亮点是,matlab显示图像不留空白,代码仅一行关键:set(gca, 'position', [0 0 1 1 ]);axis normal;%the csdn website
matlab代码如下:
filename = { 'IMA1', 'IMA2', 'IMA3', 'IMA4'...
,'IMA5', 'IMA6', 'IMA7', 'IMA8'...
,'IMA9','IMA10','IMA11','IMA12'...
,'IMA13','IMA14','IMA15','IMA16'...
,'IMA17','IMA18','IMA19','IMA20'};
for k = 1:length(filename)
H = figure; % 指定图片打印figure_handles
subplot(1,1,1);imshow(out1{k});
set(gca, 'position', [0 0 1 1 ]);axis normal;%the csdn website
print(H,'-dtiffn','-r600',strcat('../result/',filename{k})) ;%internet
% print(H,'-dtiffn','-r600',num2str(k)) ;%internet end
重点是print函数批量输出不同文件名的图像,matlab显示图像没有多余的空白
3.用print函数和strcat函数输出图像到指定位置,且更改图像PPI为600(常用):
前提是输入图像本身要足够清晰:如果你输入的截屏图像很模糊,那么更改为600PPI后图像依然模糊。一般截屏,图像分辨率默认为显示屏的,通常还是压缩为png,jpeg格式保存!图像PPI至少600是论文中高质量呈现的重要评价指标,故每次做MATLAB实验,不要习惯性截屏!得用print函数,不然白搞!strcat函数为连接字符串的函数;常用于批量操作中,将变量与路径关联在一起,即把不同的图像文件存储在同一个路径:MATLAB代码如下
print(H,'-dtiffn','-r600',strcat('../result/',filename{k})) ;%internet
如上代码,将图像输出到当前目录的上一级文件名result下,并为每个输出图像分配文件名为元胞向量filename里预先设置的文件名,PPI设置为600;
(三) matlab实现mat格式文件转换为其他格式的图像(png,jpeg,tiff等)
mat文件格式是标准的matlab格式,经常会碰到mat格式的图像,当需要转换为png,jpeg等格式处理时,就需要把mat格式转换为png,jpeg格式,方法如下:用到imwrite函数
filename = {'test.png','IMA2.png'};
load('../data/S1.mat');
imwrite(S,strcat('../ablation/',filename{1}));
注意点:为了推广到批量处理图像,代码思路:用到元胞数组filename, strcat函数,指定输出图像到特定的路径,多张图像循环调用即可.
显示图像有点绕,mat--->png格式,显示.还有一种直接显示mat格式图像的方法,如下:
% %----a example for display 4 images----
I = cell(2);
I{1,1}=load('../data/S1.mat','S');
I{1,2}=load('../data/S2.mat','S');
I{2,1}=load('../data/S3.mat','S');
I{2,2}=load('../data/S4.mat','S'); for i =1:2
for j = 1:2
temp_I = I{i,j};
temp = temp_I.S;
out = GABF_DDE_top814(temp);
subplot(2,2,(2*(i-1)+j));
imshow(out);title({num2str(i);num2str(j)});
end
end
% %----a example for display 4 images----
这是在同一个窗口显示多种处理后的mat格式文件,我们关心的是直接对mat格式图像做批量处理,如把4张mat格式图像转换为png格式图像,上面给出了思路.下面给出例子,一次把4个mat文件批量输出为4个png图像文件,代码如下:
% %----a example for 4 images----
% convert 4 mat file to 4 png file at a time
%output by patch
filename = { 'S1.png', 'S2.png', 'S3.png'...
, 'S4.png','S5.png'};
I = cell(1,5);
I{1,1}=load('../data/S1.mat','S');%the first key code
I{1,2}=load('../data/S2.mat','S');
I{1,3}=load('../data/S3.mat','S');
I{1,4}=load('../data/S4.mat','S');
% I{1,5}=load('../data/S11.mat','S11'); for i =1:4
temp_I = I{i};
temp = temp_I.S;%the second key code
imwrite(temp,strcat('../ablation/',filename{i}));%the third key code
end
% %----a example for 4 images----
注意点:mat文件的变量要一样,为了循环处理,如上面mat格式文件的变量名都为S.不一样则会报错,引用不存在的字段' '.上面批量输出的png格式效果如下图所示
上面为mat格式,下图为png格式:
三实验结果展示
下面给出,能够达到预期效果的实验结果:1.即一次批量输出20副红外图像且每一个分配文件名和保存为600PPI的tiff格式;2.一次输出显示20副红外图像;3.matlab显示图像没有多余空白(为了放在论文好看);
图1
图2有多余的空白的结果图像,如下所示
图3为填充满整个窗口的图像结果,如下
给出在同一幅图像显示两种效果的实验图,如下
论文要是图像有多余的空白,如上面Figure2窗口的图像,那么审稿人会怼你,就是为了凑字数占篇幅,很尴尬!所以为了让论文更紧凑,内容足够,你得让matlab算法处理的红外图像没有多余空白,如如上面Figure1窗口图像倩女幽魂2所示,这样在论文中很美观。如下所示:第一张无空白在word中,第二张是有空白在word中,还给出了调整图像PPI的四种方法.
四 问题
1.word中插入600PPI的图像卡死了?
当图像的PPI为600时,一张图像就30M左右,用画图打开都转圈圈,要是100张那就是恐怖的3G左右,搜了下网上说大于512兆word会卡死,既然直接插入图像行不通(理论上,并未实践验证),实际上我插入两张200M的tiff格式的图像,word为492M还能打开编辑.总会有解决方法替代,如下:
MATLAB+Visio(画图),刚刚上面提到matlab可以更改图像PPI到600,而Visio则是保持图像的高分辨的前提下,所占空间又极小,故直接在word中插入对象Visio则会避免所占空间太大。
网上搜索的插入高分辨图像到word方法还有,PPT+PDF+TIFF等,还有PS,感兴趣可以去试试。
2.怎么画出高达600PPI的图标?
相信绝大多数人和我一样,习惯性用excel表格自动生成折线图,柱状图,但这样生成的表格转换为图片时,分辨率较低,不能达到期刊的600PPI.意外发现两款软件,是最佳画表格,matlab和Origin.这两款软件门槛高,需要自学多捣鼓下。相信工科生大多数都会matlab,画图不成问题。推荐一位matlab大神的博客,用于吸收经验:
https://baimafujinji.blog.csdn.net/article/details/52735764
还有一位是深度学习的大牛博客,如下:
https://blog.csdn.net/qq_41185868
3.word文档转换为无压缩的高分辨PDF文档
前提是:在word中插入600PPI以上的TIFF格式图像或Visio对象(Visio中插入高分辨的tiff格式图像,如600PPI的图像)。若是原图模糊,再怎么设置PPI或高质量打印,都是徒劳的。
默认word会把图像压缩到220PPI,且软件转换为PDF分辨率也会下降,导致图像很不清晰,方法是在word打印时选择adobe PDF,设置打印机属性的图像选项为不压缩,具体细节参考博客如下
https://www.pianshen.com/article/21831222728/
下面分别展示,将图像都放大到800%:有压缩和无压缩,打印输出PDF文档效果,哈哈哈,差别极大,流畅画质与蓝光画质:
(1)有压缩的效果如下:
(2)高分辨率打印输出的结果如下:
总结:
遇到新问题,得独立思考有几种解决方法,有更快和高效的办法,并不需要一切都按部就班做,如昨天搜索发现,很多重复劳动都可以在matlab中用for循环实现,如同时显示四种算法的仿真效果,可以把四个算法封装成函数,在循环中针对输入的多幅图像,调用不同函数处理显示即可;还有平时的办公,如在word中插入多幅图像,如300副,并不是需要每次手动查找图像位置,在word中点插入,然后一次次调整大小,太耗时间勒!我插入二十副,搞了一个晚上!可以用多种脚本语言实现,如python,VB,宏命令的脚本!
脚本,意味着一劳永逸!
希望下次碰上重复的体力劳动活,能够想到用脚本实现,但学习脚本肯定需要抽额外时间不断学习!打算学习一下python,然后有李笑来的自学是门手艺,学海无涯!
参考文献:
1.matlab帮助文档主题:保存图窗时尽可能减少空白空间
2.https://blog.csdn.net/u011624019/article/details/79267394
3. https://www.cnblogs.com/ggg-327931457/p/13423655.html
4. https://www.cnblogs.com/CCWangsj/p/13468105.html
MATLAB批量打印输出600PPI的图像且图像不留空白的更多相关文章
- MATLAB批量存储图像和显示算法处理的图像不留空白
一 前言 最近收到审稿人的修改意见,其中一条为<RC: There were only five images evaluated in the experiment, and I recomm ...
- 使用matlab批量处理图像后在指定文件夹存储
使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jp ...
- MATLAB程序:用FCM分割脑图像
MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据 ...
- OpenCV2类批量处理文件夹及文件图像 及批量处理后保存到txt文件
//采用windows控制台实现计算文件夹中对象总数以及批量读取对象 //#include <afx.h> //和windows.h是一样的作用 #include <opencv2/ ...
- Matlab下imwrite,Uint16的深度图像
Matlab下imwrite,Uint16的深度图像 1. 在Matlab命令窗口输入命令: help imwrite 会有如下解释: If the input array is of class u ...
- PHP图像裁剪为任意大小的图像,图像不变形,不留下空白
<?php /** * 说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高 */ fu ...
- Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...
- 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- 图像热点&图像映射
图像映射 图像映射也称为图像热点. 作用: 让同一张图片上的不同区域,可以实现多个不同的超链接功能. 图示: <map>图像映射三步走: 图像映射的实现需要三方面配合完成: 1.图像映射容 ...
随机推荐
- Diary -「NOI 2021」酱油记
雨幕浓稠 远近一白 是水雾弥漫的天 还是泡沫撑起的海 雨真大呢. 前几天去 ZH 中学集训没啥好记的,就从会合日开始叭. [Day -1] 逃出 ZH,掉入梦麟.( 高中的同学们忘记带 ...
- python2写ping监控,自动发现ip
玩了hostmonitor,老外写的很好.但是不符合国情,只有邮件适合发送. 今天用python 写一个自动发现ip,ping失败报警的程序.(微信和邮件报警) 以前用python写的发微信,发邮件直 ...
- kaptcha验证码参数设置
Constant 描述 默认值 kaptcha.border 图片边框,合法值:yes , no yes kaptcha.border.color 边框颜色,合法值: r,g,b (and optio ...
- 2021 .NET Conf China 主题分享之-轻松玩转.NET大规模版本升级
去年.NET Conf China 技术大会上,我给大家分享了主题<轻松玩转.NET大规模版本升级>,今天把具体分享的内容整理成一篇博客,供大家研究参考学习. 一.先说一下技术挑战和业务背 ...
- 思迈特软件Smartbi:Excel数据分析常用函数汇总!
多传统行业的数据分析师只要求掌握Excel即可,会SPSS/SAS是加分项.即使在挖掘满街走,Python不如狗的互联网数据分析界,Excel也是不可替代的. Excel是我们工作中经常使用的一种工具 ...
- 【C# TAP 异步编程】二 、await运算符已经可等待类型Awaitable
await的作用: 1.await是一个标记,告诉编译器生成一个等待器来等待可等待类型实例的运行结果. 2.一个await对应一个等待器 ,任务的等待器类型是TaskAwaiter/TaskAwait ...
- linux模拟cpu占用100%脚本
转至:https://www.cnblogs.com/opma/p/11607434.html 脚本如下: #! /bin/sh # filename killcpu.sh if [ $# -ne 1 ...
- MySQL 学习笔记(一)MySQL 事务的ACID特性
MySQL事务是什么,它就是一组数据库的操作,是访问数据库的程序单元,事务中可能包含一个或者多个 SQL 语句.这些SQL 语句要么都执行.要么都不执行.我们知道,在MySQL 中,有不同的存储引擎, ...
- 小程序swiper高度自适应解决方案
scroll-view 里面继续套一个 scroll-view ,设置纵向允许滚动 <swiper class="swiper"> <swiper-item> ...
- Flutter的强制自我审查
在<如何做好 Code Review>中我论述过代码审查对于保证代码品质的重要性,最近开始采用Git Hooks的方式为Flutter项目增加提交前的强制自我审查.这样做的好处在于将机械化 ...