-
目錄結構
/dataset/ xxxx.tif # 原始圖像 image-3000 0.tif # 切割后的tif 1.tif ........ xxx_0.json # 生成的json文件也放在該文件夾下 xxx_1.json ....... xxx_0_json # 調用labelme_json_to_dataset 0.json 生成的0_json文件夾 img.png # 原始圖片的png格式 info.yaml label.png # 標簽圖片 label_names.txt label_viz.png xxx_1_json ....... 0.png # 將json文件夾中的label.png 提取出來 1.png ....... label_0.tif # 將上邊的png標簽文件轉換為tif格式
-
收集數據,高分辨率圖像
- 無人機數據,航空數據等
-
圖像切割,像素大小該為多少?
-
本數據集平均像素大小(40000*50000) tif格式,LZW壓縮方式壓縮
-
要考慮計算機顯卡,目標建築無盡量不被切割等問題,本利使用3000*3000
# data:2020-01-04 # user:dean # desc:圖像切割腳本 import tifffile as tiff # 也可使用pillow或opencv 但若圖片過大時可能會出問題 import os width = 1500*2 # 切割圖像大小 height = 1500*2 # 切割圖像大小 home = "/media/dean/Document/AI_dataset/DOM/" file_name = "裴庄村51-dom" image_dir = os.path.join(home,file_name) image = os.path.join(image_dir,file_name+".tif") target_dir = os.path.join(image_dir,"image-"+str(width)) # 切割后圖片存儲位置 if not os.path.exists(target_dir): os.mkdir(target_dir) img = tiff.imread(image) # 導入圖片 print("導入圖片完成",img.shape) # 原始圖片大小 pic_width = img.shape[1] pic_height = img.shape[0] row_num = pic_width//width # 縱向切割數量 col_num = pic_height // height # 橫向切割數量 print("開始進行切割,可切割總數為{}".format(col_num*row_num)) for j in range(col_num): for i in range(row_num): num = j * row_num + i print("正在進行第{}張切割".format(num + 1)) row = i * width row_end = row + width col = j * height col_end = col + height # print(col,col_end,row,row_end) cropped = img[col:col_end,row:row_end] name = "{}_{}.tif".format(file_name,num) image_path = os.path.join(target_dir,name) tiff.imsave(image_path, cropped)
-
-
標注工具 labelme
-
使用label標注每張圖片
pip install labelme # 安裝labelme
-
每張圖片標注后會生成對應name.json文件
labelme_json_to_dataset xxx.json
# data:2020-01-04 # user:dean # desc:批量將json文件轉為 label import os dir = r"I:\人工智能數據\DOM\裴庄村51-dom\image-3000" files = [os.path.join(dir,file) for file in os.listdir(dir) if file.endswith(".json")] for file in files: cmd = "labelme_json_to_dataset {}".format(file) print(cmd) os.system(cmd)
-
將所有的json/label.png 提取到統一文件夾
# data:2020-01-04 # user:dean # desc:將label文件夾中的laebl提取出來 import tifffile as tiff from PIL import Image import os target_dir = r"/media/dean/Document/AI_dataset/DOM/裴庄村51-dom/image-3000" # json_label 所在的文件夾 files = [os.path.join(target_dir,file) for file in os.listdir(target_dir)] for i in files: if os.path.isdir(i): lables = os.listdir(i) for file in lables: if file == "label.png": image_path = os.path.join(i, "label.png") imgae = Image.open(image_path) parent_dir_name = os.path.basename(os.path.dirname(image_path)) new_name = "{}.png".format(parent_dir_name.split("_")[1]) imgae.save(os.path.join(target_dir,new_name)) print("第{}個文件夾".format(i)) break;
-
將所有的label.png轉換為tif格式 並轉換為單通道黑白照片
# coding:utf-8 # file: change_format.py # author: Dean # contact: 1028968939@qq.com # time: 2020/1/4 20:41 # desc: 將png 標簽轉化為單通道 黑白標簽 並轉化為tif import os from PIL import Image threshold = 0 table = [] for i in range(256): if i > threshold: table.append(255) else: table.append(0) target_dir = r"/media/dean/Document/AI_dataset/DOM/裴庄村51-dom/image-3000" files = [os.path.join(target_dir,file) for file in os.listdir(target_dir) if file.endswith(".png")] for file in files: image_file_name = os.path.basename(file) num = image_file_name.split(".")[0] image_file = Image.open(file) # open colour image # image_file = image_file.convert('L') # convert image to black and white image_file = image_file.point(table, '1') new_file = os.path.join(target_dir,"{}.tif".format(num)) image_file.save(new_file) print(new_file)
-
結束(根據需要提取相應數據即可)
-