Картирайте изображение/текстура към предварително дефинирана неравна повърхност (тениска с гънки, чаша и др.)

По принцип се опитвах да постигна това: наложете произволно изображение върху предварително дефинирана неравна повърхност. (Вижте примерите по-долу).

Всяко изображение--> въведете описание на изображението тук

Нямам много опит с обработка на изображения или 3D алгоритми, така че ето най-добрият метод, за който се сещам досега:

  1. Предварително дефинирайте набор от координати (да кажем, че ако имаме мрежа 10x10, имаме 100 координати, които започват с (0,0), (0,10), (0,20), ... и т.н. Ще има 9x9 = 81 решетки.
  2. Запишете трансформациите за всяка отделна координата върху изображението на тениската, напр. (0,0) става (51,31), (0, 10) става (51, 35) и т.н.
  3. Триангулирайте оригиналното изображение в 81x2=162 триъгълника (с 2 триъгълника за всяка мрежа). Трансформирайте всеки триъгълник от изображението въз основа на трансформациите на координатите, получени в Стъпка 2, и го начертайте върху изображението на тениската.

Проблеми/въпроси, които имам:

  1. Не знам как да изгладя всеки триъгълник, така че изображението върху тениската да не изглежда накъсано.
  2. Има ли по-добър начин да го направите? Искам да съм сигурен, че не преоткривам колелата тук, преди да продължа с внедряването.

Благодаря!


person settinghead    schedule 19.12.2012    source източник
comment
винаги можете да увеличите разделителната способност и да създадете по-малки триъгълници :P Мисля, че имате нужда от различен алгоритъм вместо тази триангулация. Нещо за срязване и разкъсване.   -  person Adrian    schedule 19.12.2012
comment
Можете просто да използвате сплайн интерполация от координати на тениска към координати на текстура. По този начин получавате плавно картографиране от всеки пиксел в изображението на тениската към изображението на текстурата и можете просто да търсите текстурата за всеки пиксел. Въпреки това няма да работи за гънки или оклузии.   -  person Niki    schedule 19.12.2012


Отговори (2)


Това се нарича изкривяване на цифрово изображение. Имаше популярен графичен текст върху него в 1990 (вероятно от нечия теза). Можете също да намерите статия за него от д-р Дневник на Доб.

Вашият процес е по същество правилен. Ако работите пиксел по пиксел, вместо да се опитвате да използвате триъгълници, ще избегнете някои от проблемите, с които се сблъсквате. Сканирайте пикселите в целевото растерно изображение и приложете локалната трансформация въз основа на клетката, в която се намирате, за да определите координатите на съответния пиксел в изходното растерно изображение. Копирайте този пиксел отгоре.

За по-гладък резултат правите своите координатни трансформации с плаваща запетая и интерполирате стойностите на пикселите от изходното изображение, като използвате нещо като билинейна интерполация.

person Adrian McCarthy    schedule 19.12.2012

Това всъщност не е решение на проблема, а просто заобиколно решение:

Ако имате 3D модела, който представлява тениската. можете да използвате directX\OpenGL и да поставите вашето изображение като текстура на тениската. След това можете да го помолите да изобрази желаната от вас картина от всяка гледна точка.

person OopsUser    schedule 19.12.2012