transformacja-przekształcenie obrazka

0

Siedze cały dzień i myśle, jak to uzyskać, google mi nie pomógł. Potrzebuję tak przekształcić oryginalny obrazek, aby uzyskać jak na obrazku:
user image
W photoshopie używa się do tego transformacji Skew. Wujek google podpowiada tylko jak z prostokątnego zdjęcia uzyskać trapez równoległobok, ale to mi nie odpowiada. Osobiście nie wiem czego szukać, jak na przykład chciałbym znaleźć algorytm do tego. Wystarczyłaby modyfikacja chociaż do trapezu o dwóch kątach prostych, bo zawsze moge sobie obrazek poobracać i dojść do tego co chce. Kwestia jest taka, że funkcja która ma to realizować za argumenty potrzebuje przyjmuje współrzędne czterech rogów. Ale obecnie wystarczy mi tylko nazwa przekształcenia. Całość muszę napisac w PHP, ewentualne kody mogą być w innych językach.

0

Ja bym zrobił tak (nie jest to takie nietuzinkowe): zinterpretowałbym bitmape, jako zbiór kwadratów wypełnionych jednolitym kolorem. Rogi owych kwadratów przesuwam w pamięci zgodnie z transformacją. Powstałe czworokąty maluję z antyalisingiem na nowej bitmapie.

Co do samej transformacji współrzędnych, chyba łatwo ją znaleźć mimo iż nie jest to transformacja liniowa.
Danymi wejściowym mogą być 3 wektory, które określają gdzie mają być przesunięte rogi obrazka (z zał. jeden róg nie ruchomy).
Lewy górny róg piksla o współrzędnych (ix,iy) leży na przecięciu prostych y=iy oraz x=ix. Trzeba by zastanowić się jak te proste zmienia transformacja. Zauważyłem, że istnieje 1 pionowa i 1 pozioma prosta, których współrzędne nie zmienią się po transformacji. Punkt ich przecięcia to nieruchomy róg.

0

Wykminiłem obecnie to troszke inaczej z użyciem dwóch perspektyw, tylko pozostaje kwestia wygenerowania ich, a dla egenrowania nich też nic znaleźć nie moge.

Pomysł mi się bardzo podoba, mam tylko małe ale, nie bardzo wiem jak wykonać antyaliasing, jest to jakieś uśrednianie kolorów??

0

Jeżeli kogoś interesuje jak rozwiązałem ten problem to otóż doszukałem się czegoś takiego ja bilinear distort. Współrzędnie położenia punktów wynikowych wylicza się z dwóch wzorów:

x'=ax+bx+cxy+d
y'=ex+fy+gxy+h

Aby wyliczyć współczynniki a,b,c,d,e,f,g,h to trzeba umieć obliczać układy z czteroma niewiadomymi, ja go tego wykorzystuje metodę eliminacji Gaussa-Jordana. Tworzy się po cztery równania najpierw dla pierwszego wzoru, potem dla drugiego i wylicza je. Jak dam rede to postaram się napisać jakiś artykuł na ten temat bo przy okazji dowiedziałem się jeszcze czegoś ceikawego jak komuś zależy tylko na przechyleniu obrazka :>.

P.S.
Przepraszam, że dodaje jako nowego posta, ale chce zrwócić, że znalazłem rozwiązanie bez kombinowania w perspektywy itd...

0

Nie masz za co przepraszać!
Czekamy na arta!

0

Tak a propos jaki dać tytuł, bo bilinear distort na język polski znaczy tyle co przekształcenia bilinearne, a nie bardzo to wyraziste dla osób, które szukają tego co ja;)

0

Moze polski i angielski jednoczesnie?

0

distort to raczej znieksztalcenie. Angielski i polski jednoczesnie powinny zalatwic sprawe :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1