4.12. Potok ISP

Procesor sygnału obrazu (ISP) to sprzętowy potok, który zamienia surowe wartości pikseli z sensora w gotowy obraz kolorowy. Wykonywane na sensorze korekcje na poziomie pikseli stanowią pierwsze etapy tego potoku. Po ich wykonaniu reszta potoku przeprowadza przetwarzanie koloru i formatowanie wyjścia w ustalonej kolejności dla każdej ramki.

Pionowy diagram potoku z ośmioma opisanymi polami, od góry do dołu: ekstrakcja statystyk, automatyczny balans bieli, debayering, korekcja macierzy koloru, korekcja gamma, skalowanie obrazu, przycinanie obrazu i pakowanie pikseli. Strzałka u góry jest opisana jako "skorygowane piksele Bayera", a strzałka u dołu jest opisana jako "gotowa ramka".

Etapy przetwarzania koloru i wyjścia w ISP. Potok wykonuje każdy etap na każdym pikselu ramki, zanim rozpocznie się następny.

4.12.1. Etapy

Każdy etap stosuje po kolei jedno dobrze zdefiniowane przekształcenie. Kolejność ma znaczenie – późniejsze etapy zakładają, że wcześniejsze już zostały wykonane, a kilka etapów przyjmuje też dane wejściowe z wyjścia poprzedniej ramki.

  1. Ekstrakcja statystyk mierzy średnią jasność dla każdego regionu oraz sumy dla każdego kanału ze skorygowanej ramki Bayera. Liczby te zasilają pętle sterujące auto-ekspozycji, auto-wzmocnienia i automatycznego balansu bieli, które następnie aktualizują ustawienia sensora dla następnej ramki.

  2. Wzmocnienia automatycznego balansu bieli skalują każdy piksel Bayera mnożnikiem zależnym od koloru – piksele czerwone przez wzmocnienie R, piksele zielone przez wzmocnienie G, piksele niebieskie przez wzmocnienie B – przesuwając biały punkt odniesienia sceny ku neutralnej szarości, tak aby zarejestrowane kolory wyglądały tak, jak widziało je oko. Mnożniki pochodzą ze statystyk AWB z poprzedniej ramki.

  3. Debayering rekonstruuje brakujące dwa kanały koloru w każdym pikselu z mozaiki Bayera, zamieniając surowe dane jednokanałowe na piksel w trójkanałowy RGB. (Zobacz Debayering.) Wszystko po tym etapie działa na pikselach RGB, a nie na mozaice Bayera.

  4. Korekcja macierzy koloru (CCM) stosuje mnożenie przez macierz 3x3 do każdego piksela RGB, które odwzorowuje natywną odpowiedź czerwono-zielono-niebieską sensora na standardową przestrzeń kolorów. Filtry każdego sensora mają własną odpowiedź spektralną, która nie jest dokładnie tym, czego oczekuje którykolwiek standard; macierz to skalibrowana dla danego sensora transformacja, która zamienia „RGB sensora” na „standardowe RGB”.

  5. Korekcja gamma stosuje nieliniową krzywą do każdego kanału, która kompresuje liniowy sygnał sensora do kodowania dopasowanego do percepcji. Oko dostrzega różnice między ciemnymi tonami bardziej niż różnice między jasnymi tonami, więc kodowanie, które przeznacza większą część swojego budżetu bitów na ciemny kraniec, uchwyca więcej widocznych szczegółów przy danej głębi bitowej.

  6. Skalowanie obrazu zmienia rozmiar ramki z natywnej rozdzielczości sensora do docelowej rozdzielczości wyjściowej. Większość aplikacji działa przy mniejszej liczbie pikseli niż pełna sensora, a skalowanie w dół zmniejsza zarówno przepustowość, jak i obciążenie pamięci wszystkiego, co następuje dalej.

  7. Przycinanie obrazu wyodrębnia podprostokąt przeskalowanej ramki i odrzuca piksele poza nim. Używane do przechwycenia obszaru zainteresowania, dopasowania do określonych proporcji obrazu lub usunięcia obramowania, którego aplikacja nie potrzebuje.

  8. Pakowanie pikseli konwertuje wewnętrzną reprezentację każdego kanału (zwykle 10 lub 12 bitów na kanał) do wybranego formatu wyjściowego i zapisuje wynik do pamięci RAM.

4.12.2. Sprzężenie zwrotne pętli sterującej

Etapy 1 i 2 tworzą pętlę sterującą rozciągającą się na wiele ramek. Statystyki wyodrębnione z ramki N mówią sensorowi, jak jasna była scena i jak układał się jej balans kolorów w tej ramce; sterowniki auto-ekspozycji, auto-wzmocnienia i automatycznego balansu bieli używają tych liczb, aby dobrać nowe wartości rejestrów ekspozycji, wzmocnienia i balansu bieli dla ramki N+1. Nowe wartości wchodzą w życie przy odczycie następnej ramki, wracają statystyki nowej ramki i pętla się zamyka.

Dla sceny, która się nie zmienia, pętla zbiega w ciągu kilku ramek i pozostaje przy stałym ustawieniu. Dla sceny, której jasność lub odcień koloru się zmienia – na przykład kamera przesuwana z wnętrza na nasłonecznione okno – pętla śledzi zmianę przez kilka ramek, a użytkownik widzi krótki dryf jasności lub koloru w drodze do nowego stanu ustalonego.

4.12.3. Gdzie działa ISP

Powszechne są dwa rozwiązania.

  • ISP na sensorze uruchamia cały potok wewnątrz układu sensora i wysyła gotowy obraz RGB. MCU jedynie odbiera wynik.

  • ISP poza sensorem znajduje się w hostującym MCU lub SoC. Sensor wysyła surowy Bayer; krzem MCU (lub jego kod sterownika) uruchamia potok przed przekazaniem gotowej ramki do kodu użytkownika.

Ten podział wpływa na to, jakie formaty wyjściowe sensor może przekazać użytkownikowi bezpośrednio. Sensor z pełnym ISP na układzie pozwala użytkownikowi wybrać dowolny gotowy format obsługiwany przez układ. Sensor bez niego wysyła wyłącznie Bayer, a konwersje formatów odbywają się w krzemie lub oprogramowaniu MCU.