я создал новую тему про решение получившегося уравнения
topic61225.htmlно отвечу и тут, перспективное искажение именно идет от камеры.
я могу взять и поставить 4 точкам(которые образуют например трапецию) на изображении 4 угла "мнимого прямоугольника" и применить обратное перспективное искажение чтобы "развернуть" точки в прямоугольник, но проблема в том, что я не знаю каким точно должен быть этот "мнимый прямоугольник", можно использовать скажем вписанный или описанные прямоугольник вокруг точек или их усреднение, но так мы получим искомый результат только с точностью до масштаба по
![$X,Y$ $X,Y$](https://dxdy-04.korotkov.co.uk/f/7/c/7/7c7983b2cd2968086bca685696c4e4c082.png)
.
Что я пытаюсь сделать: беру снимаю первую картинку(с неизвестным перспективным искажением
![$M$ $M$](https://dxdy-04.korotkov.co.uk/f/f/b/9/fb97d38bcc19230b0acd442e17db879c82.png)
), потом поворачиваю плоскость которую снимаю на какой либо известный градус (например на 90) получаю вторую картинку с искажением уже
![$M[Rot]$ $M[Rot]$](https://dxdy-04.korotkov.co.uk/f/f/1/3/f13665c2c604ad50bad3a71a70a728eb82.png)
, потом я могу поставить в соответсвие 4 пары точек на первой и второй картинке и получить тем самым переход от одной картинки к другой
![$L$ $L$](https://dxdy-02.korotkov.co.uk/f/d/d/c/ddcb483302ed36a59286424aa5e0be1782.png)
, потом я составляю уравнение
![Изображение](http://dxdy-01.korotkov.co.uk/f/c/d/5/cd5b20c1f4f398cfa11ad76c6274102a82.png)
, которое и пытаюсь тщётно решить.
в общем случае еще накладывается и дисторсия бочка\подушка, какую точно она имеет формулу я не знаю, я брал простейшую.
![$$\begin{cases}
u=c_1+x+k_1x(x^2+y^2) \\
v=c_2+y+k_2y(x^2+y^2)
\end{cases}$$ $$\begin{cases}
u=c_1+x+k_1x(x^2+y^2) \\
v=c_2+y+k_2y(x^2+y^2)
\end{cases}$$](https://dxdy-01.korotkov.co.uk/f/4/3/8/438359d0721f9385c90142f236589f6182.png)
если еще проще, то
![$c_{1}=c_{2},k_{1}=k_{2}$ $c_{1}=c_{2},k_{1}=k_{2}$](https://dxdy-04.korotkov.co.uk/f/b/a/1/ba13dd66a7a4346c05eaefe29ec7786d82.png)
описывал проблему тут
topic61037.htmlединственное там формула общего преобразования не верная
![$$\begin{cases}
u=\frac{m_{11}x+m_{12}y+m_{13}}{m_{31}x+m_{32}y+m_{33}}+c_1+x+k_1x(x^2+y^2) \\
v=\frac{m_{21}x+m_{22}y+m_{23}}{m_{31}x+m_{32}y+m_{33}}+c_2+y+k_2y(x^2+y^2)
\end{cases}$$ $$\begin{cases}
u=\frac{m_{11}x+m_{12}y+m_{13}}{m_{31}x+m_{32}y+m_{33}}+c_1+x+k_1x(x^2+y^2) \\
v=\frac{m_{21}x+m_{22}y+m_{23}}{m_{31}x+m_{32}y+m_{33}}+c_2+y+k_2y(x^2+y^2)
\end{cases}$$](https://dxdy-01.korotkov.co.uk/f/c/0/6/c06e56cd31ceee3d5d62df7c75d4550e82.png)
(я почему то просто сложил перспективное искажение и искажение типа бочка\подушка, хотя их последовательно надо применять, только непонятно в каком порядке и соответственно от порядка применения зависит порядок убирания дисторсий).
в общем задачу можно поделить на 2.
1. Исправление перспективного искажения
2. Исправление дисторсии подушка бочка
думаю нет смысла решать задачу сразу в целом в виде
Dist[Persp[(x,y)]] или
Persp[Dist[(x,y)]], т.к. будет только сложнее, а можно решить задачу последовательно устранив искажения сначала перспективное, потом бочку.