Каков наилучший способ анализа цветов на изображении (Java)?
У меня нет большого опыта в анализе изображений, поэтому я решил спросить у более просвещенных людей:)
По сути, я хочу проанализировать изображение и определить, какие цвета наиболее распространены (очевидно, это будут средние значения).
Кто-нибудь знает эффективный способ сделать это? Если это вообще возможно, я бы хотел избежать использования сторонних библиотек, но все будет рассмотрено, по крайней мере.
Как я уже сказал, у меня нет большого опыта в анализе изображений, поэтому, пожалуйста, будьте терпеливы со мной, если я не правильно понимаю ваши ответы!
Я пробовал Google, но, похоже, нет ничего похожего на то, что мне нужно. Может быть, мой Google-Fu сегодня просто недостаточно хорош.
Я очень ценю любые советы, которые вы, ребята, могли бы дать!
Спасибо том
3 ответа
Примерное представление о том, как вы могли бы сделать это:
Вы могли бы использовать java.awt.image.PixelGrabber
получить двумерный массив RGB-целых с изображения, пиксель за пикселем.
Когда этот массив заполнен, вы можете выполнять сортировку по своему усмотрению (звучит так, как будто это будет занимать много памяти), а также выполнять простые функции для их упорядочения, подсчета и т. Д.
Тогда вы могли бы посмотреть на java.awt.Color
и, используя Color(int, int, int)
конструктор, создайте прямоугольники с этими цветами (в качестве визуальных заполнителей) с количеством появлений под ним.
Чтобы получить шестнадцатеричные значения для цвета, вы можете использовать строку следующим образом:
String rgb = Integer.toHexString(color.getRGB());
rgb = rgb.substring(2, rgb.length());
(подстрока необходима, иначе вы получите 8 символов)
Надеюсь, что это приведет вас на правильный путь!
Ресурсы: Цветовой класс, Класс изображения
Я знаю, что вы пытаетесь избежать сторонних библиотек, но посмотрите на OpenCV. У них есть кое-что хорошее по обработке и анализу изображений. Может быть, это может работать для вас.
Рассмотрим "цветной куб" с RGB вместо XYZ. Разделите куб на подкубы, но сделайте так, чтобы они все перекрывали друг друга. Убедитесь, что они все одинакового размера. Легко запомнить / вычислить шаблон куба, который будет проходить от 0-127, 64-191, 128-255 во всех направлениях, что дает в общей сложности 27 кубов. Для каждого куба найдите, какие цвета на изображении попадают в них.
По мере того, как вы будете делать кубы все меньше и меньше, результаты будут меняться все меньше и меньше и станут сходиться в самых популярных цветовых диапазонах. Как только вы получите эту конвергенцию, возьмите среднее значение диапазона, чтобы получить "фактический цвет".
Это примерно столько деталей, сколько я могу рассказать о том, как мой босс зависает на ферме:-)