首页 > 其他分享 >语言分割伪彩色掩码详解

语言分割伪彩色掩码详解

时间:2024-05-25 18:14:33浏览次数:26  
标签:img 彩色 模式 128 详解 mode 图像 掩码

1.伪彩色图

  伪彩色(pseudo-color)图像是一种图像处理技术,用于将灰度图像或单通道图像映射到彩色空间,以便通过颜色差异来增强图像的视觉表现。在伪彩色图像中,不同的灰度级或数据值被赋予不同的颜色,从而创建出一个彩色的图像表示。伪彩色图每个像素值实际上是一个索引值或代码,该代码值作为色彩查找表CLUT(Color Look-Up Table)中某一项的入口地址,根据该地址可查找出包含实际R、G、B的强度值。这种用查找映射的方法产生的色彩称为伪彩色,生成的图像为伪彩色图像。伪彩色图查找表是一个预先定义好的映射表,它将原始图像的灰度值(或某个特定范围内的灰度值)映射到特定的颜色值。每个条目通常包含红、绿、蓝(RGB)三个颜色通道的值,以及可能的透明度(Alpha)信息。

  需要注意的是,伪彩色图像并不是真正的彩色图像,而是通过对灰度图像或单通道图像进行颜色映射得到的。因此,在解释伪彩色图像时,需要注意颜色所代表的实际含义。

2. 图像模式

  图像模式是指图像中像素的存储和表示方式,不同的模式对应不同的颜色深度和存储需求。在PIL中,常见的图像模式包括“1”(二值图像)、“L”(灰度图像)、“P”(调色板图像)、“RGB”(红绿蓝三通道彩色图像)、“RGBA”(红绿蓝及透明度四通道彩色图像)、“CMYK”(印刷色彩模式,包括青、洋红、黄和黑色)、“YCbCr”(用于JPEG压缩的颜色空间)、“I”(32位整型图像)和“F”(32位浮点型图像)等。

from PIL import Image
img = Image.open('test.png')
mode = img.mode
print(mode)  # 输出可能是'L', 'RGB', 'RGBA'等

  如果你输入的是彩色图,那么输出是RGB。在cv2中没有直接的输出图像模式的方法。

3.P模式(Pseudocolor mode)与L模式(Luminance mode)

  上面介绍了图像模式,这里主要介绍语义分割中用到的标签的图像的模式。

  1. P模式(Pseudocolor mode):

    • 在P模式下,灰度图像的每个像素值会被映射到一个特定的颜色上。
    • 映射函数可以是线性的,也可以是非线性的,取决于所选的伪彩色变换方法。
    • 伪彩色图可以用于突出显示图像中的特定特征,如边缘、纹理或特定类型的图像数据(例如医学成像中的不同组织类型)。
    • P模式下的伪彩色图通常用于科学可视化,其中不同的颜色可以帮助解释和理解数据。
  2. L模式(Luminance mode):

    • L模式通常指的是亮度模式,它是一种将灰度图像转换为具有单一颜色通道的图像的方法。
    • 在L模式下,图像的每个像素值被转换为相同的颜色(通常是白色或其他单一颜色),然后通过调整亮度来区分不同的像素值。
    • 这种方法通常用于创建高对比度的图像,使得图像中的不同区域或特征通过亮度的变化来区分,而不是颜色的变化。
    • L模式下的图像可能不如P模式那样丰富和多彩,但它们可以提供一种简单而有效的方式来强调图像中的亮度差异。

  这里对标签掩码灰度图及伪彩色掩码图进行测试(从左至右分别是原图,labelme得到的标签伪彩色掩码图label.png,单通道灰度图pic.png):

                                                                      

import cv2
import numpy as np
from PIL import Image
img = Image.open('pic.png')
mode = img.mode
print(mode)  # L
print(np.unique(img))#[0 1 2]
###############################
img = Image.open('label.png')
mode = img.mode
print(img.getpalette())#PIL的P模式默认调色板RGB颜色及顺序[0, 0, 0, 128, 0, 0, 0, 128, 0, 128, 128, 0, 0, 0, 128, 128, 0, 128, 0, 128, 128, 128, 128,...... print(mode) # P print(np.unique(img))#[0 1 2] #如果下面使用cv2去读取图片,结果如下: img=cv2.imread('label.png',0)#以灰度读取伪彩色标签图 print(np.unique(img))#[ 0 38 75] img=cv2.imread('label.png',1)#以彩色读取伪彩色标签图 print(np.unique(img))#[ 0 128] img=cv2.imread('pic.png',0) print(np.unique(img))#[0 1 2] img=cv2.imread('pic.png',1) print(np.unique(img))#[0 1 2]

  上述代码中,np.unique是用来测试图像的像素值有哪些。很显然cv2对于P模式的伪彩色标签图,会以三通道彩色图去读取,无法读取到实际的标签种类。

4. P模式与L模式相互转换

  P模式转L模式

from PIL import Image

# 读取伪彩色P模式图像
img = Image.open('pseudo_color_image.png')
# 检查图像模式
print(f"原始图像模式: {img.mode}")
# 如果图像不是RGB模式,先转换为RGB模式(这里假设图像已经是P模式)
if img.mode != 'RGB':
    img = img.convert('RGB')
# 将RGB图像转换为灰度图像
gray_img = img.convert('L')
# 保存灰度图像
gray_img.save('gray_image.jpg')
# 检查转换后的图像模式
print(f"转换后图像模式: {gray_img.mode}")

  L模式转P模式

from PIL import Image

# 打开L模式图像
image = Image.open("pic.png")
# 将L模式转换为P模式,并设置调色板
p_image = image.convert("P")  # 这里的palette参数实际上是被忽略的
#自定义一个包含5种颜色的调色板
colors = [128, 128, 0,0, 255, 0, 0, 0, 255, 0, 0, 255, 255, 255, 255]
p_image.putpalette(colors)
# 保存带有自定义调色板的P模式图像
p_image.save("converted_palette_image.png")
# 验证图像模式
print(f"转换后图像模式: {p_image.mode}")

5.Alpha透明通道与自定义语义分割标签生成

  后面补充。

 

 

 

 

小结:JPG(JPEG)格式不支持调色板

标签:img,彩色,模式,128,详解,mode,图像,掩码
From: https://www.cnblogs.com/wancy/p/18212547

相关文章

  • 什么是SQL注入?SQL注入详解(非常详细)零基础入门到精通,收藏这一篇就够了
    一、SQL注入简介SQL注入就是指Web应用程序对用户输入数据的合理性没有进行判断,前端传入后端的参数是攻击者可控制的,并且根据参数带入数据库查询,攻击者可以通过构造不同的SQL语句来对数据库进行任意查询。下面以PHP语句为例作为展示:query="SELECT∗FROMus......
  • 【重要】Heygen订阅指南和用法详解!让照片学说话?一张照片变演讲?Heygen订阅值得吗?
    常见问题Q:Heygen是什么?Heygen是什么玩意?A:Heygen是一款由AI视频工具,创作者只需要上传视频并选择要翻译的语言,该工具可实现自动翻译、调整音色、匹配嘴型。为了方便理解,笔者利用Heygen制作了一个AI视频,源图是下面这张AI作品,点此查看示例,访问可能需要魔法Q:Heygen好用......
  • logo设计从创意到草稿到成品的过程(商标设计详解)
    一logo的设计过程1了解需求设计师先了解企业和产品的特点,总结提炼一些关键词2调研分析设计师需要了解客户的竞争对手,确保自己的设计的logo作品和竞争对手比有足够的辨识度3开始设计先发散思维,头脑风暴,提炼出logo的核心关键词,记录4草图为了快速记录稍纵即逝的灵感......
  • VMware上基于centos系统完全分布式Hadoop集群的搭建详解
    目录1.centos系统的环境的准备1.1.样本机的配置1.1.1.准备一个centos的虚拟机1.1.2.关闭系统的防火墙1.1.3.配置centos系统的IP1.1.4.修改主机名称1.1.5. 配置hosts映射文件1.2.jdk的安装1.2.1.jdk的下载1.2.2.虚拟机自带jdk的删除1.2.3.将jdk上传到虚拟机中1.2.4......
  • SCSS 基本使用详解
    一、引言SCSS是Sass(SyntacticallyAwesomeStylesheets)的其中一种语法,是一种预处理器脚本语言,能够扩展CSS的功能,使其更加强大和高效。SCSS保留了CSS的原有语法,同时增加了变量、嵌套规则、混合宏(mixin)、继承等高级功能。本文将详细介绍SCSS的基本使用方法,帮助读者......
  • 深度神经网络详解
    一、引言深度神经网络(DeepNeuralNetworks,DNNs)是机器学习中的一种重要模型,近年来在图像识别、自然语言处理、语音识别等领域取得了显著的成果。深度神经网络通过模拟人脑神经元的工作方式,利用层级结构对输入数据进行抽象和特征提取,从而实现复杂的模式识别和数据分析。本文......
  • Python中的异常处理:try, except, else, finally详解
    Python中的异常处理:try,except,else,finally详解在Python编程中,异常处理是确保程序健壮性和错误处理能力的重要机制。通过使用try,except,else,finally等关键字,Python提供了灵活的异常处理框架,使得开发者能够优雅地处理运行时错误和其他异常情况。本文将详细解析这些......
  • Java方法详解
    Java方法详解1、何谓方法Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法......
  • YOLOv8 更换骨干网络之 MobileNetV3 详解
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)YOLOv8更换骨干网络之MobileNetV3详解1.MobileNetV3简介MobileNetV3......
  • 【实战JVM】-01-JVM通识-字节码详解-类的声明周期-加载器
    【实战JVM】-01-JVM通识-字节码详解-类的声明周期-加载器1初识JVM1.1什么是JVM1.2JVM的功能1.2.1即时编译1.3常见JVM2字节码文件详解2.1Java虚拟机的组成2.2字节码文件的组成2.2.1正确打开字节码文件2.2.2字节码组成2.2.3基础信息2.2.3.1魔数2.2.3.1主副......