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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pSlGieQ-1663655311409)(image-20220920140720479.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P07ceW0Y-1663655311413)(image-20220920141154581.png)]

下面展示将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位的伪彩图。

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

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐