1

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

先解释一下:

在我拍摄的一些图像中,我有每个像素的 RGB 矩阵。

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

如何使用这 3 个已知的 RGB 来使用最小二乘法,以便准确地获得原始图像颜色?

第二个解释:

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

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

红圈-> [241 25 13]

绿色圆圈-> [12 239 41]

蓝色圆圈-> [35 28 237]

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

现在红圈是 [229 42 32]

绿色圆圈-> [24 241 42]

蓝色圆圈-> [29 26 230]

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

所以我的输入是:

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

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

所以该功能必须修复图片中的所有RGB,

对于我之前的例子:

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

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

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

所以,如果我拍摄并得到一个 RGB 为 [142, 124, 211] 的苹果,我想用他的 RGB 运行函数并获得这个苹果的真实颜色。

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

4

1 回答 1

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将是从输入颜色到所需输出颜色的所需线性变换。不过,这只是一个模型,由您决定这是否是一个特别适合颜色的模型。我确信在颜色校准方面有很多工作,但我并没有声称知道这一点。

还要记住,这/不是正常的划分。基本上是 Matlab 过载Out * inv(In)。它实际上比这多一点。有关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仍然有效,猜猜它用什么来解决它?有效地最小二乘。

于 2012-06-08T21:25:14.490 回答