Группировка цветов RGB для блока NXT

Я пытаюсь написать расширение в netlogo для кирпича Nxt. Для подключения кирпича я использую Lejos. У меня проблема с датчиком цвета. Я хочу написать простой метод, который возвращает цвет датчика в виде числа, такого как желтый: 1, красный: 2 и т. д. Но двигатель датчика всегда возвращает разные цвета RGB на одной и той же поверхности. Например, я положил его на желтую бумагу, цвета RGB: [236 189 104], [247 202 108].. если бы он возвращал уникальные числа RGB для одинаковых цветов поверхности, я бы классифицировал их в соответствии с диапазоном цветов RGB и дал уникальный номер для каждого цвета. У вас есть идеи, как я могу это сделать? Кроме того, он не будет работать на разных поверхностях. Мне будет достаточно сделать это только для моих цветов бумаги (желтый, синий, зеленый). Спасибо.


person Ecrin    schedule 22.05.2012    source источник


Ответы (1)


Если я правильно понял, что вы имеете в виду, метод java.awt.Color.RGBtoHSB может вам помочь. Такой Java-код:

float[] hsb = Color.RGBtoHSB(red, green, blue, null);  
float hue = hsb[0];

(где red, green и blue переменные, содержащие результат датчика)

... даст вам "оттенок" вашего цвета как float между 0 и 1, которого должно быть достаточно, чтобы увидеть, является ли это оттенком желтого, синего, зеленого или чего-то еще, если вы определите соответствующие диапазоны. Это должно быть очень приблизительно примерно так:

Yellow: 0.1  < hue < 0.2
Blue:   0.5  < hue < 0.7
Green:  0.25 < hue < 0.45

... но не верьте мне на слово! Вы должны поэкспериментировать, чтобы увидеть, в каком диапазоне остается ваш сенсор, когда он находится над желтой бумагой и т. д.

person Nicolas Payette    schedule 23.05.2012
comment
Спасибо, Николас. Используя диапазон оттенков и различия rgb каждого цвета, я решил свою проблему. - person Ecrin; 28.05.2012