Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 背景消除法检测红、绿、蓝_Matlab_Image Processing - Fatal编程技术网

Matlab 背景消除法检测红、绿、蓝

Matlab 背景消除法检测红、绿、蓝,matlab,image-processing,Matlab,Image Processing,我有连续的图像采集,在相机的背景上有一张白纸(面对相机) 由于房间中使用了灯泡,仅具有白色背景的图像产生了蓝绿色色调,这导致以下代码的输出为绿色 green = im(:,:,2); red = im(:,:,1); if sum( green(:)) > sum(red(:)) disp('green'); else disp('red'); end 是否有任何方法可以取消白皮书背景,以便仅处理将放置在相机前面的彩色对象 颜色对象将

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

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

 green = im(:,:,2);
   red = im(:,:,1);
   if sum( green(:)) > sum(red(:))
       disp('green');
   else
       disp('red');
   end
是否有任何方法可以
取消
白皮书背景,以便仅处理将放置在相机前面的彩色对象


颜色对象将为红色、绿色和蓝色方块

测试绿色或红色的方式存在根本性缺陷-您需要使用合适的阈值查找主色,否则会出现误报。例如

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

你测试绿色或红色的方式根本上是有缺陷的——你需要使用合适的阈值来寻找主色,否则你会得到误报。例如

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

如果是静止物体,测量环境颜色,然后从初始颜色读数中减去它。如果是静止物体,测量环境颜色并从初始颜色读数中减去它的值。我应该考虑什么阈值??<代码> Red?/Soo/<代码>的结果是一个数组,我们如何与阈值进行比较?这是一个整数?抱歉-匆忙编写未经测试的代码——它意在说明一个概念,而不是一个现成的代码片段。-希望现在已经修好了。正如评论中所说,您需要根据经验确定阈值,因为它取决于您的特定系统。从0.7开始,看看它是如何运行的……在你提出最初的概念后,我尝试了类似的方法。然而,在我的例子中,我发现阈值的范围从一种颜色到另一种颜色,所以我尝试使用阈值的范围,而不是编写一个大于条件。谢谢你的帮助。我想取消背景(白色背景有绿色阴影)是我目前需要的。你能帮我解决这个问题吗?我想你不能随便取任何阈值。可能有一些了解图像阈值的过程,例如,创建或绘制图像直方图,选择阈值是直方图中两个最大峰值之间的最小点。在什么基础上,我应该考虑阈值??<代码> Red?/Soo/<代码>的结果是一个数组,我们如何与阈值进行比较?这是一个整数??抱歉-草草编写未经测试的代码。这是为了说明一个概念,而不是一个现成的代码片段——希望它现在已经修复了。正如评论中所说,您需要根据经验确定阈值,因为它取决于您的特定系统。从0.7开始,看看它是如何运行的……在你提出最初的概念后,我尝试了类似的方法。然而,在我的例子中,我发现阈值的范围从一种颜色到另一种颜色,所以我尝试使用阈值的范围,而不是编写一个大于条件。谢谢你的帮助。我想取消背景(白色背景有绿色阴影)是我目前需要的。你能帮我解决这个问题吗?我想你不能随便取任何阈值。可能有一些了解图像阈值的过程,例如创建或绘制图像的直方图,并选择阈值作为直方图中两个最大峰值之间的最小点。