当前位置: 首页 > news >正文

图像处理 - 色彩空间转换

色彩空间转换的含义与原理

       色彩空间转换是指将一种颜色模型或表示方式中的颜色数据映射到另一种颜色模型中的过程。色彩空间(Color Space)本质上是一个三维坐标系统,每个点都表示图像中的某种颜色。在实际应用中,由于不同的色彩空间在不同的处理任务中具有不同的优势,因此色彩空间的转换被广泛应用于图像处理、计算机视觉、图像压缩、视频编码等领域。

       色彩空间的转换通常依赖于对颜色分量的加权和计算,具体的实现过程会依赖于原色彩空间和目标色彩空间的定义。转换的目的是简化或优化处理流程,通常是在不同的颜色感知特征和应用需求之间找到平衡。

示例图像

以下面的RGB图像作为示例:

                         图1  RGB示例图像 

常见的色彩空间及转换

下面是几种常见的色彩空间及其转换过程、表示含义和应用场景。

1、RGB色彩空间 

1.1、定义

    RGB色彩空间基于人眼的感知原理,它使用三种原色(红色、绿色、蓝色)作为颜色的基本成分。图像中的每个颜色可以通过RGB三个通道的强度值来表示,常用于显示设备如计算机屏幕、相机传感器等。

1.2、各通道表示

  • R:红色通道的强度
  • G:绿色通道的强度
  • B:蓝色通道的强度
  •                图2  R、G、B各通道图像
  • 如图2所示,为RGB图像中各个通道的图像。

        RGB色彩空间是最常见的色彩空间,用于显示设备。它的缺点是难以与人眼感知的色彩一致,因此在色彩处理(如色调、饱和度、亮度)时可能会有不方便之处。

1.3、应用场景

  • 显示设备(显示器、电视)
  • 摄像头图像采集
  • 数字图像处理

2、HSV色彩空间 

1.1、定义

      HSV色彩空间通过色相、饱和度和明度来表示颜色,具有更好的直观性,符合人类对颜色的感知方式。它常用于图像处理中的颜色提取、目标追踪、分割等任务。

​​

图3  HSV图像 

1.2、各通道表示

  • H:色相(Hue),表示颜色的种类或色调,通常用角度(0°到360°)表示。例如,0°表示红色,120°表示绿色,240°表示蓝色。
  • S:饱和度(Saturation),表示颜色的纯度,值为0到1。0表示灰色,1表示最纯的颜色。
  • V:明度(Value),表示颜色的亮度,值范围为0到1。0表示黑色,1表示最亮的颜色。

                 图4  H、S、V各通道图像 

1.3、转换过程

  • 计算RGB的最大值和最小值。
  • 计算亮度(V)为最大值。
  • 如果最大值和最小值相同(即图像为单色),则色调(H)为0,饱和度(S)为0。
  • 如果最大值和最小值不同,计算色调(H)和饱和度(S):
    • 计算差值(max - min)。
    • 计算饱和度(S)为(max - min)/ max。
    • 根据哪个颜色通道的值最大,确定色调(H)。

1.4、应用场景

  • 颜色分割(如基于颜色的物体识别)
  • 图像增强和修正(如调整图像的色调或饱和度)
  • 图像分析与计算机视觉

3、Lab色彩空间 

1.1、定义

      Lab色彩空间是基于国际照明委员会(CIE)提出的模型,目的是描述人类视觉感知到的颜色。Lab空间具有设备无关性,不依赖于显示设备或照明条件,因此常用于颜色管理和色彩匹配。

​​

           图5   LAB图像 

1.2、各通道表示

  • L:亮度(Lightness),表示颜色的明亮程度,范围从0到100。
  • a:红绿轴(从绿色到红色的范围),负值表示绿色,正值表示红色。
  • b:黄蓝轴(从蓝色到黄色的范围),负值表示蓝色,正值表示黄色。

                      图6  L、A、B各通道图像 

1.3、转换过程

  • 将RGB值标准化到[0, 1]范围内。
  • 使用以下公式将RGB转换为XYZ色彩空间:
    • X = 0.412453R + 0.357580G + 0.180423B
    • Y = 0.212671R + 0.715160G + 0.072169B
    • Z = 0.019334R + 0.119193G + 0.950227B
  • 将XYZ转换为Lab:
    • L = 116f(Y/Yn) - 16 (对于Y/Yn > 0.008856时,L = 116 * Y/Yn - 16,否则L = 903.3 * Y/Yn)
    • a = 500 * (f(X/Xn) - f(Y/Yn))
    • b = 200 * (f(Y/Yn) - f(Z/Zn))
    • 其中f(x)是辅助函数,对于x > 0.008856时,f(x) = x^(1/3),否则f(x) = (7.787x + 4/29)
    • Xn, Yn, Zn是XYZ色彩空间的白色参考点,通常是D65标准光源的值。

1.4、应用场景

  • 精确颜色匹配和色彩管理(例如在印刷和设计中)
  • 图像处理中的颜色差异检测
  • 高精度的图像质量控制

4、YCbCr色彩空间 

1.1、定义

      YCbCr色彩空间常用于视频编码、视频压缩及图像格式(如JPEG)。它将图像的亮度信息(Y)与色度信息(Cb和Cr)分离,这样可以优化图像存储和传输。

​​

  图7    YCbCr图像

1.2、各通道表示

  • Y:亮度(Luma),表示图像的亮度部分,通常取值范围为0到255。
  • Cb:蓝色差分量(Chrominance),表示蓝色与亮度的差异,通常为-128到+127。
  • Cr:红色差分量(Chrominance),表示红色与亮度的差异,通常为-128到+127。

               图8   Y、Cb、Cr各通道图像

1.3、转换过程

  • RGB -> YCbCr: 使用以下公式进行转换:
  • Y = 0.299R + 0.587G + 0.114B
  • Cb = -0.1687R - 0.3313G + 0.5B + 128
  • Cr = 0.5R - 0.4187G - 0.0813B + 128

1.4、应用场景

  • 视频压缩(如MPEG、H.264)
  • 图像编码(如JPEG)
  • 视频信号的处理与传输


总结

       色彩空间转换在图像处理和计算机视觉中有着广泛的应用。每种色彩空间的选择和转换都有其特定的用途和优势:

  • RGB:适合用于显示设备,易于理解,但不适合直接进行颜色分析。
  • HSV/HSL:更接近人眼对颜色的感知,适用于图像分割、目标追踪等应用。
  • Lab:设备无关,适用于高精度颜色管理和色彩匹配。
  • YCbCr:适用于视频压缩和编码,能有效减少数据量。

不同色彩空间间的转换能够帮助我们更好地处理和优化图像数据,使得图像分析和处理任务更高效。

% --- RGB 颜色空间立方体 ---
subplot(2, 2, 1);
[X, Y, Z] = ndgrid(linspace(0, 1, 10), linspace(0, 1, 10), linspace(0, 1, 10));
scatter3(X(:), Y(:), Z(:), 50, [X(:), Y(:), Z(:)], 'filled');
xlabel('R (Red)');
ylabel('G (Green)');
zlabel('B (Blue)');
title('RGB 颜色空间');
axis([0 1 0 1 0 1]);
grid on;% --- HSV 颜色空间立方体 ---
subplot(2, 2, 2);
% 将 RGB 转换为 HSV,并取值范围 [0, 1]
[H, S, V] = ndgrid(linspace(0, 1, 10), linspace(0, 1, 10), linspace(0, 1, 10));
% 将 H, S, V 合并为 MxNx3 的矩阵,符合 hsv2rgb 函数的要求
HSV = cat(4, H, S, V);
HSV = reshape(HSV, [], 3); % 将其变为 Mx3 矩阵
% 使用 hsv2rgb 转换
rgb = hsv2rgb(HSV);
% 显示转换后的 RGB 值
scatter3(H(:), S(:), V(:), 50, rgb, 'filled');
xlabel('H (Hue)');
ylabel('S (Saturation)');
zlabel('V (Value)');
title('HSV 颜色空间');
axis([0 1 0 1 0 1]);
grid on;% --- LAB 颜色空间立方体 ---
subplot(2, 2, 3);
% 创建 LAB 空间,L 在 [0, 100] 范围内,a 和 b 在 [-128, 128] 范围内
[L, a, b] = ndgrid(linspace(0, 100, 10), linspace(-128, 128, 10), linspace(-128, 128, 10));
% 将 LAB 数据合并为 Mx3 矩阵
LAB = cat(4, L, a, b);
LAB = reshape(LAB, [], 3); % 转换为 Mx3 矩阵
% 将 LAB 转换为 RGB 用于显示
rgb = lab2rgb(LAB);
scatter3(L(:), a(:), b(:), 50, rgb, 'filled');
xlabel('L (Lightness)');
ylabel('a (Green-Red)');
zlabel('b (Blue-Yellow)');
title('LAB 颜色空间');
axis([0 100 -128 128 -128 128]);
grid on;% --- CIELAB 颜色空间立方体 ---
subplot(2, 2, 4);
% CIELAB 与 LAB 实际上是相同的,因此使用相同的数据
% 在这个例子中,我们直接使用 LAB 空间,显示的是 CIELAB 立方体
scatter3(L(:), a(:), b(:), 50, rgb, 'filled');
xlabel('L (Lightness)');
ylabel('a (Green-Red)');
zlabel('b (Blue-Yellow)');
title('CIELAB 颜色空间');
axis([0 100 -128 128 -128 128]);
grid on;% 调整整体布局
sgtitle('不同颜色空间的 3D 立方体');

相关文章:

图像处理 - 色彩空间转换

色彩空间转换的含义与原理 色彩空间转换是指将一种颜色模型或表示方式中的颜色数据映射到另一种颜色模型中的过程。色彩空间(Color Space)本质上是一个三维坐标系统,每个点都表示图像中的某种颜色。在实际应用中,由于不同的色彩空…...

MariaDB面试题及参考答案

什么是 MariaDB? MariaDB 是一个开源的关系型数据库管理系统,它是 MySQL 数据库的一个分支。它的主要目的是存储和管理数据,采用了关系模型,数据存储在表中,表之间可以通过关联建立关系。 从起源来讲,Maria…...

PostgreSQL常用字符串函数与示例说明

文章目录 coalesce字符串位置(position strpos)字符串长度与大小写转换去掉空格(trim ltrim rtrim)字符串连接(concat)字符串替换简单替换(replace)替换指定位置长度(overlay)正则替换(regexp_replace) 字符串匹配字符串拆分split_part(拆分数组取指定位置的值)string_to_array…...

力扣第58题:最后一个单词的长度

力扣第58题是 最后一个单词的长度,具体要求是给定一个字符串,找到其最后一个单词的长度。 题目描述 输入:一个由字母和空格组成的字符串 s,可以包含大小写字母和若干空格。 输出:最后一个单词的长度。 注意&#xf…...

【Maven】Nexus几个仓库的介绍

在 Nexus 仓库管理器中,maven-central、maven-public、maven-releases 和 maven-snapshots 是常用的 Maven 仓库类型。每个仓库都有其特定的用途和功能。以下是对这些仓库的详细介绍: 1. maven-central 类型:代理仓库(Proxy Rep…...

SSH免密登陆

一、生成SSH密钥对 在客户端主机 ClientHost上,以 root用户身份生成SSH密钥对: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" # -t rsa:指定使用RSA算法 # -b 4096:指定密钥长度为4096位 # -C ""…...

【Linux】Namespace

一、概念 Linux Namespace 是 Linux 内核提供的一种特性,用于对系统资源进行隔离。通过 Namespace,不同的进程组可以拥有独立的系统资源视图,即使它们在同一台物理机器上运行。这种隔离机制使得容器技术成为可能,因为它允许在单个…...

SQLite 和 MySQL语法区别

SQLite 和 MySQL 在 SQL 语法上有一些差异,这些差异主要体现在数据类型、函数、表和索引的管理等方面。以下是一些主要的不同之处: 1. 数据类型 SQLite 支持的数据类型包括:TEXT, INTEGER, REAL, BLOB。动态类型系统,允许在插入…...

基于BERT的命名体识别(NER)

基于BERT的命名实体识别(NER) 目录 项目背景项目结构环境准备数据准备代码实现 5.1 数据预处理 (src/preprocess.py)5.2 模型训练 (src/train.py)5.3 模型评估 (src/evaluate.py)5.4 模型推理 (src/inference.py) 项目运行 6.1 一键运行脚本 (run.sh)6…...

华为云鸿蒙应用入门级开发者认证考试题库(理论题和实验题)

注意:考试链接地址:华为云鸿蒙应用入门级学习认证_华为云鸿蒙应用入门级开发者认证_华为云开发者学堂-华为云 当前认证打折之后是1元,之后原价700元,大家尽快考试!考试题库里面答案不一定全对,但是可以保证…...

SpringBoot+React养老院管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.入住合同文件上传2.添加和修改套餐的代码3.查看入住记录代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootReact框架开发的养老院管理系统。首先…...

使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题

在日常开发项目中 使用element-plus 中表格中使用 el-image的点击图片出现图片预览 会出现以下问题 表格一行会覆盖预览的图片 鼠标滑过也会显示表格 el-image 的预览层级和表格的层级冲突导致的。 解决方法:有两种一种是直接使用样式穿透 第二种推荐方法 使用官网推…...

python读取Oracle库并生成API返回Json格式

一、安装必要的库 首先,确保已经安装了以下库: 有网模式 pip install flask pip install gevent pi install cx_Oracle离线模式: 下载地址:https://pypi.org/simple/flask/ # a. Flask Werkzeug-1.0.1-py2.py3-none-any.whl J…...

音视频入门基础:MPEG2-TS专题(5)——FFmpeg源码中,判断某文件是否为TS文件的实现

一、引言 通过FFmpeg命令: ./ffmpeg -i XXX.ts 可以判断出某个文件是否为TS文件: 所以FFmpeg是怎样判断出某个文件是否为TS文件呢?它内部其实是通过mpegts_probe函数来判断的。从《FFmpeg源码:av_probe_input_format3函数和AVI…...

每天10个vue面试题(九)

1、如何在组件中批量使用Vuex的getter属性? 使用mapGetters辅助函数, 利用对象展开运算符将getter混入computed 对象中computed:{ ...mapGetters([total,discountTotal]) } 2、vue2和vue3的区别? 双向数据绑定不同:vue2 的双向数据绑定…...

Jenkins的环境部署

day22 回顾 Jenkins 简介 官网Jenkins Jenkins Build great things at any scale The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. 用来构建一切 其实就是用Java写的一个项目…...

八、鸿蒙开发-网络请求、应用级状态管理

提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、网络请求1.1 申请网络访问权限1.2 安装axios库1.2.1 配置环境变量1.2.2 第二步&…...

经验笔记:Git 中的远程仓库链接及上下游关系管理

Git 中的远程仓库链接及上下游关系管理 1. 远程仓库的链接信息 当你克隆一个远程仓库时,Git 会在本地仓库中记录远程仓库的信息。这些信息包括远程仓库的 URL、默认的远程名称(通常是 origin),以及远程仓库中的所有分支和标签。…...

Paint 学习笔记

目录 ippaint 外扩对象 LCM_inpaint_Outpaint_Comfy: 不支持文字引导 ippaint https://github.com/Sanster/IOPaint 外扩对象 https://www.iopaint.com/models/diffusion/powerpaint_v2 GitHub - open-mmlab/PowerPaint: [ECCV 2024] PowerPaint, a versatile …...

Jenkins修改LOGO

重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…...

kafka是如何做到高效读写

消息持久化: Kafka 将消息存储在磁盘上,并且通过顺序写入的方式提高写入性能。 消息被追加到日志文件的尾部,避免了随机写操作,从而提高了写入速度。零拷贝技术:利用操作系统的零拷贝特性,数据可以从磁盘直…...

Intern大模型训练营(九):XTuner 微调实践微调

本节课程的视频和教程都相当清晰,尤其是教程,基本只要跟着文档,在开发机上把指令都相同地输出一遍,就可以完成任务(大赞),相当顺利。因此,这里的笔记就不重复赘述步骤,更…...

从一次java.io.StreamCorruptedException: invalid stream header: 48656C6C 错误中学到的调试思路

问题场景: 在项目中,我试图使用 Java 的 ObjectInputStream 反序列化一个对象。代码逻辑看似简单:读取字节流,将其转为 Java 对象。然而,程序抛出了以下异常: java.io.StreamCorruptedException: invalid…...

树莓派的发展历史

树莓派(Raspberry Pi)是由英国的树莓派基金会开发的一系列单板计算机,其目标是为了促进计算机科学教育,同时提供廉价的计算机硬件平台。 1. 诞生背景与初代模型(2006-2012) 背景:树莓派的概念起…...

K8S containerd拉取harbor镜像

前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI,这里用containerd拉取 参考文档 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins.…...

Ubuntu 环境下通过 Apt-get 安装软件

操作场景 为提升用户在云服务器上的软件安装效率,减少下载和安装软件的成本,腾讯云提供了 Apt-get 下载源。在 Ubuntu 环境下,用户可通过 Apt-get 快速安装软件。对于 Apt-get 下载源,不需要添加软件源,可以直接安装软…...

vue使用List.forEach遍历集合元素

需要遍历集合对其每个元素进行操作时,可以使用forEach方法 1.语法:集合.forEach ( 定义每一项 > 定义每一项都要进行的逻辑 ) 2、使用场景: //例如需要给每个员工的工资数量加1000this.personList.forEach(item>item.salary100…...

ROM修改进阶教程------安卓14去除修改系统应用后导致的卡logo验证步骤 适用安卓13 14 安卓15可借鉴参考

上期的博文解析了安卓14 安卓15去除系统应用签名验证的步骤解析。我们要明白。修改系统应用后有那些验证。其中签名验证 去卡logo验证 与可降级安装应用验证等等的区别。有些要相互结合使用。今天的博文将对修改系统应用后卡logo验证做个步骤解析。 通过博文了解💝💝�…...

苹果macbook,MacOS 11,12,13,14,15 跳过监管锁(配置锁)

第一步:进入恢复模式 长按电源键关机,再长按开机进入恢复模式。(M,Intel芯片方法不同) 第二步:复制代码 右上角联网,打开Safari,地址栏输入http://i7q.cn/61NWfQ。复制以下命令&am…...

【YOLOv8】安卓端部署-2-项目实战

文章目录 1 准备Android项目文件1.1 解压文件1.2 放置ncnn模型文件1.3 放置ncnn和opencv的android文件1.4 修改CMakeLists.txt文件 2 手机连接电脑并编译软件2.1 编译软件2.2 更新配置及布局2.3 编译2.4 连接手机 3 自己数据集训练模型的部署4 参考 1 准备Android项目文件 1.1…...

网站重构工程师/抖音seo关键词排名技术

网的翻译是使用断言抛出指定异常,当我觉得他这里更应该指的是 Pytest 断言错误类型# 使用raise在测试方法中指定异常的类型,这点和java还是蛮像的呢,具体示例如下: import pytestdef myfunction():raise IOError("指定异常…...

wordpress 下载安装/如何优化网站推广

转自 http://blog.csdn.net/jiedushi/article/details/12003171 Fluentd是一个开源收集事件和日志系统,它目前提供150扩展插件让你存储大数据用于日志搜索,数据分析和存储。 官方地址http://fluentd.org/ 插件地址http://fluentd.org/plugin/ Kibana 是…...

重庆商家网站/谷歌应用商店

教育 -分子生物学-章节资料考试资料-中南大学【】 基因的概念与结构 测验 1、【判断题】原核生物的结构基因是不连续的。 A、正确 B、错误 参考资料【 】 原核生物基因组 测验 1、【判断题】原核生物基因组的编码区小于非编码区。 A、正确 B、错误 参考资料【 】 真核生物基因组…...

镇江企业做网站/学生个人网页制作代码

[关键字]:后缀数组 字符串 [题目大意]:给定n 个字符串,求出现或反转后出现在每个字符串中的最长子串。 // [分析]:和前几道题一样的做法,先见字符串和它反转后的串连在一起并用不同的字分割(小于原串的任意…...

阿里巴巴网站怎么设计师/推广排名

导读 国内有庞大的仓储物流从业人员队伍,很多人想深入了解WMS与TMS究竟是什么。本文详细解析WMS与TMS的选型与实施。 WMS实施(上) 和其它软件项目的实施大同小异,王二整理了WMS选型和上线过程中容易被忽略的10大误区。 1、过分…...

企业网站开发课程培训/免费b站软件推广网站

启动服务器的方法如果您已经确定了用来运行服务器的账号,则可以选择安排怎样启动服务器。可以从命令行手工运行,或在系统启动过程中自动运行服务器。有三种启动服务器的主要方法:直接调用mysqld。这或许是最小的命令方法。除了说明mysqld –h…...