用于校准RGB的Matlab最小二乘法

时间:2012-06-08 17:15:44

标签: matlab colors rgb least-squares

我解释了我的问题两次因为我的英语不好:/

首先解释:

我拍摄的某些图像中的每个像素都有RGB矩阵。

此外,我有3个像素的RGB,我知道它们的实际值(在我拍照后,像素的RGB值因光而改变)。

如何使用这3种已知的RGB才能使用最小二乘法,这样才能准确地获得原始图像颜色?

第二个解释:

我必须用相机拍一些苹果的照片。 如果我在我的房间和街道上拍摄相同的苹果,我会得到与苹果颜色不同的图像,尽管这些苹果是相同的。这是因为街上的灯光不是我房间里的灯光。

为了解决这个问题,我想在苹果附近放置三个我知道RGB的圆圈(红色,绿色和蓝色)。例如,我有3个圈子:

红圈 - > [241 25 13]

绿色圆圈 - > [12 239 41]

蓝色圆圈 - > [35 28 237]

现在,我将用三个圆圈拍摄苹果。我知道我的3个圆圈的RGB发生了变化:

现在红圈是[229 42 32]

绿色圆圈 - > [24 241 42]

蓝色圆圈 - > [29 26 230]

现在,有了这些信息(3个圆圈的输入和输出RGB),我想修复所有图像的颜色(苹果和3个圆圈)。

所以我的输入是:

(三个圆圈的初始RGB,我拍摄后这些圆圈的RGB)

并且输出必须是函数:(R,G,B) - > (新R,新G,新B)。

因此该函数必须修复图片中的所有RGB,

我以前的例子:

红色圆圈[229 42 32]将改为原来的[241 25 13]

绿色圆圈[24 241 42] - > [12 239 41]

蓝色圆圈[29 26 230] - > [35 28 237]

所以,如果我拍摄并获得一个带有[142,124,211] RGB的苹果,我想用他的RGB运行该功能并获得这个苹果的真实颜色。

有人告诉我,我可以使用最小二乘法。

1 个答案:

答案 0 :(得分:4)

你可以这样做:

In = [   229    24    29
          42   241    26
          32    42   230  ];

Out = [  241    12    35
          25   239    28
          13    41   237 ];

然后计算:

A = Out / In;   

A将是从输入颜色到所需输出颜色的所需线性转换。这只是一个模型,你可以决定这是否是一个特别好的颜色。我确信在色彩校准方面有很多工作,但我没有声称知道这一点。

另请注意/不是正常的划分。它基本上是Out * inv(In)的Matlab重载。它实际上比这更多。有关详细信息,请参阅help mrdivide

然后,要应用新的线性变换,请将A应用于彩色图像。对于给定的输入像素inrbg = [ R ; G ; B ];,您将计算

  outrgb = A * inrgb;

你可以将它应用于整个图像。

不幸的是,你会得到一些超出允许强度范围的值,你必须把它们放回去。这是另一个迹象,纯粹的线性模型不一定是伟大的。至少这会让你有个好的开始。

还有一件事,我上面写的并没有明确使用最小二乘法,但是如果你对颜色输入和输出有更多的估计,比如

>> InN = [In randn(size(In))+In];  % just an example to get more columns, don't use this
>> InN

InN =

  229.0000   24.0000   29.0000  228.2382   25.2329   28.9302
   42.0000  241.0000   26.0000   41.3748  240.6159   26.5301
   32.0000   42.0000  230.0000   32.2829   42.0552  229.3372

>> OutN = [Out randn(size(Out))+Out]; % just an example to get more columns, don't use this
>> OutN

OutN =

  241.0000   12.0000   35.0000  241.1487   10.8441   33.8811
   25.0000  239.0000   28.0000   25.3679  240.0666   27.0684
   13.0000   41.0000  237.0000   12.1927   41.2091  236.9066

然后这个A = OutN / InN仍然可以工作并猜测它用于解决它的用途?有效的最小二乘。