Elektroda.pl
Elektroda.pl
X
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D

ghost666 09 Gru 2013 13:49 6348 2
  • Wstęp

    Systemy wideo, niesamowicie popularne w urządzeniach na rynku konsumenckim, zdobywają coraz większe uznanie w urządzeniach użytkowanych w aplikacjach przemysłowych, na rynku motoryzacyjnym i w systemach automatyki przemysłowej. Wzrost udziału tych systemów w wymienionych aplikacjach związany jest mocno z wprowadzeniem standardów HDMI oraz z zwiększoną dostępności wydajnych procesorów DSP i układów FPGA.

    Poniższy artykuł opisuje wymagania stawiane systemowi w którym uzyskać chcemy widzenie stereoskopowe, czyli obraz 3D, wykorzystując standardowe kamery z wyjściem analogowym lub też HDMI. Artykuł opisuje system oparty o układ FPGA który na podstawie dwóch strumieni wideo dostarczanych z kamer rekonstruuje obraz 3D. Trójwymiarowe wideo jest następnie strumieniowane z wykorzystaniem transmitera HDMI 1.4. Artykuł opisuje także system oparty o procesor DSP, który pozwala na zmniejszenie efektywnego wykorzystania pasma transmisji w porównaniu do klasycznego odczytu danych z dwóch kamer. Dodatkowo w artykule opisano metodą która pozwala na uzyskanie formatu obrazu w którym obrazy z dwóch kamer mogą zostać połączone w jeden, poprzez zestawienie ich obok siebie.

    Opis systemu

    W celu otrzymania obrazu stereoskopowego potrzebujemy dwóch kamer, oddalonych od siebie o około 5,5 cm. Jest to typowa odległość pomiędzy gałkami ocznymi u człowieka. System taki zaprezentowany jest na poniższym zdjęciu.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Poniższy schemat blokowy pokazuje w jaki sposób dwie zsynchronizowane z sobą kamery, wykorzystujące ten sam standard transmisji, dwa dekodery i układ FPGA są z sobą połączone w celu generacji obrazu stereoskopowego. Kamery muszą być z sobą zsynchronizowane co do linii korzystając z zewnętrznego układu wymuszającego takie zależności czasowe. Bez synchronizacji nie możliwe by było generowanie obrazu składającego się z danych pochodzących z obu kamer bez wykorzystania dodatkowej pamięci w celu przechowywania danych z poszczególnych klatek obrazu.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Poniższy obrazek ukazuje, w dużym uproszczeniu, w jaki sposób dwa zsynchronizowane strumienie wideo pochodzące z kamer łączone są w celu generacji obrazu stereoskopowego. Takie rozwiązanie eliminuje konieczność zapisu całej ramki obrazu do zewnętrznej pamięci. Kolejny obrazek, poniżej, obrazuje analogiczn ą sytuację, jednakże w momencie gdy strumienie nie są z sobą zsynchronizowane co do linii obrazu.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D
    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Sygnały wyjściowe z zsynchronizowanych kamer wideo użytych w systemie są digitalizowane z wykorzystaniem dekoderów wideo, takich jak na przykład układy ADV7181D, ADV7182 czy ADV7186 dla kamer z wyjściem analogowym lub też z wykorzystaniem odbiorników sygnału HDMI, takich jak ADV7610 czy ADV7611.

    Dekodery analogowego sygnału wideo oraz odbiorniki sygnału HDMI korzystają z pętli z sprzężeniem fazowym (PLL) w celu generacji sygnałów zegarowych które następnie taktują dane wyjściowe z tych układów. Oznacza to że dla dwóch osobnych kamer wygenerowane zostaną dwa zupełnie niezależne sygnały taktujące podczas digitalizacji sygnału z kamery analogowej lub też odbioru strumieni HDMI. Co więcej dwa strumienie wideo, odbierane przez urządzenie, mogą być rozsynchronizowane. Różnice zależności czasowych, spowodowane dwoma osobnymi generatorami przebiegów zegarowych, oraz brak pełnej synchronizacji muszą być skompensowane z wykorzystaniem dodatkowego układu, jakim w tym przypadku jest układ FPGA. Jego zadaniem jest synchronizacja wszystkich danych do jednego przebiegu zegarowego przed połączeniem obu obrazów w jedną, stereoskopową klatkę strumienia wideo. Po dokonaniu tych operacji nowowygenerowana klatka obrazu przesyłana jest przez interfejs HDMI w wersji 1.4 z wykorzystaniem transmitera wspierającego obrazy trójwymiarowe. Jako tako wykorzystać można układ ADV7511 lub ADV7513. Zamiast tego oczywiście strumień obrazu stereoskopowego może zostać przesłany do procesora DSP, na przykład procesora ADSP-BF609 z rodziny układów Blackfin®, gdzie ulegnie on dalszej obróbce.

    Architektura generacji przebiegów zegarowych

    Dekodery sygnałów wideo wykorzystują dwa niezależne źródła sygnałów zegarowych, zależnie czy są one zsynchronizowane czy nie. Jeśli pętla PLL układu zsynchronizowana jest z nadchodzącym sygnałem wideo - na przykład sygnałem synchronizacji poziomej dla dekoderów sygnałów analogowych lub też z zegarem TMDS sygnału HDMI - generuje ona sygnał zegarowy synchroniczny z nadchodzącym sygnałem. Jeśli sygnał wideo zostanie utracony lub też pętla PLL, z innych przyczyn, zostanie zmuszona do pracy samodzielnie wtedy też sygnał zegarowy będzie synchronizowany do oscylatora kwarcowego.

    Taka architektura systemu oznacza że w układzie w którym mamy dwie (lub więcej) ścieżek niezależnych strumieni wideo, wykorzystujących niezależne dekodery lub odbiorniki, mamy do czynienia z dwoma niezależnymi przebiegami zegarowymi, co powoduje powstanie dwóch niezależnych 'domen' czasowych o różniących się częstotliwościach i fazach. Taka sytuacja następuje nawet jeżeli obie pętle PLL posiadają wspólny oscylator kwarcowy, gdyż i tak synchronizowane są do niezależnych sygnałów wideo odbieranych przez system.

    System synchroniczny z zsynchronizowanymi dekoderami wideo

    W typowym układzie obrazującym stereoskopowo występują dwa źródła sygnału wideo, które podłączone są do dekoderów lub odbiorników tegoż sygnału, zależnie czy są to kamery cyfrowe czy analogowe. Każdy z dekoderów/odbiorników generuje swój przebieg zegarowy, synchronizując się do zależności czasowych w sygnale z kamery. Dla kamer analogowych jest to synchronizacja pozioma, dla cyfrowych zegar TMDS. Jeśli kamery zostaną z sobą zsynchronizowane do wspólnego źródła zegarowego co do linii ich klatki będą następowały dokładnie w tym samym momencie. W takim przypadku dwa niezależne dekodery będą także z sobą zsynchronizowane gdyż oba otrzymają ten sam przebieg sygnału synchronizacji poziomej. Pozwala to na łatwe umieszczenie obu strumieni wideo w tej samej domenie czasowej, jak pokazano poniżej.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Asynchroniczny system wideo

    Może się tak zdarzyć iż jeden z dekoderów straci synchronizację sygnału zegarowego z przebiegiem wideo z uwagi na przykład na kiepską jakość połączenia dekodera z kamerą lub na skutek rozsynchronizowania się kamer pomiędzy sobą. Sytuacja taka doprowadzi do wystąpienia dwóch częstotliwości zegarowych dla obu przebiegów wideo. W efekcie doprowadzi to do asymetrii danych doprowadzanych do układu scalającego oba strumienie w jeden. Scenariusze te pokazane są na poniższych obrazkach:

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D
    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Do detekcji utraty synchronizacji posłużyć może stosowne przerwanie (SD_UNLOCK w przypadku dekoderów sygnału SD oraz CP_UNLOCK w przypadku dekoderów sygnału component albo też rejestr TMDSPLL_LCK w odniorniku HDMI) które z pewnym opóźnieniem informuje o takiej sytuacji. Dekodery wideo posiadają zintegrowane mechanizmu pozwalające na wygładzanie niestabilnych przebiegów synchronizacji poziomej, zatem detekcje utraty synchronizacji może zająć nawet kilka linii. Opóźnienie detekcji takiej sytuacji może zostać zredukowane jeśli wykorzystamy do tego zadania układ FPGA.

    Tryb trójstanowy zegara

    Podczas projektowania zasobów układu FPGA odpowiedzialnych za taktowanie systemu niezwykle istotnym jest aby wiedzieć że wiele dekoderów strumieni wideo i odbiorników HDMI wprowadza linie danych oraz zegar w stan trójstanowy po resecie układu. Oznacza to że zegar pikseli LLC nie jest odpowiedni do przeprowadzania synchronicznych resetów.

    Niedopasowanie danych w dwóch strumieniach wideo

    W celu uproszczenia systemu i zmniejszenia ilości pamięci potrzebnej do składania dwóch obrazów w jeden dane docierające do układu FPGA powinny być zsynchronizowane z sobą w taki sposób że N-ty piksel M-tej linii z pierwszej kamery jest odbierany dokładnie w tym samym czasie do N-ty piksel z M-tej linii obrazu pochodzącego z drugiej kamery.

    Może to być nietrywialne do realizacji na wejściu układu FPGA z uwagi na fakt iż ścieżki przesyłu danych z obu kamer mogą posiadać różne opóźnienia wynikające z kiepskiej synchronizacji kamer, różnych długości kabli łączących kamery z systemem. Dekodery wideo mogą także wprowadzać różne opóźnienia, co w konsekwencji spowoduje iż dane nie będą z sobą zsynchronizowane na zadanym poziomie. Spodziewamy się iż w projektowanym systemie z synchronizowanymi kamerami otrzymamy pewne niedopasowanie obrazów o jakąś ilość pikseli obrazu.

    Niedopasowanie obrazów z zsynchronizowanych kamer

    Nawet kamery które są z sobą zsynchronizowane mogą generować niedopasowane dane. Poniższy oscylogram pokazuje sygnały pionowej synchronizacji pochodzącej z dwóch kamer z wyjściem CVBS. Jedna kamera, pracująca jako master, zapewnia sygnały synchronizujące drugiej kamerze, która pracuje jako slave. Wyraźnie widoczne jest rozsunięcie zboczy przebiegów o 380 nanosekund.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Poniższy obrazek pokazuje dane z dekodera po digitalizacji podane na wejście układu FPGA. Widoczne jest przesunięcie się danych o 11 pikseli pomiędzy sobą, spowodowane opóźnieniami pokazanymi na powyższym oscylogramie.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Różnica w długości linii przesyłowych

    Wszystkie połączenia elektryczne w systemie wprowadzają pewne opóźnienia transmisji, zatem należy upewnić się iż wszystkie ścieżki, transmitujące sygnał wideo, są zbliżonej długości, tak aby opóźnienia wszystkich sygnałów były możliwie do siebie zbliżone.

    Opóźnienia wprowadzane przez dekoder wideo/odbiornik HDMI

    Wszystkie dekodery wideo wprowadzają pewne opóźnienia do sygnału, zależne od tego jakie jego funkcjonalności są aktualnie wykorzystywane. Dodatkowo pewne elementy przetwarzania strumienia wideo - takie jak kolejki FIFO pozwalające na zwiększenie głębi koloru - dodają pewne losowe opóźnienie na początku pracy układu. Typowy system wizji stereoskopowej posiada opóźnienia około 5 pikseli. Z kolei system wykorzystujący transmitery HDMI może posiadać opóźnienia wynoszące aż 40 pikseli.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Kompensacja niedopasowania

    Poniższy schemat pokazuje system w którym sygnał analogowy z każdej z kamer digitalizowany jest z wykorzystaniem dedykowanego dekodera. Dane i zegar są niezależne w każdym torze przetwarzania. Oba tory wideo podłączone są do kolejek FIFO (ang. First In First Out rodzaj bufora danych - przyp. tłum.) które buforują nadchodzące dane w celu kompensacji niedopasowania taktowania obu obrazów. Do odczytu z kolejek FIFO wykorzystany jest jeden zegar - na przykład zegar jednego z dekoderów wideo. W systemie zsynchronizowanym w obu torach danych powinien występować zegar o tej samej częstotliwości co zabezpieczea kolejkę FIFO przed przepełnieniem lub niewystarczającym zapełnieniem danymi. Działa to tak długo jak długo obie kamery i oba dekodery są z sobą zsynchronizowane.

    Poprzez załączanie lub wyłączanie wyjść kolejki FIFO układy sterujące kontrolują poziom zapełnienia kolejki w celu zmniejszenia niedopasowania obu obrazów. Jeśli kompensacja zostaje przeprowadzona poprawnie oba otrzymane na wyjściu tego bloku w układzie FPGA obrazy powinny być zsynchronizowane co do piksela. Tak przygotowane dane wideo są następnie przekazywane do układów odpowiedzialnych za produkcję obrazu 3D.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Pomiary niedopasowania

    Niedopasowanie pomiędzy dwoma zdigitalizowanymi strumieniami danych może być mierzone na wyjściu bufora FIFO z wykorzystaniem licznika jednego z zegarów, który jest resetowany sygnałem synchronizacji pionowej jednego z sygnałów wideo. Poniższa ilustracja pokazuje dwa strumienie wideo (vs_a_in oraz vs_b_in) które są niedopasowane o 4 piksele. Liczniki mierzą to niedopasowanie z wykorzystaniem prostego kodu zawartego poniżej. Licznik zaczyna naliczanie na zboczu narastającym sygnału synchronizacji pionowej jednego z sygnałów, a kończy na narastającym zboczu drugiego.

    Jeśli znana jest całkowita długość klatki (w pikselach) ujemna niesymetryczność (kiedy zbocze VS2 wyprzedza zbocze VS1) może być obliczona a wartość licznika może być odjęta od długości trwania ramki. Ujemna wartość niesymetryczności powinna być obliczana gdy asymetria przekracza połowę długości ramki w pikselach. Rezultat tych obliczeń może zostać wykorzystany do korekcji niedopasowanych danych z wykorzystaniem kolejki FIFO.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Kod: verilog
    Zaloguj się, aby zobaczyć kod


    Generacja obrazu wideo 3D z dwóch dopasowanych strumieni wideo

    Gdy tylko piksele, linie i ramki są z sobą w pełni zsynchronizowane układ FPGA może wygenerować, na podstawie dostarczonych danych, obraz 3D, tak jak pokazano to na poniższym schemacie.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D


    Przychodzące dane odczytywane są do pamięci z wykorzystaniem wspólnego dla obu przebiegów zegara. Analizator synchronizacji zależności czasowych analizuje i ekstrahuje z danych informacje o sygnałach synchronizacji, ilości linii i polaryzacji tych sygnałów. Informacje te przekazywane są do układu regenerującego wraz z pozycją aktualnego piksela, co pozwala wygenerować nowy trójwymiarowy obraz z obu kamer. Nowy obraz dodatkowo jest opóźniany tak aby zapewnić dostateczną ilość danych w kolejce FIFO.

    Wideo 3D z obrazami umieszczonymi obok siebie

    Najmniej wymagającym od układu, pod względem pamięci, układ obrazów w strumieniu wideo jest format w którym oba obrazy tworzące obraz 3D umieszczone są obok siebie w jednym strumieniu. Taka architektura przesyłu obrazy 3D wymaga jedynie bufora FIFO dla dwóch linii który przechowuje pojedyncze linie strumienia wideo - po jednej z każdego. Wynikowy obraz jest dwukrotnie szerszy od obrazów wejściowych. Aby to osiągnąć zdwojony zegar jest wykorzystywany do taktowania sygnałów regenerowanej synchronizacji obrazu. Zdwojony zegar najpierw opróżnia dane z pierwszej kolejki FIFO a następnie z drugiej z podwójną prędkością, co pozwala na umieszczenie obrazów obok siebie, tak jak pokazano to poniżej.

    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D
    System scalający wideo z dwóch kamer w celu uzyskania obrazu 3D

    Źródła:
    http://www.analog.com/library/analogdialogue/archives/47-12/stereo_video.html

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 napisał 9501 postów o ocenie 7542, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • Computer ControlsComputer Controls
  • #2
    janko.3.14
    Poziom 9  
    Super artykuł. Właśnie konstruuje drona z systemem FPV i chciałbym wzbogacić go w system 3D - odbiornikiem będą gogle wideo z dekoderem 3D (obraz obok obrazu). Czy spotkał się Pan może z praktycznym rozwiązaniem takiego sytemu scalającego?
  • #3
    ghost666
    Tłumacz Redaktor
    Nie wiem czy jest sens pchać do drona dodatkowy osprzęt (FPGA) zżerający zasoby - prąd etc. Czy nie lepiej próbować przesyłać niezależnie obrazy (z timestampem) i synchronizować je na ziemi.