MATLAB批量存储图像和显示算法处理的图像不留空白
一 前言
最近收到审稿人的修改意见,其中一条为<RC: There were only five images evaluated in the experiment, and I recommend increasing to twenty to further evaluate the algorithm performance.>他说我论文只有五副图像用来评价算法性能,推荐我至少用20副图像来仿真算法效果. 但绝大多数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',filename{k}) ;%internet
% print(H,'-dtiffn','-r600',num2str(k)) ;%internet
end
重点是print函数批量输出不同文件名的图像,matlab显示图像没有多余的空白
三实验结果展示
下面给出,能够达到预期效果的实验结果:1.即一次批量输出20副红外图像且每一个分配文件名和保存为600PPI的tiff格式;2.一次输出显示20副红外图像;3.matlab显示图像没有多余空白(为了放在论文好看);
图1
图2有多余的空白的结果图像,如下所示
图3为填充满整个窗口的图像结果,如下
给出在同一幅图像显示两种效果的实验图,如下
论文要是图像有多余的空白,如图像1,那么审稿人会怼你,就是为了凑字数占篇幅,很尴尬!所以为了让论文更紧凑,内容足够,你得让matlab算法处理的红外图像没有多余空白,如图像2所示,这样在论文中很美观,如下所示:左边无空白在word中,右边是有空白在word中,还给出了调整图像PPI的四种方法.
总结下:
遇到问题,得独立思考,有更快和高效的办法,并不需要一切都按部就班做,如昨天搜索发现,很多重复劳动都可以在matlab中用for循环实现,如同时显示四种算法的仿真效果,可以把四个算法封装成函数,在循环中针对输入的多幅图像,调用不同函数处理显示即可;还有平时的办公,如在word中插入多幅图像,如300副,并不是需要每次手动查找图像位置,在word中点插入,然后一次次调整大小,太耗时间勒!我插入二十副,搞了一个晚上!可以用多种脚本语言实现,如python,VB,宏命令的脚本!
脚本,意味着一劳永逸!
希望下次碰上重复的体力劳动活,能够想到用脚本实现,但学习脚本肯定需要抽额外时间不断学习!打算学习一下python,然后有李笑来的自学是门手艺,学海无涯!
MATLAB批量存储图像和显示算法处理的图像不留空白的更多相关文章
- 使用matlab批量处理图像后在指定文件夹存储
使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jp ...
- MATLAB批量打印输出600PPI的图像且图像不留空白
一 前言 最近收到审稿人的修改意见,其中有三条:一条为<RC: There were only five images evaluated in the experiment, and I re ...
- MATLAB批量读入图片
%% import pictures, and save into images{img_num} function [images, img_num, vertical_border] = impo ...
- matlab批量读取一个文件夹里类似命名的mat文件
参考网址: Matlab读取同一路径下多个txt或mat文件总结 matlab 批量读取数据文件.mat .dat 整理:matlab批量读入数据文件的方法 首先命名方式体现在只是名字里数字有变化,其 ...
- 利用matlab写一个简单的拉普拉斯变换提取图像边缘
可以证明,最简单的各向同性微分算子是拉普拉斯算子.一个二维图像函数 f(x,y) 的拉普拉斯算子定义为 其中,在 x 方向可近似为 同理,在 y 方向上可近似为 于是 我们得到满足以上三个 ...
- MATLAB批量修改图片名称
申明:转载请注明出处. 设在“D:\UserDesktop\pic\”目录下有很多张格式为jpg照片,命名不规则,如图. 现在用MATLAB批量修改所有图片的命名格式,改为1.jpg,2.jpg,.. ...
- matlab subplot(figure)如何设置使得图像最终显示出来不一样大小
1. 问题描述 figure subplot(1, 2, 1), imshow(A) subplot(1, 2, 2), imshow(B) 无论 A 和 B 的 size 是否一致,最终显示出来的 ...
- 深入学习OpenCV中图像灰度化原理,图像相似度的算法
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...
- VC++ 在使用 CImage 的Draw 输入一个图像时,有时候会造成图像失真严重,解决的方法如下
VC++ 在使用 CImage 的Draw 输入一个图像时,有时候会造成图像失真严重,解决的方法如下 失真主要是由于变形造成的.只要设置一下变形的模式就可以了 ::SetStretchBltMode ...
随机推荐
- ROS2学习之旅(15)——编写简单的服务和客户节点(C++)
当节点使用服务进行通信时,发送数据请求的节点称为客户节点,响应请求的节点称为服务节点.请求和响应的结构由.srv文件决定. 本文的例子是一个简单的整数加法系统:一个节点请求两个整数的和,另一个节点响应 ...
- 使用 Java 和 Maven (JBake) 生成静态网站
使用 JBake("mvn generate-resources")构建您的静态网站或博客.使用布局.宏和数据文件. 我们迁移了整个www.optaplanner.org网站(13 ...
- js--ES6新特性之解构
前言 es6 中引入了解构这一新特性,了解解构成为一个格合前端必须掌握的基础知识,不仅作为了面试的重要考查知识,同时能极大提高我们平常工作的开发效率.本文来总结一下需要掌握的解构知识点. 正文 1.什 ...
- C++ 标准模板库(STL)——迭代器(iterators)的用法及理解
C++ STL中迭代器(iterators)用于遍历对象集合的元素.由于容器大小随着插入删除等操作动态改变,无法像静态数组那样获取数组长度然后遍历容器里的所有元素:这时就需要迭代器,每次从容器内第一个 ...
- 以太网MAC地址组成与交换机基本知识
以太网MAC地址 MAC地址由48位二进制组成,通常分为六段,用十六进制表示,工作在数据链路层. 数据链路层功能: 链路的建立,维护与拆除 帧包装,帧传输,帧同步 帧的差错恢复 简单的流量控制 第八位 ...
- python爬取北京政府信件信息02
在爬取详细信息页面中,又遇到了问题,就是标签内的信息爬取,用re的正则表达式没有找到解决办法,只能又去网上搜索解决办法 用bs4来解决,用 soup = BeautifulSoup(text,&quo ...
- JavaScript学习笔记:你必须要懂的原生JS(一)
1.原始类型有哪几种?null是对象吗?原始数据类型和复杂数据类型存储有什么区别? 原始类型有6种,分别是undefined,null,bool,string,number,symbol(ES6新增) ...
- 【spring源码系列】之【Bean的循环依赖】
希望之光永远向着目标清晰的人敞开. 1. 循环依赖概述 循环依赖通俗讲就是循环引用,指两个或两个以上对象的bean相互引用对方,A依赖于B,B依赖于A,最终形成一个闭环. Spring循环依赖的场景有 ...
- 搭建NodeJS开发环境
Windows10下搭建NodeJS开发环境 ======================================== 下载 NodeJS 安装包,最好使用LTS长期支持正式版 下载见 如下链 ...
- 素数(质数)(Java版)
4.输出质数(素数) 素数(质数):是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除(除0以外)的数 public class PrimeNumber { public static v ...