(no title) (original) (raw)

[Jun. 20th, 2008|04:49 pm]OpenPhotoVR
Previous Entry Flag Next EntryСамое сложное в этом деле это обратное преобразование контура фотографии. То есть допустим есть две фотографии. Мы связали одну фотку со второй, а вторая с первой уже связывается сама по каким-то алгоритмам вычисляя перспективу, а вернее её проекцию на плоскость. Но я никак не могу разобраться как. Если двигать точку привязки по одной оси, то все очень просто, она зеркально отображается на другой фотографии. Если сдвинуть её по двум осям, контур на второй фотографии строится как-то безсистемно :) Не посвятите в тонкости?
Link Reply
Comments:
Я не знаю способа интуитивно это понять. Обратное преобразование получается обращением матрицы проективного отображения, проще никак =) Например, если преобразование из первой фотки во вторую - поворот на 45 градусов, то из второй в первую - поворот в обратную сторону на те же 45. Если из первой во вторую - растяжение в два раза по горизонтали, то из второй в первую - сжатие в два раза по горизонтали. И так далее. Повороты, сдвиги, растяжения, любые сочетания этих операций etc. - укладываются в понятие "проективное преобразование". Каждому такому преобразованию соответствует матрица, для обратного преобразования вычисляется обращение этой матрицы.роюсь счаз в picture.asведь на входе у нас 4 точки. Должна быть функция в которую даются четыре этих точки а она возвращает их инвертированными. Кажется мне что это где-то здесь: var mat2 = DistortedPicture.buildMatrix([[-tw, -th], [tw, -th], [tw, th], [-tw, th]]); var ttw = nav.width/Math.pow(2, z + 1); var tth = nav.height/Math.pow(2, z + 1); var cx = -(x - nav.width/2)/Math.pow(2, z); var cy = -(y - nav.height/2)/Math.pow(2, z); var p2 = DistortedPicture.applyMultiple(DistortedPicture.inverse(mat1), [ [cx - ttw, cy - tth], [cx + ttw, cy - tth], [cx + ttw, cy + tth], [cx - ttw, cy + tth] ]);но еще не доразобрался.закомментировать бы код :) Такой функции нет, но тот код, на который Вы смотрите, действительно это делает. Вычисление матрицы по четырем точкам - DistortedPicture.buildMatrix. Обращение матрицы - DistortedPicture.inverse. Вычисление четырех точек по матрице и четырем точкам-прообразам - DistortedPicture.applyMultiple.