Я пытаюсь понять, как создать упрощение на лету входящих значений RGB.
Я пытаюсь написать приложение для Android, которое использует просмотр камеры в реальном времени и образцы цветов. Я разработал, как обнаруживать и сохранять отдельные значения цвета, но моя цель - упростить эти входящие значения, используя четкие диапазоны.
Пример: когда мы обнаруживаем Firebrick Red 178,34,34, он распознает это значение в пределах заранее определенного диапазона, определенного как Red, и будет преобразован в простое 255,0,0 при сохранении цвета.
Приложение создается как единое целое. Если кто-то читал руководство, в котором описывается процесс, это было бы идеально, чтобы я мог узнать, что происходит и как это достигается. Я в тупике.
Заранее благодарю за любую помощь.
Так что проблема в том, что трудно определить, что такое «красный». Дело не только в том, что разные люди имеют разные определения, разные культуры также имеют влияние (некоторые культуры не считают красный и желтый разные цвета. На самом деле, по крайней мере, в одной племенной культуре, которая все еще существует сегодня, нет слова для цвета. См. https://www.sapiens.org/language/color-perception/) от того, что мы думаем о цветах. Так что делать это всегда лучше всего.
Одна простая вещь, которую вы можете сделать, - это просто использовать алгоритм наименьшей разницы. Имейте набор цветовых эталонов и посмотрите, какая из них имеет наименьшую разницу между ней и цветом, который вы ищете. Затем относитесь к нему как к эталонному цвету. Это вроде как сработает. Если в вашем наборе достаточно цветов, чтобы не заходить слишком далеко.
Это только сработает, хотя на самом деле rgb не одинаково различимы для человеческого глаза, и некоторые различия имеют большее значение, чем другие - его нелинейность. Разница в 10 в зеленом цвете важнее, чем в красном. Разница в 10 в диапазоне [0,20] может быть более или менее существенной, чем разница в 10 в диапазоне [100,120]. Если вам нужно, чтобы это работало действительно хорошо, вам может потребоваться поговорить с кем-то, кто изучал цвет и то, как работает человеческий глаз, чтобы придумать собственный алгоритм. Когда-то мы работали над принтерами, и у нас были группы экспертов, которые выясняли, как цифровые цвета относятся к чернилам. Здесь почти то же самое.
Я придерживаюсь значений RGB. Итак, красный = 225,0,0. Люди могут видеть этот цвет по-разному, но идея заключается в том, что приложение считывает значение цвета так, как его видит камера, и с помощью диапазона определяет, что бледно-красный все еще остается красным, поскольку его значение rgb попадает в диапазон, и поэтому по умолчанию оно равно 225, 0,0. Конечный результат не печатается, он просто добавляется в память приложения в виде красного счетчика.
@JensenWilder За исключением того, что это не так. Это самая высокая интенсивность красного канала. Это не «красный», потому что «красный» цвет не определен четко. И если бы вы показали дюжину различных разновидностей красного с примесью зеленого и синего, люди на самом деле выбрали бы один из них как «красный», а не чисто красный. Это часть трудностей того, что вы пытаетесь сделать. Вот почему, если вы хотите сделать это хорошо, а не с плохим приближением, вам нужно поговорить с людьми, которые это изучили.
Как и в статье, которую я опубликовал (которую вы должны прочитать) - есть большие группы людей, которые не думают, что красный и желтый - разные цвета, и у них нет физических дефектов, таких как дальтонизм. Когда вы имеете дело с аморфной концепцией, очень трудно точно решить, что такое красный, а что на самом деле другого цвета.
Я понимаю тебя. 255,0,0 не является «красным» для человека, потому что человек может определять многие оттенки как красный, но 255,0,0 - это значение rgb для красного, которое я устанавливаю как красный в приложении. То, на что вы указываете, - это именно то, что я хочу, чтобы приложение сделало очень простую оценку цвета, на которое оно указывает, и решило (как это сделал бы человек), что любой оттенок красного, на который он смотрит, считывает запись rgb значение 255,0,0 независимо.
Идея состоит в том, что я не хочу, чтобы приложение отображало оттенок и приближало значение rgb и записывало это значение. Я хочу, чтобы он посмотрел на цвет, зарегистрировал значение rgb, например 178,34,34, а затем проконсультировался, где это значение находится в заданном диапазоне. Если он попадает в диапазон, который я установил для 'красного' (между 255,0,0 - 255,204,204), тогда он игнорирует обнаруженное значение rgb и записывает цвет как 255,0,0
Я полностью понимаю, что кто-то, использующий приложение, укажет ему на то, что, по их мнению, является их представлением о красном цвете, а значение rgb скажет, что он желтый, но это другое препятствие. На данный момент я просто хочу упростить значение rgb. После того, как все оттенки цветов упростятся до их базовых диапазонов, я смогу изучить способы настройки отображения для людей с дальтонизмом или, возможно, не согласных с используемыми названиями цветов. НО на данный момент любой человек (дальтоник или нет), наводящий цифровую камеру на цвет, получит тот же результат с кодировкой rgb. Камера записывает цвета в универсальном цифровом формате.
@JensenWilder Верно. И я хочу сказать, что 1: чтобы выяснить эти диапазоны, вам более или менее понадобится десятилетие в науке о цвете. 2: эти диапазоны зависят от культуры. 3: эти диапазоны зависят от использования цвета и контекста других цветов вокруг него. То, что вы пытаетесь сделать, на самом деле очень сложно. Вроде тезис на уровне сложности.
Нет, каждый человек, наводящий камеру на цвет, не получит одинакового значения RGB. Даже такая мысль показывает, что вы не понимаете, как работают цифровые камеры и сколько алгоритмов сглаживания используются поверх них, или как влияет свет на цвет.
Приложение типа Color grab (детектор цвета) на телефоне Android. Он записывает цвета с изображения, а затем я передаю его другу, и они делают то же самое (при условии, что свет и все другие переменные одинаковы), и они получат другое значение ... Я очень сомневаюсь в этом. Послушайте, я думаю, вы НАМНОГО слишком усложняете идею. Привлечение теории культуры и цвета к вопросу о наведении камеры, записи приблизительного значения rgb и последующем преобразовании этого значения в другое значение с использованием диапазона в качестве ключа. Я не могу перетащить это в чат, слишком низкий рейтинг. Спасибо за попытку помочь.
@JensenWilder И, сделав такие вещи профессионально, я ЗНАЮ, что то, что вы пытаетесь сделать, даст действительно дерьмовые результаты, потому что вы не хотите слушать.
У меня три утки. Каждая утка разного цвета, но все они утки. Я, как человек, смотрю на этих уток и идентифицирую их как уток. Я направляю приложение на этих уток, и оно говорит DUCK1 DUCK2 DUCK3, потому что все они имеют разные значения. Я говорю приложению видеть Duck1-3 как DUCK. Задача решена. Приложение теперь смотрит на DUCK1 и говорит DUCK. Приложение не показывает изображение каких-либо уток никому из людей, оно просто записывает уток, которых видит как УТКА, независимо от того, кто на что указывает. Если есть ошибки, ничего страшного, но моя проблема решена.
@JensenWilder Как ни странно, ваша аналогия, компьютерное зрение, сейчас является одной из самых сложных проблем в мире. Отнесение чего-либо к категории уток требует от специалистов по искусственному интеллекту огромного труда. Вы действительно показываете свое невежество.
И если вы не собираетесь показывать данные людям, почему приложение это делает? Потому что он каким-то образом будет использовать эту информацию. И в зависимости от того, как он использует эту информацию, эти диапазоны будут сильно отличаться. Это отчасти объясняет, почему эту проблему трудно решить правильно.
Просто метафора, помогающая объяснить. На самом деле интересует только то, как сделать так, чтобы входящее значение обнаруживалось внутри диапазона и выводилось как установленное значение в соответствии с этим диапазоном. Никаких настоящих уток не просматривают. Камера просто указывает на цвет, регистрирует значение RGB, а затем это значение проверяется и преобразуется в упрощенный RGB. Неважно, какой цвет, по мнению пользователя, отсканирован, или что он означает в культурном отношении. Падающий свет просто распознается датчиком, учитывая значение RGB, а затем оно преобразуется. Если вы не можете предложить способ помочь, ничего страшного. Хорошего дня.
Если вам действительно нужна помощь в сравнении чего-то с диапазоном - я предлагаю изучить курс «Введение в программирование». Это буквально один оператор if с одним логическим оператором. Если вы действительно ищете цветовую классификацию, вы упрощаете задачу до такой степени, что полезные результаты невозможны.
У меня проблемы с получением и использованием текущих значений, а не статических записанных значений.
Это не имеет ничего общего с намерение камеры Android.