Новая мера пригодности для эволюционного моделирования сопоставления изображений

StackOverflow https://stackoverflow.com/questions/807034

Вопрос

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

Однако во всех примерах, которые я видел, используется довольно простое попиксельное сравнение, что приводит к довольно предсказуемому «затуханию» конечного изображения.Я ищу что-то более новое:Показатель приспособленности, который ближе к тому, что мы считаем «похожим», чем наивный подход.

Я не имею в виду конкретный результат - я просто ищу что-то более «интересное», чем значение по умолчанию.Предложения?

Это было полезно?

Решение

Я предполагаю, что вы говорите о чем-то вроде Программа Роджера Олсинга.

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

Попиксельное сравнение может оказаться дорогостоящим для любых изображений, кроме небольших.Например, используемое мной изображение размером 200x200 пикселей имеет размер 40 000 пикселей.Учитывая три значения на пиксель (R, G и B), это 120 000 значений, которые необходимо включить в расчет пригодности для одного изображения.В моей реализации я уменьшаю изображение перед сравнением, чтобы было меньше пикселей.Компромисс заключается в незначительном снижении точности развитого изображения.

При исследовании альтернативных фитнес-функций я наткнулся на несколько предложений по использованию Цветовое пространство YUV вместо RGB, поскольку это более тесно связано с человеческим восприятием.

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

Помимо этого, вы находитесь в сфере компьютерного зрения.Я ожидаю, что эти методы, основанные на извлечении признаков, будут более дорогими в расчете на изображение, но в целом они могут быть быстрее, если для достижения приемлемого результата потребуется меньше поколений.Возможно, вы захотите изучить Перцептуальная разница библиотека.Также, эта страница показывает некоторый Java-код, который можно использовать для сравнения изображений на предмет сходства на основе признаков, а не пикселей.

Другие советы

Показатель приспособленности, который ближе к тому, что мы считаем «похожим», чем наивный подход.

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

Я не видел такой демо-версии (возможно, вы могли бы дать ссылку).Но пара протоидей из вашего описания, которые могут вызвать интересную идею:

  • Три разных алгоритма, работающих параллельно, возможно, RGB или HSV.
  • Переместите, поверните или иным образом слегка измените целевое изображение во время бега.
  • Соответствие основано на разнице контрастности/значений между пикселями, но без знания фактического цвета.
  • ... затем "заполнить" один пиксель правильным цветом?

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

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

Обучение можно проводить в автономном режиме, поэтому проблем с производительностью во время выполнения не должно возникнуть.

После того, как вы обучили распознаватель образов, вы можете направить его на изображения популяции GA и получить некоторую скалярную оценку от распознавателей.

Лично мне нравится Радиальные базисные сети.Быстро обучается.Я бы начал со слишком большого количества входных данных и свел их к анализу принципиальных компонентов (IIRC).Результаты могут быть просто мерой сходства и мерой различия.

Одна последняя вещь;какой бы подход вы ни выбрали - могли бы вы написать об этом в блоге, опубликовать демо-версию или что-то еще;дайте нам знать, как у вас дела.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top