最小二乘法计算CCM

        

目录

        最小二乘法介绍

        带约束条件的最小二乘法

        计算法获取AB矩阵

        实拍法获取B矩阵       

        完全实拍获取AB矩阵

        总结


        在ISP通路里,有个CCM(Color Correction Matrix)模块,这个模块就是个3x3的矩阵,其目的就是将与设备相关的颜色空间,转到和设备无关的颜色空间。

        最小二乘法介绍

        这个模块可以用最小二乘法计算得到,先介绍下最小二乘法。

        其中,我们规定其中B为3xN的矩阵,A为3xN的矩阵,M为3x3矩阵。可以认为M为CCM矩阵,A为目标色卡RGB或XYZ值,B为camera的RGB值,N为色卡的数目,一般为24色卡或者SG色卡,由于CCM矩阵是3x3矩阵,所以,一般用24色卡即可。

        要想计算出M,则有

可得

         当然,ISP里的CCM模块,不仅仅是一个3x3矩阵,实际上,为了保证经过CCM之后,AWB的白点不变,即保证白还是白的,需要满足另一个条件,那就是必须保证CCM矩阵的行和为1。而用上面的公式得到的M并不会保证3x3的矩阵行和为1。

        带约束条件的最小二乘法

        所以,在求解的过程中需要加入约束条件。其推导过程如下(由于敲公式太费劲了,用手写的)。

这样就可以算出M矩阵,必然能够保证M矩阵的行和为1。

        计算法获取AB矩阵

        下面再介绍如何得到A矩阵和B矩阵,A矩阵我们当作是目标值,这个可以是CIE1931标准观察者空间得到RGB值,这个值和设备不相关了,对指定光源下,可以计算出其值

∫ρ (λ) *R(λ)*stdxyz(λ)

        该值是在XYZ空间,且还没做白平衡,所以需要使用色适应计算caMat,可以使用Branford或者CAT02计算,然后再转到sRGB色域或者P3色域,这样就能得到A矩阵。

而B矩阵是和camera相关的,如果能有相机的相应曲线,那么可以使用同样的方法,计算其值,

∫ρ (λ) *R(λ)*S (λ)

同样的,然后做白平衡,即可得到B矩阵。

那么整个计算流程如下图

        实拍法获取B矩阵       

        当然,有时,我们没法知道sensor的响应曲线,那么,可以采用实拍的数据,不过这样需要测环境光源曲线,要保证A矩阵里使用相同的光源曲线。

        那整个流程如下:

        完全实拍获取AB矩阵

        如果有竞品手机,可以在相同光源下,同时用两台手机对色卡进行拍照,从而获取到AB矩阵。整体流程如下:

        需保证照片的色域是相同的,不能一个sRGB,一个P3 AWB对齐;亮度对齐,饱和度对齐,都是竞品手机向调试手机对齐,AWB对齐是为了让得到的CCM不会带有倾向,不影响AWB,亮度对齐是为了,计算CCM时无亮度影响,更多的考虑颜色, 二次计算和饱和度对齐是为了色度优先,尽可能保证色相准确性,牺牲饱和度。

        总结

        这个过程是计算指定光源下的CCM矩阵,实际中,不同光源对应的CCM不同,所以需要计算出多种光源下的CCM矩阵,比方说,D65,LED5000K,TL84,AH等光源下,然后通过AWB计算出的白点色温,根据色温大小或者光源类型,选择对应的CCM矩阵,中间可以采用插值的方式,得到最终使用的CCM阵,只要不选错CCM,效果基本上不会差。 

        当然,由于CCM是3x3矩阵,是线性的,而sensor的响应曲线到人眼标准观察者空间是非线性的,所以,一般不能保证每个颜色都是准确的,也就是用对应的CCM矩阵算出各个色块的色差,某些色块的色差会比较大,还需要后处理模块来进行二次修正。

多项式拟合计算CCM的过程如下: 1. 首先,根据给定的样本数据,将自变量和因变量分别存储在数组X和Y中。 2. 使用numpy.polyfit()函数进行多项式拟合,设置最高次幂为所需的拟合阶数。该函数将返回一个一维数组,其中包含拟合的系数。 3. 使用np.polyval()函数,根据得到的拟合系数和自变量X,计算出拟合值Y',得到拟合曲线的坐标样本数据。 4. 如需对拟合曲线进行进一步分析,可以使用np.polyder()函数求导,得到多项式函数导函数的系数。 5. 如果需要求出多项式函数的根(与x轴交点的横坐标,即波峰波谷),可以使用np.roots()函数,给定多项式系数,求取根的横坐标。 6. 如果需要计算两个多项式函数的差函数(对应系数相减)的系数,可以使用np.polysub()函数,给定两个多项式函数的系数。 以上就是多项式拟合计算CCM的基本步骤和相关函数。请根据具体的问题和要求,结合具体的数据和情境来使用这些方法和函数进行计算和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [颜色校正CCM](https://blog.csdn.net/xiaoshuying/article/details/88842503)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [多项式模型与多项式拟合](https://blog.csdn.net/cjm_success/article/details/108063796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值