Изобразить словесный портрет
с помощью фракталов

 

Словесный портрет — система описания внешности человека с помощью стандартизованного набора характеристик. Первоначально разработана французским криминалистом Бертильоном, впоследствии усовершенствована и упрощена Рейссом/

Система активно применяется в криминалистике.

 

Словесный портрет - это детальное описание внешности человека для того, чтобы его можно было узнать или опознать.
Существует два вида словесного описания внешности человека:
1. Произвольное описание, когда человек описывает другого человека, используя обычные слова и выражения повседневной речи, то есть разговорным языком, с употреблением сленговых и других выражений.
2. Систематизированное описание, когда человек описывает другого человека по методу словесного портрета, основанного на учениях Альфонса Бертильона. Это более конкретное описание внешнего облика человека по специальному плану.
** голова в целом
** волосы
** лицо в целом
** лоб
** брови
** нос
** глаза
** скулы
** подбородок
** губы
** рот
** уши

По фильмам все видели, как подбором основных параметров (очерку черепа, волосам, глазам, носу, губы, подбородку), подбирается  разыскиваемый человек. То есть имеется готовый набор характерных изображений этих элементов, последователь импортируя их, например в CorelDraw, собирают портрет разыскиваемого объекта.   Сложного здесь ничего нет, главное, чтобы был банк составных элементов словесного портрета. Из-за простоты решаемой задачи в Интернете нет автоматизированных систем решения этой задачи. Мы подобную задачу решали при создании манг, когда  элементы словесного портрета  формировали непосредственно в диалоговом режиме, придавай им и образу гротеск. Элементы создавались  в векторном 3D формате. Примеры смотрите, например здесь: http://old.msun.ru/Vector/Art_CAPR/АРТ_САПР.htm.
В связи с тем что мы овладели фракталами, что-то создали свое, интересно как создание словесного портрета выполнить с помощью фрактальной геометрии, автоматизировав ряд приемов, например

1)    выбор тех или иных элементов лица случайно 

2)    выбор тех или иных элементов лица не случайно по нумерологической сущности перципиента

3)    выбор элементов лица не случайно, а по визуальному желанию проектировщика.

 

Начнем с того, что соберем элементы лица по отдельным папкам. Картинки в папках задаем в *.bmp формате, что позволяет видеть их на просвет. Идеально лучше всего подходит векторный формат картинок в dxf-формтате, но это потом.

 

Пример формирования фрактального растрового  портрета в разных вариантах,
в зависимости от масштаба, поворота и т.д.

ПРимер1-4.jpg

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

 

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

VbsMsg "Импорт bmp и фрактал"

Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Фасе\3.bmp",0 

 

 

ПРимер 2.jpg

Генератор, инициатор и фрактал задали в диалоге – это легко

 

 

Задать фрактал через метод

 

VbsMsg "словесный  портрет"

'Import "C:\Program Files\MSUN\Vector\Знаки НОВЫЕ\Щуки\петух-чб.dxf",0

Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Фасе\1.bmp",0

'Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Бодбородок\4.bmp",0

'Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Глаза\7.bmp",0

 

' прицеп на 

n11 = LastNmb ' прицеп

 

CurrObjNmb = n11-1' активной линии на входе

n59= LastNmb-1

 

 

' Задаем генератор

Set p1 = p(0.01,0,0)

Set p2 = p(7.1,0,0)

n77 = LastNmb

Ngpoint.ss p1

Ngpoint.ss p2

n78 = LastNmb

MoveToGroup n77+1, n78+1, "New"

GroupToPolyline

n61 = LastNmb ' генератор

'Obj.Translate P(-15, +5, 0)

 

' Шаг случано

'Randomize

'a = Int (rnd(1)*40+1)

'a=1

'VbsMsg "шаг =  " & a

 

'FractalTopolyline n61, 1, 2, 1, 0, 1,-1,p(0,0,0)   ' на каждом шаге

FractalTopolyline n61, 1, 2, 1, 0, 1,1,p(0,0,0)   ' замещение одиночка

'Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Бодбородок\4.bmp",0

Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Фасе\2.bmp",0

n81 = LastNmb

FractalTopolyline n61, 1, n81, 1, 0, 1,2,p(0,0,0)   ' замещение одиночка

'Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Глаза\7.bmp",0

Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Фасе\3.bmp",0

 

n81 = LastNmb

FractalTopolyline n61, 1, n81, 1, 0, 1,3,p(0,0,0)   ' замещение одиночка

 

n83 = LastNmb

Delete n83-1 ‘ импортируемые образы прицепов удалили - они стали фракталом 

Delete n83-3

Delete n11

 

Слов портрет.jpg

 

С помощью фрактал – одиночный поместили три разных картинки в разные места.

Следующий момент построить лицо из частей разных персонажей. Инициатор задается в МК – одинаковый для всех. Инициатор задали в начале МК

Пример 2.jpgПример 2-3.jpg

 

Взяли 4 части: волосы, глаза, уши и бороду с усами.

Рисунок справа получается автоматически.

Инициатор зададим в МК.

Пример 2-4.jpg

Поиск словесного портрета по 4-м составляющим лица:

волосы, глаза/нос, уши, подбородок (борода)

Резюме. Изображение словесного портрета по его составляющим выполнен с помощью метода задания фрактала, например:

' Борода

Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Бодбородок\6.bmp",0

n81 = LastNmb

FractalTopolyline n61, n79, n81, 1, 0, 1,2,p(0,0,0)   ' замещение 3-го отрезка (слева указан на 1 меньше)  

Obj.Translate P(0, -9, 0)

n61 - генератор

n79 – инициатор

n81 - прицеп

 

Пусть элементы лица выбираются случайным образом из набора однотипных.

Import "C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Бодбородок\6.bmp",0

 

Задача состоит в том, чтобы при импорте произвольный файл *.bmp можно было выбирать случайно. Это делается так:

 

' Выбор файла случайно

num=1  пока импортируем  первый файл

folder_name="C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Бодбородок"

ImportNum folder_name, 10+num, "bmp"

num – номер файла-рисунка в папке «Бодбородок» (10 число – было принято для 99 арканной счета, так и тянется)

 

Вот рисунки в папке «Бодбородок». По порядку первым идет 2.bmp. Поэтому, чтобы вызвать его, надо 1каза 10+1

 

Untitled-1 copy.jpg

 

Чтобы вызвать 6.bmp, указываем 10+5

 

Теперь, нужно сделать так, чтобы выбор был случайным от 1 до 5

 

‘ МК: Выбор файла из папки случайно.vbs

randomize

ni=int(rnd(1)*5+1)  ' 5 - действительное количество файлов в папке 

VBSMsg "Случайное число в папке Подбородок = " & ni

folder_name="C:\Documents and Settings\Bolotov\Рабочий стол\ПЕРЕКИД\Бодбородок"

ImportNum folder_name, 10+ni, "bmp"  ' 10+1 - девичий подбородок. 10+5 - мужской с бородой

 

Задаем МК Словесный портрет случайно.vbs

 

Пример 3 - случайно.jpgСловесный портрет волосы случайно.jpgСловесный портрет волосы случайно2.jpgСловесный портрет волосы случайно3.jpg

 

Случайный выбор шевелюр

 

 

Словесный портрет волосы и глаза случайно.jpg Словесный портрет волосы и глаза случайно2.jpg волосы и глаза и подболро случайно.jpg  волосы и глаза и подболро случайно3.jpg

Слева две картинки: волосы и глаза случайно,
справа и подбородок с губами и носом из папок случайно

 

Резюме. Имея папки и макросы формирования образа лица по их составляющим, можно буквально за минуты просмотреть разные варианты. Корректность зависит от набора элементов лица, принадлежащих к полу, возрасту, национальности и т.д.