使用ENVI的ROI工具绘制深度学习标签 | 您所在的位置:网站首页 › envi如何使用 › 使用ENVI的ROI工具绘制深度学习标签 |
1 具体步骤
制作深度学习所需的标签,除了使用labelme,还可以利用ENVI中的ROI工具。具体方法如下: 1. 打开ENVI 5.3,加载一幅影像,然后在上方工具栏点击“roi按钮”。 2. 新建一类兴趣区。如果要制作树木的标签,就在图上标注树木区域。 3. 标注完后,在toolbox中依次点击Regions of Interest >> Classification Image from ROIs,将绘制好的兴趣区先保存为Memory。 4. 依次点击File >> Save as , 选择memory, 将其保存为tif格式。 5. 输出成功。打开''Quick Stats",可以看到输出的是0-1二值图像。 使用上面的方法得到的标签,只有在envi、arcgis,以及其他使用GDAL库读取文件的软件或代码里读取,图像的像素值才是类别值(比如0,1,2);如果使用OpenCV库里的imread函数打开,图像的像素值就不是类别值,而是类别对应的颜色值。因此我加上了一个转换的代码,把ENVI得到的标签转换为像素值为类别号的灰度图,前提是需要保存兴趣区的.xml文件。 # -*- coding:utf-8 -*- """ @Time: 2023/4/2 21:45 @author: Geoflyme @file: label_RGBto01.py """ import matplotlib.pyplot as plt import cv2 import numpy as np # 使用envi得到的label, 在py打开是RGB格式的图,不是我们所需的分类值。 # 利用.xml文件,查找每一个类别所对应的色彩值,建立起一个查找表(例如label中色彩值为(0,255,0)的像元属于第2类地物)。 # 利用查找表可以进行转换,将RGB转换为值为类别索引的灰度图。 # 函数:读取.xml文件中的 def read_xml(path,classes): table = np.zeros((classes, 3), dtype=np.int64) l = "" file = open(path, 'r') data = file.readlines() classnum = 0 for i in data: if 'Region name' in i : classnum = classnum + 1 l = i temp = l.split("\"")[3] table[classnum,0] = int(temp.split(",")[0]) table[classnum,1] = int(temp.split(",")[1]) table[classnum,2] = int(temp.split(",")[2]) return(table) # 分类数(含背景) classnum = 2 # xml文件路径 xml_path = r'cd10.xml' # 调用函数求颜色查找表 table = read_xml(xml_path,classnum) print("table = ", table) # 读取RGB形式的label img_path = r'cd10_label.tif' img = cv2.imread(img_path)[:, :, (2, 1, 0)] h = img.shape[0] w = img.shape[1] # 定义输出图像 单波段灰度图 output = np.zeros((h,w),dtype=np.int64) # 映射 for i in range(h): for j in range(w): for k in range(classnum): if img[i, j, 0] == table[k, 0] and img[i, j, 1] == table[k, 1] and img[i, j, 2] == table[k, 2]: output[i,j] = k # 输出图像 ori = img_path.split(".")[0] cv2.imwrite(ori+"_out.png", output)
|
CopyRight 2018-2019 实验室设备网 版权所有 |