通过取消背景检测红绿蓝

时间:2012-10-10 15:22:31

标签: matlab image-processing

我有连续的图像采集,并在相机的背景(面向相机)上有白纸

由于房间内使用的灯泡导致输出为GREEN,因此仅具有白色背景的图像会产生绿蓝色调,以下代码

 green = im(:,:,2);
   red = im(:,:,1);
   if sum( green(:)) > sum(red(:))
       disp('green');
   else
       disp('red');
   end

有没有办法CANCEL白皮书背景只处理将放在相机前面的颜色对象?

Color对象将是RED,GREEN和BLUE正方形

1 个答案:

答案 0 :(得分:1)

您测试绿色或红色的方式存在根本缺陷 - 您需要使用合适的阈值来寻找主色,否则您将得到误报。 E.g。

threshold = 0.7;   % determine a suitable threshold empirically
blue = sum(sum(im(:,:,3)));
green = sum(sum(im(:,:,2)));
red = sum(sum(im(:,:,1)));
total = red + green + blue;
if (red / total > threshold)
    disp("red");
elseif (green / total > threshold)
    disp("green");
elseif (blue / total > threshold)
    disp("blue");
else
    disp("indeterminate colour");
end