【问题标题】:The RGB vectors for white and red color are same for this image (Matlab)此图像的白色和红色 RGB 向量相同(Matlab)
【发布时间】:2017-04-05 12:42:52
【问题描述】:

我在 Matlab 中使用这张图片来检测圆圈的颜色。这是一张 512 x 512 的 jpeg 图像。

我正在使用 imfindcircles 找到圆心,然后我正在使用每个圆心附近的一些点的 R、G、B 分量来检测颜色。

但是,我很困惑,因为对于红色和白色圆圈,我发现 R、G、B 分量是相同的 [239 227 175]。

我是图像处理的新手,所以谁能解释一下这里实际发生了什么。

【问题讨论】:

  • 您必须向我们展示一些实际代码....我猜您选择的是米色背景像素(因为索引不正确)而不是实际的圆圈
  • 你在外面采样。那是背景的颜色
  • 不要把你的代码放在pastebin上,编辑你的问题并添加到这里(通过缩进格式化)!

标签: matlab image-processing


【解决方案1】:

imfindcirclescenters output 给出了 x/y 坐标中的中心坐标,您需要使用行/列坐标对图像进行索引,因此在索引到图片

centers = imfindcircles(IM);

center1 = IM(centers(1,2), centers(1,1),:);
center2 = IM(centers(2,2), centers(2,1),:);

您可能没有这样做,因为您取而代之的是从背景中采样像素,这显然会导致质心的 RGB 值相同。

更新

实际的问题似乎是您将质心的位置转换为uint8 以使其成为整数值,以便您可以将其用作索引。 uint8 可表示的最大整数是 255 并且图像中的行数和列数大于 255(质心也是如此),因此它们将被截断为 255 导致错误的像素采样。

而不是使用uint8,只需使用round 将质心四舍五入到最接近的整数

cX = round(centers(n_c,1));
cY = round(centers(n_c,2));

【讨论】:

  • @cgb 你是如何创建cF_EDGE的?
  • cf_EDGE 由 edge() 函数返回,这部分工作,因为我已经成功检测到圆圈。
  • @cgb 在调用edge 之前,您是否首先将图像转换为灰度?或者是什么?请出示您的完整代码
  • 是的,好的。我正在格式化我的完整代码并向您展示。
  • @cgb 更新了真正的问题
猜你喜欢
  • 2013-06-23
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
相关资源
最近更新 更多