Matlab:检测规则形状物体中的交替颜色

时间:2019-03-04 21:36:26

标签: matlab computer-vision

我有一个类似于以下内容的对象:

enter image description here

在此图像中,我想说的是,从上到下,我希望能够输出“紫色,红色,紫色,红色,紫色,红色,紫色”。

现在,这是我引起的一般症状(如上图所示):

  1. 主要对象并非总是沿清晰的轴定向。它可以是垂直的,水平的,也可以介于两者之间的任何位置。
  2. 紫色永远是主要背景
  3. 红色将是叠加层
  4. 覆盖层的定义不会像电阻上的电阻带那样清晰。如本例所示,它将更加嘈杂。

我能想到的唯一方法是在染色体上划一条线,然后拾取那条线发出的颜色,就像条形码扫描仪一样。但是,我想以一种完全不受监督的方式进行操作。

我该怎么做?我正在尝试在Matlab中执行此操作。

这是我当前的尝试使用PCA作为建议答案之一的代码:

rgbImage = label2rgb(temp);
[rows, columns, numberOfColorBands] = size(rgbImage);

redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
listOfRGBValues = double(reshape(rgbImage, rows * columns, 3));
coeff = pca(listOfRGBValues);
transformedImagePixelList = listOfRGBValues * coeff;
pca1Image = reshape(transformedImagePixelList(:,1), rows, columns);
pca2Image = reshape(transformedImagePixelList(:,2), rows, columns);
pca3Image = reshape(transformedImagePixelList(:,3), rows, columns);

但是,此代码受this file的启发,不允许我“沿主轴长度移动”以读取颜色。

1 个答案:

答案 0 :(得分:1)

有趣的问题。首先,您可以使用PCA查找斑点的主轴。然后,您可以沿主轴移动并测量颜色的变化。我建议使用诸如HSV或HSL之类的颜色空间而不是RGB,因为这些空间会改变亮度,但不会改变其他维度的颜色,而RGB会使亮度和颜色变幻。然后,您将获得如下图:

red:                      x xx          xx xx
between red and purple:    x    xx   x    x
purple:                           xxx xx

中值过滤可以帮助保留红色或紫色段中的离群值,同时保留过渡区域。然后,您可以进行K均值聚类,找到红色和紫色的2个值。但是,在聚类之前,我会抛弃异常值。您可能还需要两个以上的群集。