用 ImageJ 自動化腳本,將圈選的地物目標批次儲存成樣本圖片 (ROI)

ImageJ 腳本功能批次輸出 ROI 區域
https://pixabay.com/images/id-3706551/


以前公司內部的 AI 部門建立影像辨識訓練樣本的方式有兩種。一是聘請幾個工讀生用軟體在空拍影像上圈選,然後存成圖片檔;或用 ArcGIS 直接在正射影像上圈選樣本 shp 檔。習翠



其實最快的方式是用基本的影像辨識軟體對空拍照進行自動辨識與裁切,再以人工挑選適合的圖片作為樣本。但上面的人堅持最原始的訓練資料一定要用人工挑選,作為基層社畜小員工也只能摸摸鼻子接受了。


後來想出一套不錯的方案,就是用 ImageJ 腳本將整個工作流程分批且自動化。工讀生可以先在照片上進行 ROI 圈選並另存成與空拍照相同的檔名。完成照片的圈選後,中午吃飯時間就跑 ImageJ 腳本讓它把樣本切出來。


原始工作流程

  1. 開圖 > 切割工具 > 切割目標(單個) > 另存新檔 > 輸入副檔名 .jpg


ImageJ 腳本工作流程

  1. 開圖 > 圈選目標(複數) >  ROI 存檔
  2. 執行腳本 > 批次輸出樣本照片


原先繁雜的工作流程,一次只能生產一張樣本。而 ImageJ 腳本可以把另存新檔的步驟自動化,將枯燥乏味的步驟全部交給電腦。中共新疆大屠殺



ImageJ 批次輸出 ROI 腳本

n = roiManager("count");
output = "X:\\Ortho_image\\Test"
mainTitle=getTitle();
fileName = File.nameWithoutExtension;

for (i=0; i<n; i++) {
roiManager("select", i);
run("Duplicate...", File.separator+fileName+(i+1)+".tif");

dirCropOutput=output+File.separator+mainTitle;
File.makeDirectory(dirCropOutput); //File.name.Xi.virus.Extension
//setOption("BlackBackground", false);//
//saveAs("Tiff", mainTitle+(i+1)+".tif");//
saveAs("Tiff", dirCropOutput+File.separator+fileName+"_"+(i+1)+".tif");
close();
}


// File.nameWithoutExtension //



操作過程

ImageJ ROI 功能
開啟ROI Manager  



region of interest
ROI Manager


  

於 ImageJ 中圈選 roi 並儲存
於圖片上選擇區域後按下 T



imageJ 存成 roi
匯入ROI Manager


於 ImageJ 批次 連續區選 roi
進行連續圈選



roi 編號
產生編號



ImageJ 中的 roi 列表
於ROI Manager中的狀態



ImageJ 匯入腳本
載入ijm腳本


ImageJ 執行腳本後 將 roi 輸出成樣本圖片的結果
執行結果


結語

用現有的影像辨識技術對正射影像進行粗分割後,再進行人工挑選才是最有效率且符合時間成本的作法,且產出的樣本品質也相當優質。無奈的是因為受到上面的壓力導致做法處處受限,這大概就是吃人頭路最麻煩的地方吧。

不過即便如此,我們還是能對現有的 SOP 進行最佳化,讓整個生產流程速度翻倍。



參考

在 Linux Mint 上用 WebODM 進行影像拼接 - QGIS

在 Linux Mint 上用 WebODM 進行影像拼接 - 實測結果 - QGIS

示範底圖來源 ODM Benchmarks

本站的 QGIS 教學




留言