如何使用24块色卡估算和应用色彩校正矩阵?

时间:2017-10-03 14:53:53

标签: matlab opencv

我有一个24块色卡,我试图用所述色卡估算捕获图像的色彩校正矩阵。我使用$ git pull origin master From github.com:hansaurusrex/destroytheworld * branch master -> FETCH_HEAD fatal: refusing to merge unrelated histories $ --allow-unrelated-histories -bash: --allow-unrelated-histories: command not found 方法手动估算了CCM并且没有产生理想的结果。应用least squares后,有些图像会出现奇怪的阴影 我仔细检查了我的代码,但无法发现任何故障。我正在寻找任何基于opencv / matlab或任何开源实现,我可以提供捕获的颜色值和实际颜色值,它可以为我计算和应用CCM,以确保它是否是我的实现有问题或最小二乘法不是很有效。

  

注意:我之前没有对图像应用任何线性化   应用CCM。请建议任何可以快速获得的资源   测试

PS:以下是用于估算和应用色彩校正矩阵(CCM)的MATLAB代码

CCM

这里是我如何将CCM应用于图像

% calc 3x3 correction matrix
ccm = MactAll * MrawAll' * inv(MrawAll * MrawAll') % MactAll is the 3x24 matirx of actual color card values and MrawAll is the 3x24 matrix of captured color card values

以下是我的结果:

原始图片 enter image description here

更正图像

enter image description here

2 个答案:

答案 0 :(得分:1)

您正在使用的色彩校正模型在这里有详细描述:

https://www.informatik.hu-berlin.de/de/forschung/gebiete/viscom/thesis/final/Studienarbeit_Behringer_201308.pdf

这也可以在c ++ opencv中完成。你必须确定等式:

 [p1' p2' ... pn' ] = M * [ p1 p2 ... pn]
         P'         = M *        P

p1',... pn'是期望值(如果在XYZ颜色空间中更好),p1,... pn是检测到的实数值,M是3x3变换矩阵。

您可以按如下方式解决该系统:

M = P * P'.inv(CV_SVD)

答案 1 :(得分:0)

优化中使用的RGB样本应该是线性的。首先通过在图像上调用rgb2lin来撤消伽玛校正。

您还需要将CCM应用于线性RGB值。因此,使用rgb2lin撤消图像中的伽马校正,应用CCM,然后使用lin2rgb重新应用伽马校正。