Отметить неопределенные цвета и образец не присутствует в системе подбора цветов - PullRequest
0 голосов
/ 27 августа 2018

С помощью цветового датчика я сопоставляю пластиковые образцы цветов с заранее определенной палитрой цветов в массиве, используя подход Евклидово расстояние (ближайшее расстояние).Когда цвет идентифицирован, линейный привод перемещается.Это хорошо работает, даже для довольно похожих пастельных цветов.

Однако, как мне кодировать те ситуации, когда 1. образец цвета не находится перед датчиком или 2. цвет отсутствует в массиве?Мне нужно сгенерировать сообщение «Нет образца» (1.) или «Не найдено совпадений» (2.), и привод не должен двигаться в обоих случаях.

Как и сейчас, когда образец не закончилсяДатчик, код находит ближайший эквивалент из окружающего освещения, и привод перемещается (1.), когда несоответствующий образец находится над датчиком, код находит ближайший эквивалент, и привод перемещается (2.).В обоих случаях ничего не должно происходить, кроме вывода сообщений, упомянутых выше.

Спасибо за некоторые подсказки!

const int SAMPLES[12][5] = { // Values from colour "training" (averaged raw r, g and b; averaged raw c; actuator movement)
  {8771, 6557, 3427, 19408,  10},
  {7013, 2766, 1563, 11552,  20},
  {4092, 1118, 1142,  6213,  30},
  {4488, 1302, 1657,  7357,  40},
  {3009, 1846, 2235,  7099,  50},
  {2650, 3139, 4116, 10078,  60},
  { 857,  965, 1113,  2974,  70},
  { 964, 2014, 2418,  5476,  80},
  {1260, 2200, 1459,  5043,  90},
  {4784, 5898, 3138, 14301, 100},
  {5505, 5242, 2409, 13642, 110},
  {5406, 3893, 1912, 11457, 120}, // When adding more samples no particular order is required
};

byte findColour(int r, int g, int b) {

  int distance = 10000; // Raw distance from white to black (change depending on selected integration time and gain)
  byte foundColour;

  for (byte i = 0; i < samplesCount; i++) {

    int temp = sqrt(pow(r - SAMPLES[i][0], 2) + pow(g - SAMPLES[i][1], 2) + pow(b - SAMPLES[i][2], 2)); // Calculate Euclidean distance

    if (temp < distance) {

      distance = temp;

      foundColour = i + 1;

    }

  }

  return foundColour;

}

1 Ответ

0 голосов
/ 27 августа 2018

Когда цвет присутствует или отсутствует в таблице, можно определить расстояние наилучшего соответствия.Если его расстояние превышает определенное пороговое значение, верните некоторое значение, которое указывает «не найдено», например, -1 или 255.

Также сохраните все, что датчик обнаруживает без образца (во время калибровки), и когда этонаилучшее совпадение затем возвращает некоторое значение, которое указывает «нет образца», например, 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...