语义分割——为什么单通道8bit灰度图像能显示多种色块???

目录

  • 一、问题
  • 二、解答
    • 2.1 标签图的实际存储格式
    • 2.2 标签图的显示颜色
    • 2.3 颜色映射示例
  • 三、应用颜色映射
    • 3.1 OpenCV显示标签图
    • 3.2 Matplotlib显示标签图
  • 四、总结

一、问题

大家在做语义分割时不知道有没有这样的疑惑,使用打标签工具后,标签图是单通道8位图,8位图???不应该是灰度图么,为啥能显示那么多色块?

二、解答

标签图的显示颜色与它的实际存储格式是两个不同的概念。

2.1 标签图的实际存储格式

通常情况下,语义分割的标签图是8位单通道的灰度图,每个像素的值代表一个类别ID。例如,像素值0可能代表背景,1代表类1,2代表类2,依此类推。因为它是单通道的灰度图,所以本质上每个像素只能有256种不同的值(从0到255)。

2.2 标签图的显示颜色

即使标签图是8位单通道灰度图,显示工具可能会用不同的颜色来表示不同的类别,以便于人眼识别和分析。这是通过颜色映射(color mapping)实现的。颜色映射是一种将灰度值转换为颜色的方法。

2.3 颜色映射示例

假设有3个类别:

类别0(背景):黑色
类别1:红色
类别2:黄色
当标签图被显示时,显示工具可以应用一个预定义的颜色映射,将灰度值0、1、2分别映射到黑色、红色和黄色。

三、应用颜色映射

直观显示标签图是因为有些标记工具打完标签后,看上去依然是黑的,如下图,其实已经有各个类别的像素值区别了,为了直观观看,就需要应用颜色映射来观看。
在这里插入图片描述
使用Python和OpenCV或Matplotlib,可以应用颜色映射来显示标签图。

直观显示的标签图见下:

在这里插入图片描述

3.1 OpenCV显示标签图

代码见下:

import cv2
import numpy as np# 创建示例标签图
label_image = np.array([[0, 1, 2],[2, 1, 0],[1, 2, 0]
], dtype=np.uint8)# 创建颜色映射
color_map = np.array([[0, 0, 0],       # 类别0: 黑色[255, 0, 0],     # 类别1: 红色[255, 255, 0]    # 类别2: 黄色
], dtype=np.uint8)# 应用颜色映射
colored_label_image = color_map[label_image]# 显示标签图
cv2.imshow('Label Image', colored_label_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 Matplotlib显示标签图

代码见下:

import numpy as np
import matplotlib.pyplot as plt# 创建示例标签图
label_image = np.array([[0, 1, 2],[2, 1, 0],[1, 2, 0]
], dtype=np.uint8)# 创建颜色映射
color_map = {0: (0, 0, 0),       # 类别0: 黑色1: (1, 0, 0),       # 类别1: 红色2: (1, 1, 0)        # 类别2: 黄色
}# 应用颜色映射
colored_label_image = np.zeros((label_image.shape[0], label_image.shape[1], 3), dtype=np.float32)
for label_value, color in color_map.items():colored_label_image[label_image == label_value] = color# 显示标签图
plt.imshow(colored_label_image)
plt.show()

四、总结

8位单通道标签图在存储时是灰度图,但通过颜色映射可以将不同的灰度值显示为不同的颜色,这样有助于更直观地观察和分析标签图。显示工具(如图像查看器、数据可视化工具等)通常会自动应用预定义的颜色映射来显示这些类别,以增强可读性。

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目收获总结--大数据量存储架构设计方案

项目收获总结--大数据量存储架构设计方案 一、背景二、数据存储层技术选型2.1 MySQL2.2 MongoDB2.3 HBase2.4 HBaseElasticSearch 三、HBaseElasticSearch基本原理3.1 前置考虑3.2 HBaseElasticSearch优点3.3 HBaseElasticSearch缺点 四、HBaseElasticSearch数据一致性架构4.1 …

大语言模型-Transformer-Attention Is All You Need

一、背景信息: Transformer是一种由谷歌在2017年提出的深度学习模型。 主要用于自然语言处理(NLP)任务,特别是序列到序列(Sequence-to-Sequence)的学习问题,如机器翻译、文本生成等。Transfor…

【UE5】可反射的射线检测

目录 效果 步骤 一、准备射线 二、生成第一次反射后的射线 三、多次反射 四、通过循环进行多次反射 效果 步骤 一、准备射线 1. 新建一个工程,添加一个俯视角游戏资源包 2. 双击打开俯视角游戏地图 删除大纲中的后期处理体积使得地图可以正常显示 3. 添加一…

SAP批量报工源码

SAP批量报工源码,适用于工序少的情景。 *&---------------------------------------------------------------------* *& Report ZPPR106 *& *&---------------------------------------------------------------------* *& *& *&--------------…

网络编程中的TCP和UDP

什么是TCP协议 TCP( Transmission control protocol )即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 :数据传输之前客户端和服务器端必须建立连…

web学习笔记(八十二)uniapp

目录 1.介绍uniapp 2.uniapp项目结构 3.自定义tabBer 4.uniapp条件编译 使用方法 5.uniapp的路由跳转 (1)js跳转 (2)标签跳转 获取参数 6.生命周期 6.1 全局生命周期 6.2 页面生命周期 1.介绍uniapp uniapp是一个基于…

Aouth2单点登录

信息来源B站 不改bug早点睡,北冥 时序图 -----------------------------总结描述 总体流程 浏览器 - 系统1 - 系统2 - 认证中心(SSO) 访问系统1 浏览器,访问系统1,询问认证中心是否登录 未登录,重定向一个登录页面返回给浏…

(二)原生js案例之数码时钟计时

原生js实现的数字时间上下切换显示时间的效果&#xff0c;有参考相关设计&#xff0c;思路比较难&#xff0c;代码其实很简单 效果 代码实现 必要的样式 <style>* {padding: 0;margin: 0;}.content{/* text-align: center; */display: flex;align-items: center;justif…

光盘防水嘛 ? DVD+R 刻录光盘泡水实验

首发日期 2024-07-20, 以下为原文内容: 同志们好, 欢迎来到 胖喵穷人实验室 ! 这里专注于 低成本, 低难度, 低风险 的 “三低” 小实验. 胖喵穷人实验室 (PM-PLab-E)正式名称: 紫腹巨蚊 (Toxorhynchites gravelyi) 系列穷人 (Poor people) 实验室风险警告: 低风险并不是零风险…

Python面试题:使用Python进行元编程:元类和元编程技巧

在 Python 中&#xff0c;元编程是一种编程技巧&#xff0c;它涉及到代码本身的结构和行为的编程。元编程允许你编写能够操作、修改或生成代码的代码。最常见的元编程技术包括使用元类、装饰器和类装饰器。以下是对 Python 元编程的详细讲解&#xff0c;包括元类和一些常用的元…

Nginx系列-5 root和alias和index和try_files

1.root和alias root和alias用于指定文件系统的路径。root一般定义在server块中&#xff0c;为每个server指定文件系统路径&#xff1b;alias只能定义在location块中&#xff0c;为具体的url指定文件系统。二者的差别还体现在&#xff1a; [1] root只能指定目录&#xff0c;而a…

人工智能与语音识别:技术进步与应用前景

引言 人工智能&#xff08;AI&#xff09;作为当今科技进步的核心驱动力&#xff0c;正在各个领域展现其变革力量。其中&#xff0c;语音识别技术作为人工智能的重要应用之一&#xff0c;已经深入到我们的日常生活和工作中。从智能助手如Siri、Google Assistant&#xff0c;到智…

kubernetes k8s Deployment 控制器配置管理 k8s 红蓝部署 金丝雀发布

目录 1、Deployment控制器&#xff1a;概念、原理解读 1.1 Deployment概述 1.2 Deployment工作原理&#xff1a;如何管理rs和Pod&#xff1f; 2、Deployment资源清单文件编写技巧 3、Deployment使用案例&#xff1a;创建一个web站点 4、Deployment管理pod&#xff1a;扩…

排序规则utf8_general_ci的作用是什么?

排序规则 utf8_general_ci 是指针对使用 UTF-8 编码存储的数据进行排序和比较的一种规则。在数据库管理系统&#xff08;如MySQL&#xff09;中&#xff0c;排序规则决定了在执行查询时如何比较和排序文本数据。 具体来说&#xff0c;utf8_general_ci 中的几个部分含义如下&am…

科研绘图系列:R语言雨云图(Raincloud plot)

介绍 雨云图(Raincloud plot)是一种数据可视化工具,它结合了多种数据展示方式,旨在提供对数据集的全面了解。雨云图通常包括以下几个部分: 密度图(Density plot):表示数据的分布情况,密度图的曲线可以展示数据在不同数值区间的密度。箱线图(Box plot):显示数据的中…

模型剪枝入门

一、定义 1.定义 2. 案例1 3. 全局剪枝案例 4. 全局剪枝案例 5. 自定义剪枝 6. 特定网络剪枝 7. 多参数模块剪枝 8. torch.nn.utils.prune 解读 二、实现 定义 接口&#xff1a; import torch.nn.utils.prune as prune案例1 import torch.nn as nn import torch.nn.utils.…

createElement方法,

在JavaScript中&#xff0c; createElement 方法&#xff0c;这是JavaScript中DOM操作的一部分&#xff0c;用于创建一个新的HTML元素。 以下是 document.createElement 方法的基本用法&#xff1a; 创建新元素 let newElement document.createElement(div); // 创建一个…

全部由1组成的子矩形的数量

题目描述&#xff1a; 给定一个二维数组matrix&#xff0c;其中的值不是0就是1&#xff0c;返回全部由1组成的子矩阵的数量。 way&#xff1a; 假设我们遍历矩形的每一行&#xff0c;以当前遍历到的行作为地基&#xff0c;去看这一行的直方图&#xff08;直方图介绍 ->直方…

10.3.3 QGIS点类型注释(Annotation)的应用与二次开发实现

文章目录 前言注释(Annotation)图层QGis中的注释(Annotation)图层二次开发实现线段类型注释(Annotation)点类型Item 总结 前言 介绍注释(Annotation)图层在QGis中的使用以及二次开发的实现说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 注释(Annotation)…

【Unity实战100例】Unity声音可视化多种显示效果

目录 一、技术背景 二、界面搭建 三、 实现 UIAudioVisualizer 基类 四、实现 AudioSampler 类 五、实现 IAudioSample 接口 六、实现MusicAudioVisualizer 七、实现 MicrophoneAudioManager 类 八、实现 MicrophoneAudioVisualizer 类 九、源码下载 Unity声音可视化四…