使用ENVI的ROI工具绘制深度学习标签 您所在的位置:网站首页 envi如何使用 使用ENVI的ROI工具绘制深度学习标签

使用ENVI的ROI工具绘制深度学习标签

#使用ENVI的ROI工具绘制深度学习标签| 来源: 网络整理| 查看: 265

1 具体步骤

       制作深度学习所需的标签,除了使用labelme,还可以利用ENVI中的ROI工具。具体方法如下:

1.  打开ENVI 5.3,加载一幅影像,然后在上方工具栏点击“roi按钮”。

6af25a81471c4c2bb8cb820eb679672d.png

d2fcc66381024f0495389b37198ec174.png

2. 新建一类兴趣区。如果要制作树木的标签,就在图上标注树木区域。

913de59c079546be98085862d8af2e87.png

1ccb34f60cfd407f9b6e9cd9ddd38d5a.png

3. 标注完后,在toolbox中依次点击Regions of Interest >> Classification Image from ROIs,将绘制好的兴趣区先保存为Memory。

01fe819c24b64dc1a7e3898fa8a7f19b.png

e571f9a22f704f4c921d214b1486ff99.png

4. 依次点击File >> Save as , 选择memory, 将其保存为tif格式。

80d3ba5dbec4461485f302498fb66460.png

9d932f6508ac472d86847269e8e4c497.png

c12add6ef42f408da779b3b0f5759dd1.png

5. 输出成功。打开''Quick Stats",可以看到输出的是0-1二值图像。

a482001085bb4fafb46c96ca44f98084.png

84fb1baebe8840d1956dbbe95985c9ae.png

2 一些问题

        使用上面的方法得到的标签,只有在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 实验室设备网 版权所有