Визуализация портретов

Я остановился на этой визуализации, и она называется Word Portrait:

введите описание изображения здесь

У меня вопрос: как это сделать? Есть учебник или статья, которая описывает это?

2 ответа

Я новее видел это, но в прошлом я делал конвертер растрового изображения в ASCII, что похоже. так что с моей точки зрения я вижу это так:

  1. возьмите серое изображение и сегментируйте его (прямоугольными областями с фиксированным соотношением сторон)

    Соотношение сторон задается вводимой текстовой фразой и используемым шрифтом. Это даст вам список прямоугольников с похожими цветами, поэтому рассчитайте средний цвет для них. Также хорошей идеей является ограничение минимального и максимального размера сегментов.

    • слишком маленькие прямоугольники не читаются
    • слишком большие прямоугольники некрасивы (см. самый большой гений)
  2. заменить прямоугольные сегменты текстом

    Размер шрифта ограничен заполненной областью (размер прямоугольника), поэтому текст будет вмещаться в него. Средний цвет текста должен совпадать со средним цветом прямоугольника

    text_color=rectangle_avg_color*(ink_pixels+paper_pixels)/ink_pixels
    

    ink_pixels а также paper_pixels количество пикселей в отображаемой текстовой фразе Если вы хотите реализовать цветные изображения, просто рассчитайте значения R,G,B по отдельности и смешайте их вместе или сегментируйте по цветам и интенсивности сразу

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

Проверьте мой репозиторий Github: ArtWork.

Мы реализовали этот алгоритм для университетского проекта.

Как работает этот алгоритм.

  1. Вычислите Bounding Box шрифта, который вы используете.
  2. Возьмите этот BBox и переместите его на свое изображение.
  3. (будет объяснено в шаге 7. Проверьте используемое изображение с текущим BBox. Есть ли свободное место внутри BBox для печати (все пиксели должны быть белыми)? Если да, перейдите к шагу 4. иначе переместите BBox дальше.)
  4. Вычислить среднее значение этого BBox
  5. Вычислить дисперсию этого BBox
  6. Используйте порог, который определяет, будем ли мы печатать или нет (дисперсия низкая -> мы печатаем в противном случае мы перемещаем BBox)
  7. Если мы распечатаем текст, напечатайте его цветом (итоговое значение) на вашем итоговом изображении и на втором полностью белом изображении, называемом использованным изображением, которое поможет нам проверить, печатались ли мы уже в этой области. На этом использованном изображении мы печатаем черным цветом.
  8. Обновите ваши параметры, это означает, что шаг за шагом уменьшайте размер шрифта, пока не достигнете конечного конечного условия (например, currentFontSize > minFontSize).
  9. Повторите (перейдите к шагу 1.), пока ваше конечное состояние не будет достигнуто.
Другие вопросы по тегам