Задать вопрос

Как классифицировать изображения по цвету?

Сейчас буду писать про реальный бытовые предметы.
У меня черный стол.
Фото этого стола можно сделать отдельно, что бы понимать какие там цвета.

Есть 4 фотографии:
Зеленое яблоко на черном столе.
Зеленое яблоко на черном столе но крупным планом
Банан на столе
Банан на столе но крупным планом

Нужно загрузить эти фотографии на сервер должен сгруппировать фотографии по цветовому признаку.
т.е. алгоритм должен каким-то образом отличить яблоки от бананов.

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

Может кто-нибудь подкинуть идею в каком направлении двигаться?
Первое что в голову приходит это взять черный стол разбить его на массив цветов + добавить какую-то магию что бы понять его диапазоны оттенков. получится массив = [черный, серый, светло-серый, ярко-черный]

Потом берем фотографию огурца и разбиваем его на такой же массив, из массива удаляем все оттенки которые у нас первом массиве. получили оттенки яблока, например = [зеленый, темно-зеленый, белый(блики), и т.д.]

и так далее.
В итоге мы сможем понять примерную принадлежность предметов к своей категории.
Но как по мне тут в алгоритме все очень плохо((

Яблоко крупным планом и яблоко на столе может давать разные цвета.

так же буду рад библиотекам для работа с цветами , всяческие фильтры для изображений и т.д.
пока нашел только это gka.github.io/chroma.j
  • Вопрос задан
  • 956 просмотров
Подписаться 6 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
DollyPapper
@DollyPapper
Можно взять массив цветов, и сканировать фотку. Для начала выявить минимальный цвет огурца, максимальный цвет огурца, затем тоже самое с бананом, как это сделать уже другой вопрос, допустим в каком нибудь фш, взять минимальный зеленый цвет на каритнке и максимально зеленый и заполнить все промежуточные цвета например по принципу цветового круга он же Color Wheel. Затем пропустить эту фотку с уже известными диапозонами, нашелся в картинке цвет из массива диапозонов цветов огурца?Заносим данный цвет в массим огурец. Дальше смотрим сколько чисел от общего числа значений диапозона цветов имеется в массиве огурец, определяем для себя порог(либо по каким нибудь формулам), сколько нужно совпадений чтобы однозначно сказать что это огурец. Делаем тоже самое с бананом, затем сравним опять же, банан с огурцом, сколько цветов банана совпало с диапозоном цветов огурца. И получим нечто вроде: Банан это гурец?Нет, значит это банан. Огурец это банан? Нет, значит это огурец.
Ествественно тяжело будет однозначно сказать огурец это, или зеленое яблоко, но сильно отличающиеся овощи и фрукты мы отличить сможем. Даже если темные участке на огурце, типа теней или шума будут так же относится к массиву цветов стола, их будет недостаточно чтобы сказать, что это стол, главное определить порог общей массы, сколько нужно совпадений чтобы сказать что это огурец. Допустим если меньше 80% то это не огурец. Естественно для красных, желтых, синих, etc. предметов нужно опять же настраивать.Решение дубовое и скорее всего идиотское, но может подкинет вам идею. Удачи!
Ответ написан
Комментировать
Virel
@Virel
цифровой художник
К ответу DollyPapper добавлю, что можно использовать только те цвета, которые не являются тенью или бликом. Т.е. отсеивать слишком тёмные и слишком светлые оттенки, беря средний по светлоте. Тогда мы в идеале должны получить локальный цвет предмета. И вот в этом случае огурец, яблоко и банан будут различны. Так как у огурца холодный и темноватый цвет, у яблока фактически светлый, ближе к салатовому, ну а у банана жёлтый. Хотя, конечно любой способ будет недейственным, если фото будет при неправильном освещении... Освещение будет вообще основным фактором...
Но предугадать освещение тоже возможно. Тогда нужно сначала выполнять проверку на общий оттенок фотографии. Например, свет ли обычной лампы - желтит, дневного света - холодит и т.д. Как-то так...)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы