OpenCV превод и обработка на изображения

opencv

Тъй като технологиите за компютърно зрение са до голяма степен обвързани както с Python, така и със C ++, ние съставихме статия с анализ на проблема и кода и на двата езика. Освен това искрено се надяваме, че ще ви хареса момичето под разфасовката.

Тази статия ще ви покаже как да генерирате средно изображение на лицето с помощта на библиотеката OpenCV (C ++/Python).

руски английски

Жената, показана на фиг. 1, повечето читатели ще го намерят за доста. Но можете ли да познаете нейната националност? Защо има толкова гладка кожа? Точно така - тази жена не съществува. Но не може да се каже, че това е напълно виртуално изображение. Това е среден портрет на всички служители в моята компания Sight Commerce Inc. към около 2011г. Нейната националност е трудна за определяне, тъй като в нас работят момичета с европейски, латиноамерикански, източноазиатски и индийски корени!

Историята на усредняването на лицето е очарователна.

Всичко започна с изследванията на Франсис Галтън (братовчед на Чарлз Дарвин), който през 1878 г. изобрети нова фотографска техника: научи се да комбинира лица и да прави първите скици. Той вярваше, че чрез комбиниране на лицата на престъпници може да се симулира „прототипно“ престъпно лице и впоследствие да се разпознаят потенциалните престъпници по техните черти на лицето. Оказа се, че тази хипотеза е погрешна: след разглеждане на нечия снимка е невъзможно да се определи склонността му към престъпление.

Галтън обаче отбеляза, че средното лице винаги изглежда по-привлекателно от всички „съставни“ лица. В един поразителен експеримент изследователите сгънаха лицата на всички 22 финалистки на „Мис Германия 2002“. Респондентите оцениха получения резултат по-високо от която и да е от състезателките, дори по-високо от "Мис Берлин", която тогава беше победител. Фу! Оказва се, че Джесика Алба е толкова хубава, точно защото лицето й е близо до средното.

Можете ли да приравните „средно“ с „посредствено“? Защо средното лице е привлекателно за нас? Според еволюционната хипотеза, наречена койнофилия, индивидите в активна репродуктивна възраст търсят партньори със средни черти, тъй като отклоненията от средната стойност могат да показват вредни мутации. Освен това средното лице е симетрично, тъй като вариациите от лявата и дясната страна на лицето се изглаждат взаимно.
Как да генерираме осреднено лице в OpenCV?

изображения

Кодът и изображенията за статията могат да бъдат изтеглени тук.

По-долу е описано стъпка по стъпка как да се генерира средно лице предвид горния набор от изображения. Въпреки това, ние не вземаме предвид размера на самите изображения или размера на лицето във всеки портрет.

Етап 1: Откриване на черти на лицето

обработка

За всеки портрет изчисляваме 68 контролни точки, използвайки библиотеката dlib. Начинът на инсталиране и използване на dlib е описан подробно в друга публикация за Откриване на характеристиките на лицето. Портретът на Обама има 68 контролни точки.

Стъпка 2: Координация на трансформацията

Как избрах горните точки? Исках да гарантирам, че тези точки са на една и съща хоризонтална линия и че тази линия е около една трета от пътя отгоре до дъното на картината. И така, постигнах, че върховете на очните кухини са в точки с координати (0,3 х ширина, височина/3) и (0,7 х ширина, височина/3).

Също така знаем къде се намират ъглите на очите в оригиналните изображения - съответно, в контролните точки 36 и 45. След това можем да изчислим трансформацията на подобието (въртене, транслация, мащабиране) и да преведем точките от първоначалната координатна система в последен.

превод

Какво е трансформация на подобие? Трансформация на подобие е матрица 2 × 3, която ви позволява да промените местоположението на точките (x, y) или цялото изображение. Първите две колони от тази матрица кодират въртене и мащабиране, а последната кодира транслация (т.е. отместване). Да приемем, че трансформирате (премествате) четирите ъгъла на квадрат, така че квадратът да се мащабира в посоките x и y съответно sx и sy пъти. В същото време той се върти през ъгъла θ и се прехвърля (премества) от tx и ty в посоките x и y. В този случай преобразуването на сходството може да бъде записано по следния начин: