Przetwarzanie obrazów, skalowanie/interpolacja

0

Siema,
mam dwa obrazy z różnych urządzeń(aparat, skaner) i muszę je na siebie nałożyć(różne rozmiary, skala).
Rozwiązałem już problem z znalezieniem kilku punktów wspólnych i ich dopasowanie między obrazami, szczególnie w poziomie(to są panoramy 360 stopni).
Teraz problem polega na tym, że w pionie jeden obraz jest większy(obejmuje większy obszar sceny) niż drugi i muszę wyciąć z niego to co nie jest wspólne, a potem odpowiednio przeskalować.
Niestety okazuje się, że w zależności od współrzędnych(szczególnie widać to w pionie) skala nie jest stała, próbowałem skorzystać z interpolacji, najlepszy rezultat daje liniowa, ale niestety błędy na końcach są zbyt duże(przekraczają 300px) - pewnie przez zbyt małą ilość punktów(~10) przy wymiarach rzędu 9000x4500 px i 3500x1500px

Ma ktoś z was jakiś pomysł/link do jakiegoś artykułu?

1

Jeśli bierzesz pod uwagę tylko skalę i przesunięcie (a pomijasz obrót czy inną perspektywę) to będzie to tak. Z pośród wyznaczonych charakterystycznych punktów bierzesz dwa najbardziej oddalone w pionie (zielone) i dwa najbardziej oddalone w poziomie (niebieskie) - utworzą one dwa punkty odniesienia (czerwone punkty A i B):
Rysunek.png
Na drugim obrazku niech nazywają się odpowiednio C i D (drugi to ten dopasowywany).

No i teraz trzeba sobie wyznaczyć funkcję przejścia ze współrzędnych obrazka drugiego do współrzędnych obrazka pierwszego.

f(x, y) = (px + q, ry + s)

Wiemy, że C przechodzi w A, a D przechodzi w C. Więc podstawiasz:

f(C)=A
f(D)=B

Wychodzi prosty układ równań, dokładnie dwa układy po dwa równania liniowe. Z jednego wyznaczasz p i q, z drugiego r i s.

Mając tą funkcje możesz prosto wyznaczyć wszelkie interesujące cię rzeczy. Np, gdzie wypadnie lewy górny róg obrazka po przeskalowaniu? Wystarczy policzyć:

f(0, 0)

To tak na wstęp. Generalnie zasada będzie ta sama, trzeba sobie wyznaczyć funkcję przejścia i wtedy będziesz wiedział gdzie ciąć.

0

Wydaje się, że to powinno wystarczyć, bo zdjęcie jak i skan są robione z dokładnie tego samego punktu w przestrzeni. Różnić się może ogniskowa.
Niestety nawet po ręcznym przycięciu obrazu tak, że jest na nim tylko to co jest wspólne okazuje się, że po przeskalowaniu kluczowymi punktami są różne. Tzn. jak policzymy skalę biorąc pod uwagę odległości pomiędzy zielonymi punktami na jednym i drugim zdjęciu oraz to samo na podstawie dwóch innych punktów(np. tych niebieskich) to skala nie wyjdzie taka sama. W poziomie różnice są stosunkowo nie wielkie i być może okażą się pomijalne, ale w pionie różnica jest już spora. Do tego punkty kluczowe zależą od osób które robiły te zdjęcia(rozkładają na scenie szachownice). W poziomie są one dość rozstrzelone, ale w pionie są dość blisko środka(mniej więcej w pasie o wielkości 1/3 obrazu), więc przez to błąd jest jeszcze większy.

Ręczne przycięcie wchodzi w grę nawet już w docelowym rozwiązaniu, ale ten błąd w pionie jest nie do zaakceptowania.

Zastanawiam się, czy ogniskowa ma na to wpływ(niestety o fotografii nie wiem praktycznie nic), więc może da się to wyrazić jakimś wzorem zakładając, że położenie kamery jest takie samo dla obu obrazów, dodatkowo można uzyskać odległość każdego z punktu na obrazie od położenia kamery/skanera.

0

Możesz pokazać jakieś przykłady? Łącznie z próbą skalowania która wychodzi źle.

0

Niestety nie mogę tego udostępnić :/ Jedyne co mi jeszcze do głowy przychodzi, to to, że taki efekt może spowodować pochylenie jednego zdjęcia w stosunku do drugiego, tylko nie mam pojęcia jak to można policzyć :/

0

Źle się za to bierzesz. Łączenie zdjęć w panoramę operując jedynie na dwóch wymiarach w większości przypadków nie ma szans na powodzenie (tzn. nigdy nie wyjdzie Ci "idealne" połączenie). Po pierwsze nie masz absolutnie żadnej pewności, że zdjęcia zostały wykonane z dokładnie tego samego punktu przestrzeni. Nawet niewielkie przesunięcia wpływają na wygląd zdjęć. Musisz je potraktować, jakby były wykonane z różnych miejsc i wyznaczyć ich położenia. Po drugie, ogniskowa ma bardzo duży wpływ na możliwość łączenia zdjęć. Masz różny sprzęt, więc na bank ogniskowa, punkt centralny, dystorsja itp. są różne. Powinieneś pierw skalibrować sprzęt (średnie rozwiązanie, jeśli używasz lepszych aparatów, które ostrość regulują właśnie poprzez zmianę ogniskowej) lub dołączyć autokalibrację. Dopiero wtedy możesz próbować łączyć zdjęcia.

0

Źle zrozumiałeś, nie mam łączyć zdjęć w panoramę, tylko nałożyć na siebie dwie panoramy obejmujące w poziomie 360 stopni.
Dodatkowo mam gwarancję, że i jedna jak i druga panorama są robione z dokładnie tego samego miejsca. Jedna jest robiona za pomocą aparatu, a druga za pomocą skanera 3D(dopasowuje rzut na walec). Różnić się mogą tylko ogniskową, zakresem obejmowanej sceny w pionie, rozdzielczością i być może nachyleniem. Może mi się uda dopaść więcej informacji w tygodniu(na razie mam tylko jeden zestaw danych testowych).

1

Jeżeli różnią się ogniskową, to nic nie da się z tym zrobić. Wyobraź sobie taki przypadek - jedno zdjęcie wykonane zwykłym aparatem (rzutowanie perspektywiczne, jakaś tam ogniskowa) i drugie hipotetycznym aparatem rzutującym ortogonalnie (ogniskowa nieskończona). Drugie zdjęcie pozbawione jest skrótu perspektywicznego, niezależnie od odległości obserwowane obiekty o tym samym rozmiarze mają taki sam rozmiar na zdjęciu; na pierwszym zdjęciu dalsze obiekty są wyraźnie mniejsze.
Nieważne jak się nakombinujesz - nie uda Ci się połączyć tych zdjęć, przekształcając je tylko w dwóch wymiarach.

0

Właśnie się tego obawiałem. Próbowałem wyznaczyć macierz przekształcenia perspektywy między jednym obrazem, a drugim i dokonać transformacji(opencv getPerspectiveTransformation, warpPerspective), ale wyniki były co najmniej z kosmosu(może najpierw powinienem przeskalować te obrazy - jeszcze sprawdzę).
Jak się za to zabierałem nie sądziłem, że mogą być z tym takie problemy - już odnajdywanie punków kluczowych było dużo prostsze, a sądziłem, że to będzie największym problemem.

0

A ten obraz ze skanera 3d jest w jakiej postaci?

0

Zwykły jpg, rzut punktów 3D na płaszczyznę walca

0

W rzutowaniu walcowatym/sferycznym w ogóle nie istnieje pojęcie ogniskowej...
Może odezwij się na priv. Jeśli chodzi o widzenie komputerowe, to mam w tej dziedzinie dwuletnie doświadczenie, może uda mi się jakoś pomóc.

0

Hmmm, to muszę się dowiedzieć jak dokładnie ten skaner(a raczej jego oprogramowanie) tworzy ten obraz, bo oryginalnym wyjściem są współrzędne 3d punktów + intensity(ilość odbitego światła lasera).
W tygodniu powinienem dostać więcej info na ten temat to się jeszcze odezwę, może się okazać, że ten błąd będzie do zaakceptowania.

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