一 前言
最近收到審稿人的修改意見,其中一條為<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為填充滿整個視窗的影像結果,如下
給出在同一幅影像顯示兩種效果的實驗圖,如下
論文要是影像有多餘的空白,如上面Figure2視窗的影像,那麼審稿人會懟你,就是為了湊字數佔篇幅,很尷尬!所以為了讓論文更緊湊,內容足夠,你得讓matlab演算法處理的紅外影像沒有多餘空白,如如上面Figure1視窗影像倩女幽魂2所示,這樣在論文中很美觀。如下所示:第一張無空白在word中,第二張是有空白在word中,還給出了調整影像PPI的四種方法.
總結:
遇到問題,得獨立思考,有更快和高效的辦法,並不需要一切都按部就班做,如昨天搜尋發現,很多重複勞動都可以在matlab中用for迴圈實現,如同時顯示四種演算法的模擬效果,可以把四個演算法封裝成函式,在迴圈中針對輸入的多幅影像,呼叫不同函式處理顯示即可;還有平時的辦公,如在word中插入多幅影像,如300副,並不是需要每次手動查詢影像位置,在word中點插入,然後一次次調整大小,太耗時間勒!我插入二十副,搞了一個晚上!可以用多種指令碼語言實現,如python,VB,巨集命令的指令碼!
指令碼,意味著一勞永逸!
希望下次碰上重複的體力勞動活,能夠想到用指令碼實現,但學習指令碼肯定需要抽額外時間不斷學習!打算學習一下python,然後有李笑來的自學是門手藝,學海無涯!
參考文獻:
1.matlab幫助文件主題:儲存圖窗時儘可能減少空白空間
2.https://blog.csdn.net/u011624019/article/details/79267394