分割生成的24位深的彩图转换为8位深的彩图

简介: 分割生成的24位深的彩图转换为8位深的彩图

EISeg分割生成的24位深的彩图转换为8位深的彩图


在训练语义分割时,需要有原图和相应的分割图,分割图一般有两种方式


一是用labelme进行打标签,然后根据json文件进行批量分割,这样的图片一般都是8位深的伪彩图,可以直接送到模型训练。


而第二种是使用EISeg生成的图片进行模型训练,然而EISeg生成的是24位深的伪彩图,如下图(肉眼看是没有任何区别的,但就是不能送到模型中训练),需要进行转换,转换为8位深的伪彩图。


下面展示将24位深的伪彩图转换为8位的伪彩图。

#img24to8
import os
import cv2
import numpy as np
from labelme.utils import lblsave
from skimage.color import hsv2rgb, rgb2hsv
def label_colormap(n_label=256, value=None):
    def bitget(byteval, idx):
        return (byteval & (1 << idx)) != 0
    cmap = np.zeros((n_label, 3), dtype=np.uint8)
    for i in range(0, n_label):
        id = i
        r, g, b = 0, 0, 0
        for j in range(0, 8):
            r = np.bitwise_or(r, (bitget(id, 0) << 7 - j))
            g = np.bitwise_or(g, (bitget(id, 1) << 7 - j))
            b = np.bitwise_or(b, (bitget(id, 2) << 7 - j))
            id = id >> 3
        cmap[i, 0] = r
        cmap[i, 1] = g
        cmap[i, 2] = b
    if value is not None:
        hsv = rgb2hsv(cmap.reshape(1, -1, 3))
        if isinstance(value, float):
            hsv[:, 1:, 2] = hsv[:, 1:, 2].astype(float) * value
        else:
            assert isinstance(value, int)
            hsv[:, 1:, 2] = value
        cmap = hsv2rgb(hsv).reshape(-1, 3)
    return cmap
colormap = label_colormap()
# 读入图片并将opencv的BGR转换为RGB格式
img = cv2.imread(r"C:\Users\User\Music\Desktop\打标签\1\Late_Blight_100_pseudo.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 将24位深图片中的[r,g,b]对应到colormap反求出label
lbls = np.zeros(shape=[img.shape[0], img.shape[1]], dtype=np.int64)
len_colormap = len(colormap)
indexes = np.nonzero(img)
for i, j in zip(indexes[0], indexes[1]):
    for k in range(len_colormap):
        if all(img[i, j, :3] == colormap[k]):
            lbls[i, j] = k
            break
# 将label转换成8位
lblsave(os.path.join(os.getcwd(), r'C:\Users\User\Music\Desktop\1\Late_Blight_100.png'), lbls)

这样就可以将一张24位深的伪彩图转换为8位的伪彩图。

如果想要批量生成的,可以自行编写,也可以直接下载。

批量转换

相关文章
|
数据处理 开发工具 git
coco2017数据集转换为yolo格式(记录过程)
最近做一个yolov5的落地应用项目,用的anylabeling打标,需要将coco2017的数据集转为yolo格式,故写下记录过程!
|
机器学习/深度学习 算法 计算机视觉
图形的透视矫正
图形的透视矫正
678 0
|
并行计算 异构计算
卸载原有的cuda,更新cuda
本文提供了一个更新CUDA版本的详细指南,包括如何查看当前CUDA版本、检查可安装的CUDA版本、卸载旧版本CUDA以及安装新版本的CUDA。
17370 3
卸载原有的cuda,更新cuda
|
人工智能 自然语言处理 API
手把手教你搭建微信公众号AI助手
【8月更文挑战第6天】手把手教你搭建微信公众号AI助手
1724 2
手把手教你搭建微信公众号AI助手
|
设计模式 缓存 JavaScript
API设计模式:REST、GraphQL、gRPC与tRPC全面解析
API设计模式:REST、GraphQL、gRPC与tRPC全面解析
941 0
|
Web App开发 Ubuntu Linux
手把手教你Windows+Linux双系统的安装与卸载(一)
后台突然有很多小伙伴留言想看 Linux+Windows 双系统的安装,本想自己写一个,但看了一眼自己那台服役快6年的老古董,想想还是不折腾它了。 于是上网搜索找到了这篇教程,已经征得原作者同意转载至本公众号,并且征得他的同意标注为原创。如果觉得本文对你有帮助,欢迎赞赏,所得款项全部归还原作者。
1709 0
手把手教你Windows+Linux双系统的安装与卸载(一)
onnxruntime cmake配置
onnxruntime cmake配置
796 2
|
人工智能
拯救被掰弯的GPT-4!西交微软北大联合提出IN2训练治疗LLM中间迷失
【6月更文挑战第1天】研究人员为解决大型语言模型(LLM)的“中间迷失”问题,提出了IN2训练方法。此方法通过显式监督增强模型对长文本上下文的理解,改善了信息检索能力。应用IN2训练的FILM-7B模型在长文本任务上表现出色,尤其在NarrativeQA数据集上的F1分数提升了3.4。尽管面临数据合成和计算成本的挑战,IN2训练为LLM的进步开辟了新途径,预示着未来在长文本处理领域的潜力。论文链接:https://arxiv.org/pdf/2404.16811
445 5
|
监控 安全 测试技术
确保第三方API安全的5个最佳实践
确保第三方API安全的5个最佳实践
|
数据可视化 语音技术
2022年全国电子设计竞赛E题-声源定位跟踪系统设计详解
2022年全国电子设计竞赛E题-声源定位跟踪系统设计详解
1197 0

热门文章

最新文章