Matlab中RGB图像中红色,绿色,蓝色的比例

时间:2014-08-23 22:24:28

标签: matlab image-processing

考虑我使用

将图像转换为RGB
imrgb=cat(3,image1,image2,image3)

默认情况下,我会获得完整的绿色图像。但是,如果我将image1乘以2然后颜色变为红色,我也可以为其他通道执行此操作。现在我的问题是有任何算法找到这些数字应该乘以红色,绿色和蓝色通道来获得我想要的图像,并假设我知道我想要的图像。

1 个答案:

答案 0 :(得分:0)

可能你的问题是每个频道都没有规范化(具有不同的动态范围)。

关于您的问题:是的。如果您知道所需的图像,那么您需要找到的是3个乘法常数(每个通道一个)。如果您的图像大小为100x100,那么您拥有10,000个线性数学方程式,其中包含3个未知数。这很容易解决。事实上,你只需要3个像素来生成3个方程,解决它们就可以检索你的常数。标准解决方案是通过SVD(奇异值分解)实现的最小平方误差。

如果你不知道你想要的图像而不是快速而肮脏的方式,只需重新规范化3个通道中的每个通道,然后再将它们连接到RGB。 例如:img1。找到最小值和最大值(用min,max表示)并将像素的每个值更改为(v-min)/(max-min)*255。为3个通道中的每个通道执行此操作,而不是连接。这将解决您遇到的问题,即每个通道的动态范围不同。然而,这不是完美的解决方案。它适用于自然图像,但当图像中的白平衡偏移时(太阳落山,太阳升起,游泳池,植被等图像)可能会产生错误的结果。