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

openISP学习9-CSC-Color Space Conversion(色彩空间转换)

文章目录

    • 1.算法原理
      • BT.601 转换公式
    • 2.算法代码实现
    • 3.测试代码
      • 灰度图转YUV
      • 白点测试

到这一步就很好理解,记住简单的数学公式即可.
由于openISP的色彩空间转换只提供了,RGB转YUV的方法.实际上色彩空间的转换.还有RGB->HSV,RGB->YCrCb等等,感兴趣的自己问AI吧.

下面以RGB->YUV为例,一起来验证一下.

1.算法原理

将 RGB 图像转换为 YCbCr(YUV)色彩空间。Y 分量表示亮度,Cb/Cr 表示色度差,便于后续亮度和色度的独立处理(降噪、边缘增强等)。

  • Y(Luminance/Luma):代表明亮度,也就是我们常说的灰阶值。它反映了图像的明暗程度,相当于一幅灰色的图像。
  • U和V(Chrominance/Chroma):代表色度分量,用于描述影像的色彩和饱和度。

BT.601 转换公式

Y = 0.257R + 0.504G + 0.098B + 16 Cb = -0.148R - 0.291G + 0.439B + 128 Cr = 0.439R - 0.368G - 0.071B + 128

注:config.csv 中的系数已乘以 1024,实现时再除以 1024。

2.算法代码实现

实现细节

  • 使用 NumPy 广播运算,高效处理全图(向量化)
  • 中间类型uint32,防止 255×1024 ≈ 261120 溢出
  • 输出转uint8,有效范围 Y∈[16,235],Cb/Cr∈[16,240]

数学表达
这里由于下面测试代码使用的Q10的格式,每个像素都放大了1024,所以这里会除以1024,具体请看测试代码中是怎么做的.

[Y ] [csc[0,0] csc[0,1] csc[0,2]] [R] [csc[0,3]] [Cb] = [csc[1,0] csc[1,1] csc[1,2]] × [G] + [csc[1,3]] [Cr] [csc[2,0] csc[2,1] csc[2,2]] [B] [csc[2,3]] 结果 / 1024
classCSC:'Color Space Conversion'def__init__(self,img,csc):self.img=img self.csc=cscdefexecute(self):img_h=self.img.shape[0]img_w=self.img.shape[1]img_c=self.img.shape[2]csc_img=np.empty((img_h,img_w,img_c),np.uint32)# for y in range(img_h):# for x in range(img_w):# mulval = self.csc[:,0:3] * self.img[y,x,:]# csc_img[y,x,0] = np.sum(mulval[0]) + self.csc[0,3]# csc_img[y,x,1] = np.sum(mulval[1]) + self.csc[1,3]# csc_img[y,x,2] = np.sum(mulval[2]) + self.csc[2,3]# csc_img[y,x,:] = csc_img[y,x,:] / 1024csc_img[:,:,0]=self.img[:,:,0]*self.csc[0,0]+self.img[:,:,1]*self.csc[0,1]+self.img[:,:,2]*self.csc[0,2]+self.csc[0,3]csc_img[:,:,1]=self.img[:,:,0]*self.csc[1,0]+self.img[:,:,1]*self.csc[1,1]+self.img[:,:,2]*self.csc[1,2]+self.csc[1,3]csc_img[:,:,2]=self.img[:,:,0]*self.csc[2,0]+self.img[:,:,1]*self.csc[2,1]+self.img[:,:,2]*self.csc[2,2]+self.csc[2,3]csc_img=csc_img/1024self.img=csc_img.astype(np.uint8)returnself.img

3.测试代码

灰度图转YUV

我们知道RGB格式的灰度图各个通道分量都是一样的,所以Y分量完全可以理解为灰度值(或亮度分量)。

""" 测试目标: 1. 输出形状和 dtype 正确 2. BT.601 标准白点(R=G=B=255)的 Y 值接近 235 3. 纯灰(R=G=B)时 Cb 和 Cr 接近 128(色度中性) """def_bt601_csc(self):"""返回 BT.601 CSC 矩阵(×1024)。"""csc=np.zeros((3,4))csc[0,:]=[0.257*1024,0.504*1024,0.098*1024,16*1024]csc[1,:]=[-0.148*1024,-0.291*1024,0.439*1024,128*1024]csc[2,:]=[0.439*1024,-0.368*1024,-0.071*1024,128*1024]returncscdeftest_gray_chromacomponents_neutral(self):"""纯灰图像(R=G=B=128)Cb/Cr 通道应接近 128(±10)。"""img=make_rgb(8,8,r=128,g=128,b=128)csc_mat=self._bt601_csc()csc=CSC(img.copy(),csc_mat)out=csc.execute()cb_mean=float(out[:,:,1].mean())cr_mean=float(out[:,:,2].mean())print(f"cb_mean:{cb_mean},cr_mean:{cr_mean}")
  • 测试结果
    cb_mean:128.0,cr_mean:128.0

白点测试

这里同样创建一张各通道值为235的白色灰度图,经过bt601转换后,Y通道的亮度值为217,符合预期.

deftest_white_point_luma(self):"""白点(R=G=B=235)的 Y 值(BT.601 范围 16-235)应在合理范围内。"""img=make_rgb(4,4,r=235,g=235,b=235)csc_mat=self._bt601_csc()csc=CSC(img.copy(),csc_mat)out=csc.execute()y_val=float(out[:,:,0].mean())print(f"y_val:{y_val}")
  • 测试结果
    y_val:217.0
http://www.gsyq.cn/news/1494258.html

相关文章:

  • 从音频约束到自由掌控:eqMac如何重塑macOS系统级音频体验
  • 浙江控制手柄厂家排行:5家合规企业核心能力盘点 - 起跑123
  • 5个高效技巧:掌握Whisky在macOS上运行Windows应用的完整指南
  • 开发者如何通过Discord社区实现技术成长的完整指南:从入门到精通的终极路径
  • 雷达的基本原理 雷达工程导论:从物理边界到生存性设计
  • Python数据类型与运算符
  • 上海本地GEO优化公司推荐:2026年技术实力与服务能力全解析 - 品牌评测官
  • 抖音批量下载器完全指南:从零开始掌握高效无水印下载
  • 被忽略的隐藏技能:DABL-7606的3级低通滤波
  • 不只是解压包:用RDB工具逆向分析QQ影音皮肤,提取PNG和GIF资源
  • Emby高级功能本地化解锁技术实现与部署指南
  • 2026 东莞硅胶制品实力工厂测评 友航橡塑实力领衔 硅胶制品、硅胶模具、冰格、牙胶、硅胶宠物用品优质源头厂商精选榜单 - 变量人生001
  • 计算机毕业设计之django基于Python食堂订餐系统的设计与实现
  • GBase 8s V8.8 运维管理:认识一个环境变量NODEFDAC
  • 解锁高效设计工作流:Illustrator批量替换脚本ReplaceItems.jsx完整指南
  • 2026 年上海手表回收平台排名榜单实测,二掌柜收表凭什么脱颖而出 - 博客万
  • 翡翠品相分级与回收行情 南京本地变现实操手册 - 开心测评
  • AI 驱动的暗色模式自动生成:色彩对比度约束与感知一致性
  • 用Verilog HDL手把手教你搭建8-3编码器:从真值表到仿真波形全流程(附避坑点)
  • 5分钟快速上手:终极时间序列分析库完整实战指南
  • 深入Sa-Token登录流程:从RuoYi-Vue-Plus源码看token生成、会话续期与监听器机制
  • 告别Keil,用IAR for ARM 8.x给STM32F4建工程:一份给嵌入式老鸟的迁移指南
  • 别再到处找免费工具了!这3个无版权图片网站和4个PDF处理神器,设计师和办公党必备
  • Vite:前端开发的“光速“构建神器深度解析
  • Keyviz:实时键鼠可视化工具,提升教学演示与操作透明度
  • 2026管道疏通行业十大实力品牌:五家本土技术标杆企业的核心技术优势与实战案例深度解析 - 品牌发掘
  • 别再死记硬背了!用Python模拟数控‘逐点比较法’直线插补,5分钟搞懂核心原理
  • 数字化赋能杭州奢侈品回收店:耀辉打造线上线下一体化服务 - 奢侈品回收
  • CSS Grid 高级布局:子网格与容器查询单位的协同方案
  • 2026南通装修必看,全屋定制靠谱品牌推荐 - 高定