2010-07-13 2 views
0

У меня нет большого опыта в анализе изображений, поэтому я думал, что попрошу более просвещенных людей :)Каков наилучший способ анализа цветов в изображении (Java)?

В основном, что я хочу сделать, это проанализировать изображение и разработать наиболее распространенные цвета (это будет быть средними).

Кто-нибудь знает об эффективном способе сделать это? Если это вообще возможно, я бы хотел избежать использования каких-либо сторонних библиотек, но все будет рассмотрено как минимум.

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

Я пробовал Google, но похоже, что ничего похожего на то, что мне нужно. Может быть, мой Google-Fu просто не достаточно хорош сегодня.

Я бы очень признателен за любые указания, которые вы, ребята, могли бы дать!

Спасибо, Том

+0

@ Justian: не в этих деталях: P – Beardy

+0

Интересный oO. Где вы живете? EDIT: Ах. ВЕЛИКОБРИТАНИЯ. Попался.Я иногда заканчиваю тем, что писал цвет вместо цвета, потому что именно так я вырос. Однако европейская кровь - не Великобритания. Круто! Извините за время выживания: P –

ответ

1

Рассмотрим "цветной кубик" с RGB вместо XYZ. Разделите куб на субкубы, но сделайте их перекрытыми. Убедитесь, что они имеют одинаковый размер. Легко запомнить/вычислить куб-шаблон будет тот, который идет от 0-127, 64-191, 128-255 во всех направлениях, делая в общей сложности 27 кубов. Для каждого куба найдите, какие цвета в изображении попадают в них.

Как вы делаете кубы все меньше и меньше, результаты будут меняться все меньше и начнут сходиться в самых популярных цветовых диапазонах. После того, как вы достигнете этой конвергенции, возьмите среднее значение диапазона, чтобы получить «фактический цвет».

Это примерно так же подробно, как я могу пойти в с моим боссом парит вокруг cubefarm :-)

+0

Я думаю, что это похоже на лучший способ сделать это до сих пор. Я читал об этом методе на другом веб-сайте (для немного другой цели), и я думаю, что часть привлекательности - это просто звуки круто: P Я все еще хотел бы попробовать несколько разных методов и посмотреть, что дает лучшие результаты, но спасибо в любом случае, я попробую сначала :) – Beardy

2

примерное представление о том, как вы могли бы быть в состоянии сделать это:
Вы можете использовать java.awt.image.PixelGrabber, чтобы захватить 2D-массив из RGB-объектов из изображения, пиксель за пикселем.

После этого массив заполняется, вы можете пройти и сортировки, как вы (звучит, как он будет много памяти), а также выполнять простые функции, чтобы упорядочить их, сосчитать и т.д.

Тогда вы можно посмотреть на java.awt.Color и, используя конструктор Color(int, int, int), создать поля с этими цветами (как визуальные заполнители) с количеством появлений, появляющихся под ним.

Чтобы получить шестнадцатеричные значения для цвета, вы можете использовать строку следующим образом:

String rgb = Integer.toHexString(color.getRGB()); 
    rgb = rgb.substring(2, rgb.length()); 

(подстрока необходима, в противном случае вы получите 8 символов)

Надеется, что это получает вас на правильный путь!

Ресурсы: Color Class, Image Class

1

Я знаю, что вы пытаетесь избежать сторонние библиотеки, но сделать посмотрите на OpenCV. У них есть хороший материал w.r.t манипуляции и анализа изображений. Возможно, это может сработать для вас.

 Смежные вопросы

  • Нет связанных вопросов^_^