Ваша задача - создать программу, которая берет черно-белое контурное изображение (примеры изображений ниже) и заполняет его цветом. Вы сами решаете, как разделить каждый регион и каким цветом его заполнить (вы даже можете использовать ГСЧ).
Например:
Как вы можете видеть, я явно превосходный художник, когда дело доходит до MS Paint.
счет
Это конкурс популярности, поэтому победит ответ с наибольшим количеством голосов. Избирателям предлагается судить ответы по
- Критерий ввода: любое изображение, состоящее из белого / светло-серого фона и черных / темно-серых контуров
- Как хорошо окраска сделана; это означает, что мало или вообще нет областей белого цвета в отличие от вышеупомянутого (если вы явно не собираетесь использовать белый цвет, например, для облаков)
- Настраиваемость цветов, используемых в определенных разделах
- Насколько хорошо система работает на разных изображениях (с разной детализацией)
- Опишите, сколько времени занимает ваша программа для каждого изображения. Возможно, мы не играем в гольф-код, но более короткий, быстрый и эффективный код следует рассматривать как лучший
- Необходимо вывести новое изображение либо на экран, либо в файл (не более 2 МБ, чтобы его можно было отобразить в ответе)
- Пожалуйста, объясните, почему вы выбрали вывод на этот тип изображения и прокомментируйте / объясните работу вашего кода
- Применимость цвета, используемого для соответствующей формы, с которой он связан (реалистичная цветовая схема, т.е. трава зеленая, деревянные заборы коричневые и т. Д.)
«Я мог бы произвольно раскрасить каждую область, но если бы я мог определить« забор »и сделать его одинаково окрашенным, то это то, что заслуживает голосов». - Натан Меррил
Видя , как это является конкурс популярности, вы можете также необязательно судить по:
- Общая привлекательность (насколько хорошо выглядит изображение)
- Художественный талант; если вы можете программировать в оттенках или акварели и т. д.
Как правило, выигрывает самое маленькое изображение (размер файла) высочайшего качества с ускоренной программой и самым высоким публичным голосованием.
Если у вас есть другие судейские спецификации, которые, по вашему мнению, следует использовать, пожалуйста, порекомендуйте их в комментариях к этому посту.
Примеры
У меня ничего нет; Все примеры изображений имеют лицензию Creative Commons.
Источник: https://pixabay.com/ro/stejar-arbore-schi%C5%A3%C4%83-natura-303890/ Источник: http://www.freestockphotos.biz/stockphoto/10665 Источник: http: / /crystal-rose1981.deviantart.com/art/Dragon-Tattoo-Outline-167320011 Источник: http://jaclynonacloudlines.deviantart.com/art/Gryphon-Lines-PF-273195317 Источник: http://captaincyprus.deviantart.com / art / Dragon-OutLine-331748686 Источник: http://electric-meat.deviantart.com/art/A-Heroes-Farewell-280271639 Источник: http://movillefacepalmplz.deviantart.com/art/Background-The-Pumpkin -Farm-оф-Good-старый-Days-342865938
РЕДАКТИРОВАТЬ: из-за сглаживания на линиях, которые вызывают не черные / белые пиксели и некоторые изображения, которые могут содержать серый вместо черного / белого, в качестве дополнительной проблемы вы можете попытаться справиться с этим. Это должно быть достаточно легко, на мой взгляд.
источник
Ответы:
Спектральная аэрография (Python, PIL, scipy)
Это использует сложный математический алгоритм, чтобы произвести красочную чепуху. Алгоритм связан с алгоритмом Google PageRank, но для пикселей вместо веб-страниц.
Я выбрал этот подход, потому что думал, что в отличие от методов, основанных на заливке, он может справиться с изображениями, такими как курица и дерево, где есть формы, которые не полностью заключены в черные линии. Как вы можете видеть, это своего рода работает, хотя он также имеет тенденцию окрашивать в разных частях неба в разные цвета
Для математически мыслящих: то, что он делает, это по существу построение графа смежности пикселей в изображении, а затем поиск 25 верхних собственных векторов графа Лапласа. (За исключением того, что это не совсем так, поскольку мы включаем темные пиксели, мы просто придаем их соединениям меньший вес. Это помогает бороться с сглаживанием, а также, по-видимому, дает лучшие результаты в целом.) Найдя собственные векторы, он создает случайная линейная комбинация их, взвешенная по их обратным собственным значениям, для формирования RGB-компонентов выходного изображения.
В интересах времени вычислений, перед тем как все это сделать, изображение уменьшают, затем снова увеличивают, а затем умножают на исходное изображение. Тем не менее, он не работает быстро, на моей машине от 2 до 10 минут, в зависимости от входного изображения, хотя по какой-то причине курица заняла 17 минут.
На самом деле, возможно, можно превратить эту идею во что-то полезное, создав интерактивное приложение, в котором вы сможете контролировать цвет и интенсивность каждого из собственных векторов. Таким образом, вы можете исчезать те, которые делят небо на разные части, и исчезать в тех, которые выбирают соответствующие функции изображения. Но я не собираюсь делать это сам :)
Вот выходные изображения:
(Это не очень хорошо сработало на тыквах, поэтому я опускаю эту.)
И вот код:
источник
Python 2 + PIL тоже моя первая раскраска
Я сделал то же самое, что и CarpetPython, за исключением того, что я заполняю область «градиентами» и использую другой цветовой цикл.
Мои самые великолепные окраски:
Время вычислений на моей машине:
изображение 1 (китайский дракон): реальный пользователь 0m2.862s 0m2.801s sys 0m0.061s
изображение 2 (гриффон): реальный пользователь 0m0.991s 0m0.963s sys 0m0.029s
изображение 3 (единорог дракон): реальный пользователь 0m2.260s 0m2.239s sys 0m0.021s
источник
Python 2 и PIL: психоделические миры
Я использовал простой алгоритм для заливки каждой белой области цветом из циклической палитры. Результат очень красочный, но не очень реалистичный.
Обратите внимание, что «белые» части на этих рисунках не очень белые. Вам нужно будет также проверить оттенки серого.
Код в Python 2.7:
Пример картинки:
источник
Matlab
Мы используем цветовое пространство HSV и выбираем для каждого региона оттенок в зависимости от его относительного размера между белыми регионами. Самый большой регион будет синим (
Hue = 0.7
), а самый маленький регион - фиолетовым (Hue = 0.8
). Области между этими двумя размерами имеют оттенки в диапазоне0.7 -> 1=0 -> 0.8
. Оттенок диапазона линейно выбирается относительно функцииarea^0.15
. Насыщенность и значение всегда равны 1 для каждого не черного пикселя.Для раскраски изображения требуется менее 1 секунды.
3 картинки с закрытыми областями, где алгоритм работает прилично:
И остальные изображения:
На этих изображениях есть большие белые области, которые должны быть идеально окрашены несколькими цветами (эта проблема была хорошо решена в решении Натаниэля .
источник
Питон 3 с подушкой
Код немного длинный, чтобы включить в этот ответ, но вот суть этого .
Эти последние несколько шагов, к сожалению, до сих пор не устранили более светлые «ореолы», которые видны в темных областях, но они, по крайней мере, внесли заметные изменения. Обработка изображений никогда не была моей областью изучения, поэтому, насколько я знаю, есть более успешные и более эффективные алгоритмы, чтобы делать то, что я пытался сделать здесь ... ну да ладно.
На данный момент есть только две выбираемые палитры для шага 4: чисто случайная и очень грубая «естественная», которая пытается присвоить цвета неба верхним углам, цвета травы нижним углам, коричневый (камни или дерево). ) цвета к середине каждой стороны, и различные цвета по центру. Успех был ... ограничен.
Использование:
Образцы:
paint_by_prog.py -t 0.7 Gryphon-Lines.png
paint_by_prog.py Dragon-Tattoo-Outline.jpg
paint_by_prog.py -t 0.85 -p natural The-Pumpkin-Farm-of-Good-old-Days.jpg
paint_by_prog.py -t 0.7 Dragon-OutLine.jpg
paint_by_prog.py stejar-arbore-schiţă-natura.png
Цыпленок выглядит не очень хорошо, и мой последний результат для изображения Link не самый лучший; тот, который пришел из более ранней версии кода, был в основном бледно-желтым и имел интересную атмосферу пустыни ...
Представление:
Каждое изображение занимает пару секунд, чтобы обработать с настройками по умолчанию, что означает, что приблизительный алгоритм ближайшего соседа используется для шага 5. Истинный ближайший сосед значительно медленнее, занимая, возможно, полминуты (на самом деле я не рассчитал время).
источник
Ява
Случайный выбор цвета из вашего выбора паллет.
Предупреждение: Обнаружение областей в настоящее время очень медленное, если только белые области не являются необычно маленькими.
Требуется два ввода: имя файла и идентификатор палитры. Включает некоторую коррекцию сглаживания, но не включает логику для прозрачных пикселей.
В настоящее время распознаются следующие палитры:
Результаты:
Дракон, палитра Game Boy:
Другой дракон, синяя + зеленая палитра:
GOL натюрморт Мона Лиза (как показано в этой программе ), триколор палитра:
источник