4.11. Debayering

Surowa ramka Bayera niesie tylko jeden kanał koloru na piksel. Przekształcenie jej w normalny trójkanałowy obraz RGB oznacza uzupełnienie dwóch brakujących kanałów w każdym pikselu poprzez interpolację z sąsiednich pikseli o właściwym kolorze. Ta interpolacja to debayering (nazywany też demozaikowaniem). Dominuje kilka rodzin algorytmów.

4.11.1. Super-piksel

Najtańsze podejście redukuje każdy kafelek Bayera 2x2 – jedna komórka czerwona, jedna niebieska i dwie zielone – do pojedynczego piksela wyjściowego:

  • kanał czerwony to wartość komórki czerwonej;

  • kanał niebieski to wartość komórki niebieskiej;

  • kanał zielony to średnia z dwóch komórek zielonych.

Każdy kafelek wejściowy 2x2 staje się jednym pikselem wyjściowym, więc gotowy obraz ma połowę szerokości i połowę wysokości sensora, z jedną czwartą liczby pikseli. Super-piksel jest szybki i wolny od artefaktów interpolacji, ale koszt rozdzielczości czyni go ostatecznością – jest rzadko używany.

4.11.2. Dwuliniowy (bilinear)

Interpolacja dwuliniowa (bilinear) uśrednia najbliższe piksele o właściwym kolorze, zamiast je kopiować lub podsumowywać. Dokładny sposób uśredniania zależy od tego, jaki kolor rejestruje piksel centralny, ponieważ cztery przypadki rozkładają brakujące kanały wokół sąsiedztwa 3x3 w różny sposób.

Piksel zielony w wierszu czerwono-zielonym. Brakująca wartość czerwona uśrednia dwóch czerwonych sąsiadów po lewej i prawej; brakująca niebieska uśrednia dwóch niebieskich sąsiadów powyżej i poniżej.

Sąsiedztwo wzoru Bayera o 3 kolumnach i 3 wierszach wyśrodkowane na zielonym pikselu w wierszu czerwono-zielonym. Komórki na lewo i na prawo od centrum są czerwone; komórki powyżej i poniżej są niebieskie; komórki narożne są zielone. Białe strzałki wskazują do wewnątrz od dwóch komórek czerwonych i dwóch komórek niebieskich ku centrum.

Brakujący czerwony pochodzi od poziomych sąsiadów czerwonych; brakujący niebieski od pionowych sąsiadów niebieskich.

Piksel zielony w wierszu zielono-niebieskim. Ten sam kształt z zamienionym czerwonym i niebieskim. Brakująca wartość czerwona uśrednia dwóch czerwonych sąsiadów powyżej i poniżej; brakująca niebieska uśrednia dwóch niebieskich sąsiadów po lewej i prawej.

Sąsiedztwo wzoru Bayera o 3 kolumnach i 3 wierszach wyśrodkowane na zielonym pikselu w wierszu zielono-niebieskim. Komórki powyżej i poniżej centrum są czerwone; komórki na lewo i na prawo są niebieskie; komórki narożne są zielone. Białe strzałki wskazują do wewnątrz od dwóch komórek czerwonych i dwóch komórek niebieskich ku centrum.

Brakujący czerwony pochodzi od pionowych sąsiadów czerwonych; brakujący niebieski od poziomych sąsiadów niebieskich.

Piksel czerwony. Brakująca wartość zielona uśrednia czterech głównych zielonych sąsiadów (powyżej, poniżej, po lewej, po prawej). Brakująca niebieska uśrednia czterech ukośnych sąsiadów niebieskich.

Sąsiedztwo wzoru Bayera o 3 kolumnach i 3 wierszach wyśrodkowane na czerwonym pikselu. Czterej główni sąsiedzi (powyżej, poniżej, po lewej, po prawej) są zieleni; cztery ukośne komórki narożne są niebieskie. Białe strzałki wskazują do wewnątrz od wszystkich ośmiu sąsiadów ku centrum.

Brakujący zielony pochodzi od czterech głównych sąsiadów zielonych; brakujący niebieski od czterech ukośnych sąsiadów niebieskich.

Piksel niebieski. Lustrzane odbicie przypadku czerwonego. Brakujący zielony uśrednia czterech głównych zielonych sąsiadów, a brakujący czerwony uśrednia czterech ukośnych sąsiadów czerwonych.

Sąsiedztwo wzoru Bayera o 3 kolumnach i 3 wierszach wyśrodkowane na niebieskim pikselu. Czterej główni sąsiedzi są zieleni; cztery ukośne komórki narożne są czerwone. Białe strzałki wskazują do wewnątrz od wszystkich ośmiu sąsiadów ku centrum.

Brakujący zielony pochodzi od czterech głównych sąsiadów zielonych; brakujący czerwony od czterech ukośnych sąsiadów czerwonych.

Interpolacja dwuliniowa zachowuje pełną rozdzielczość sensora i jest wystarczająco gładka do większości zastosowań, ale wciąż wykazuje artefakty na krawędziach. Ostre przejście między dwoma kolorami przecina siatkę pikseli w określonej orientacji, a uśrednianie w poprzek krawędzi nieco ją zmiękcza. Tam, gdzie krawędzie koloru i luminancji nie pokrywają się dokładnie, w obrazie wyjściowym pojawiają się słabe kolorowe obwódki.

4.11.3. Poza interpolacją dwuliniową

Istnieje szereg lepszych algorytmów debayeringu. Niektóre używają większych sąsiedztw niż mały krzyż jednokolorowych sąsiadów w interpolacji dwuliniowej i ważą próbki starannie dobranymi współczynnikami; inne wykrywają kierunek lokalnych krawędzi i ukierunkowują interpolację wzdłuż tego kierunku, tak aby krawędź biegnąca przez siatkę pikseli pozostała ostra zamiast się zmiękczać. Każde z tych podejść redukuje kolorowe obwódki i zmiękczenie krawędzi pozostawiane przez interpolację dwuliniową, kosztem większej liczby obliczeń na piksel i większej ilości krzemu (lub większej mocy obliczeniowej po stronie MCU).

Jakość debayeringu dostępna na danej OpenMV Cam jest specyficzna dla platformy – zależy od tego, co zapewniają sensor i MCU na tej kamerze.

4.11.4. Gdzie działa debayering

Procesor sygnału obrazu (ISP) – znajdujący się na samym układzie sensora lub po stronie MCU – w większości przypadków debayeruje każdą ramkę, zanim opuści ona potok obrazowania. Kod użytkownika otrzymuje gotowy trójkanałowy obraz RGB, nigdy nie dotykając surowej mozaiki.

ISP można też poinstruować, aby przepuścił surową ramkę Bayera bez zmian. Surowy Bayer zajmuje mniej pamięci niż obraz po debayeringu – jeden bajt na piksel zamiast trzech – co czyni go użytecznym, gdy wąskim gardłem jest przechowywanie ramek, podczas przechwytywania do przetwarzania offline lub gdy projekt chce zastosować własny algorytm debayeringu programowo.