数字图像处理(c++ opencv):彩色图像处理-彩色基础与彩色模型

embedded/2024/11/22 12:30:05/

彩色图像基础

颜色特性:亮度、色调、饱和度

  • (1)亮度:即强度,如灰度值

  • (2)色调:混合光波中的主导光波属性,即被观察者感知的主导色。如描述一个物体为红色,就是这个物体的色调为红色。

  • (3)饱和度:指相对的纯度,或与一种色调混合的白光量。比如深红色(红色+白色)和淡紫色(紫色+白色)是不饱和的,白色越多,越不饱和。

色度:色调+饱和度,颜色可以由亮度+色度来表征

彩色图像模型

常见的彩色图像模型有:

  • (1)RGB(红、绿、蓝):一般用于彩色显示器和彩色摄像机;

  • (2)CMY(青、深红、黄)和CMYK(青、深红、黄、黑):一般用于彩色打印;

  • (3)HSI(色调、饱和度、亮度):描述和解释颜色;

RGB和HSI之间的相互转换

从RGB到HSI

H色调分量的计算:
在这里插入图片描述
S饱和度分量计算:在这里插入图片描述
I 亮度分量计算:
在这里插入图片描述
备注:上面的转换公式假设图像的RGB值归一化到[0, 1]区间,得到的HSI结果值也在区间[0, 1]。

python">def RGB2HSI(img1):img1 = img1.astype('float32')b, g, r = img1[:, :, 0]/255.0, img1[:, :, 1]/255.0, img1[:, :, 2]/255.0I = (r+g+b)/3.0tem = np.where(b >= g, g, b)minValue = np.where(tem >= r, r, tem)S = 1 - (3 / (r + g + b)) * minValuenum1 = 2*r - g - bnum2 = 2*np.sqrt(((r - g) ** 2) + (r-b)*(g-b))deg = np.arccos(num1/num2)H = np.where(g >= b, deg, 2*np.pi - deg)resImg = np.zeros((img1.shape[0], img1.shape[1],img1.shape[2]), dtype=np.float)resImg[:, :, 0], resImg[:, :, 1], resImg[:, :, 2] = H*255, S*255, I*255resImg = resImg.astype('uint8')return resImg
从HSI到RGB(值区间与(1)相同[0, 1])

前提:在将HSI转换为RGB时,需要先通过H色调值进行判断,然后使用不同的公式:

  • 即将H值乘360°,将值从[0, 1]转换到[0, 360],然后进行分类:

  • RG扇区(H在[0, 120]):

B蓝色分量计算:
在这里插入图片描述
R红色分量计算:
在这里插入图片描述
G绿分量计算:
在这里插入图片描述

GB扇区(H在[120, 240]):

首先将H减去120:
在这里插入图片描述
然后转换到RGB:
在这里插入图片描述
BR扇区(H在[240, 360]):

首先将H减去240:
在这里插入图片描述
然后计算RGB值:
在这里插入图片描述

python">def HSI2RGB(img):H1, S1, I1 = img[:,:,0]/255.0, img[:,:,1]/255.0, img[:,:,2]/255.0B = np.zeros((H1.shape[0], H1.shape[1]), dtype='float32')G = np.zeros((S1.shape[0], S1.shape[1]), dtype='float32')R = np.zeros((I1.shape[0], I1.shape[1]), dtype='float32')H = np.zeros((H1.shape[0], H1.shape[1]), dtype='float32')for i in range(H1.shape[0]):for j in range(H1.shape[1]):H = H1[i][j]S = S1[i][j]I = I1[i][j]   if (H >=0) & (H < (np.pi * (2/3))):B[i][j] = I*(1-S)R[i][j] = I * (1 + ((S*np.cos(H))/np.cos(np.pi * (1/3) - H)))G[i][j] = 3*I - (B[i][j]+R[i][j])elif (H >= (np.pi * (2/3))) & (H < np.pi * (4/3)):R[i][j] = I*(1-S)G[i][j] = I * (1 + ((S*np.cos(H - np.pi * (2/3)))/np.cos(np.pi * (1/2) - H)))B[i][j] = 3*I - (G[i][j]+R[i][j])elif (H >= (np.pi * (2/3))) & (H < (np.pi * 2)):G[i][j] = I*(1-S)B[i][j] = I * (1 + ((S*np.cos(H - np.pi * (4/3)))/np.cos(np.pi * (10/9) - H)))R[i][j] = 3*I - (G[i][j]+B[i][j])img = cv2.merge((B*255, G*255, R*255))img = img.astype('uint8')return img

http://www.ppmy.cn/embedded/139625.html

相关文章

三、计算机视觉_06YOLO基础知识

1、YOLO概述 1.1 定义 YOLO&#xff08;You Only Look Once&#xff09;是一种流行的对象检测和图像分割模型&#xff0c;由华盛顿大学的 Joseph Redmon 和 Ali Farhadi 于 2015 年推出&#xff0c;因其高速和准确性而迅速受到欢迎 在目标检测领域&#xff0c;传统方法&…

前端常用内容

Style 1. 文本左对齐 style"text-align: left;" 2. 文本居中 style"text-align: center;" 3. 文本右对齐 style"text-align: right;"margin 属性可以设置以下四种类型的外边距&#xff1a; 1. 单一值&#xff1a;为所有四个方向&#xff08;上、…

鸿蒙学习高效开发与测试-应用程序框架和HarmonyOS SDK(3)

文章目录 1、应用程序框架1、规范化后台进程管理2、原生支持分布式3、支持多设备的统一窗口管理4、 组件共享及面向对象5、逻辑与界面解耦6、灵活扩展机制2、HarmonyOS SDK1、 开放能力 Kit2、开放能力的检索和使用3、 方舟工具链4、前端编译器架构1、应用程序框架 应 用 程 序…

InnoDB存储引擎对MVCC的实现

MVCC 是一种并发控制机制&#xff0c;用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。它是通过在每个数据行上维护多个版本的数据来实现的。当一个事务要对数据库中的数据进行修改时&#xff0c;MVCC 会为该事务创建一个数据快照&#xff0c;而不是直接修改实际…

探索PDFMiner:Python中的PDF解析利器

文章目录 **探索PDFMiner&#xff1a;Python中的PDF解析利器**1. 背景介绍&#xff1a;为何选择PDFMiner&#xff1f;2. PDFMiner是什么&#xff1f;3. 如何安装PDFMiner&#xff1f;4. 简单库函数使用方法4.1 提取文本4.2 获取页面布局信息4.3 提取表格数据4.4 提取图像 5. 应…

C++不完整类型(Incomplete Type)的检测与避免

目录 1.引言 2.为什么使用不完整类型&#xff1f; 3.C默认删除器default_delete 4.boost库中checked_delete 5.总结 1.引言 在C中&#xff0c;类型有Complete type和Incomplete type之分&#xff0c;对于Complete type, 它的大小在编译时是可以确定的&#xff0c;而对于In…

【Patroni官方文档】复制模式

Patroni 使用 PostgreSQL 的流复制。有关流复制的更多信息,请参阅 Postgres 文档。Patroni 默认将 PostgreSQL 配置为异步复制。选择哪种复制模式取决于业务需求。请研究异步和同步复制以及其他高可用性(HA)解决方案,以确定哪种解决方案最适合您。 异步模式的持久性 在异…

5、AI测试辅助-生成测试用例思维导图

AI测试辅助-生成测试用例思维导图 创建测试用例两种方式1、Plantuml思维导图版本 (不推荐&#xff09;2、Markdown思维导图版本&#xff08;推荐&#xff09; 创建测试用例两种方式 完整的测试用例通常需要包含以下的元素&#xff1a; 1、测试模块 2、测试标题 3、前置条件 4、…