4.12. ISP-kedjan¶
Image signal processor (ISP) är den hårdvarukedja som omvandlar de råa pixelvärdena från sensorn till en färdig färgbild. De pixelvisa korrigeringarna på sensorn är de första stegen i den kedjan. Efter att de har körts utför resten av kedjan färgbehandlingen och formateringen av utdata i en fast ordning för varje bildruta.
Färgbehandlings- och utdatastegen i ISP:n. Kedjan kör varje steg över varje pixel i bildrutan innan nästa steg startar.¶
4.12.1. Stegen¶
Varje steg tillämpar i tur och ordning en väldefinierad transformation. Ordningen spelar roll – senare steg förutsätter att tidigare redan har körts, och ett par av stegen tar även indata från den föregående bildrutans utdata.
Statistikutvinning mäter regionvis genomsnittlig ljusstyrka och kanalvisa summor från den korrigerade Bayer-bildrutan. Siffrorna matar styrslingorna för autoexponering, autoförstärkning och automatisk vitbalans, som sedan uppdaterar sensorns inställningar för nästa bildruta.
Förstärkningar för automatisk vitbalans skalar varje Bayer-pixel med en färgvis multiplikator – röda pixlar med en R-förstärkning, gröna pixlar med en G-förstärkning, blåa pixlar med en B-förstärkning – och skjuter scenens vita referens mot neutralt grått så att de registrerade färgerna ser ut som ögat såg dem. Multiplikatorerna kommer från den föregående bildrutans AWB-statistik.
Debayering rekonstruerar de två saknade färgkanalerna i varje pixel från Bayer-mosaiken och omvandlar rådata med en kanal per pixel till trekanalig RGB. (Se Debayering.) Allt efter detta steg körs på RGB-pixlar i stället för på Bayer-mosaiken.
Färgmatriskorrigering (CCM) tillämpar en 3x3-matrismultiplikation på varje RGB-pixel som mappar sensorns ursprungliga röd-grön-blå-respons till en standardfärgrymd. Varje sensors filter har sin egen spektrala respons, som inte är exakt vad någon standard förväntar sig; matrisen är en sensorvis kalibrerad transform som omvandlar ”sensor-RGB” till ”standard-RGB”.
Gammakorrigering tillämpar en icke-linjär kurva på varje kanal som komprimerar den linjära sensorsignalen till en perceptionsanpassad kodning. Ögat märker skillnader mellan mörka toner mer än skillnader mellan ljusa toner, så en kodning som lägger mer av sin bitbudget på den mörka änden fångar mer synbar detalj vid ett givet bitdjup.
Bildskalning ändrar storleken på bildrutan från sensorns ursprungliga upplösning till målupplösningen för utdata. De flesta tillämpningar körs på mindre än sensorns fulla antal pixlar, och nedskalning minskar både bandbredden och minnestrycket på allt som följer.
Bildbeskärning extraherar en delrektangel av den skalade bildrutan och kastar bort pixlarna utanför den. Används för att fånga ett intresseområde, matcha ett specifikt bildförhållande eller ta bort en kant som tillämpningen inte behöver.
Pixelpackning omvandlar den interna kanalvisa representationen (vanligtvis 10 eller 12 bitar per kanal) till det valda utdataformatet och skriver resultatet till RAM.
4.12.2. Styrslingans återkoppling¶
Steg 1 och 2 bildar en styrslinga som sträcker sig över flera bildrutor. Statistiken som utvinns från bildruta N talar om för sensorn hur ljus scenen var och hur dess färgbalans låg den bildrutan; styrenheterna för autoexponering, autoförstärkning och automatisk vitbalans använder de siffrorna för att välja nya registervärden för exponering, förstärkning och vitbalans för bildruta N+1. De nya värdena får effekt vid avläsningen av nästa bildruta, den nya bildrutans statistik kommer tillbaka, och slingan sluts.
För en scen som inte ändras konvergerar slingan inom några få bildrutor och stannar vid en konstant inställning. För en scen vars ljusstyrka eller färgton ändras – till exempel när kameran panorerar från inomhus till ett solbelyst fönster – följer slingan förändringen över flera bildrutor, och användaren ser en kort ljusstyrke- eller färgdrift på vägen mot det nya stabila tillståndet.
4.12.3. Var ISP:n körs¶
Två arrangemang är vanliga.
En ISP på sensorn kör hela kedjan inuti sensorchippet och matar ut en färdig RGB-bild. MCU:n samlar bara in resultatet.
En ISP utanför sensorn finns i värd-MCU:n eller SoC:n. Sensorn matar ut rå Bayer; MCU:ns kisel (eller dess drivrutinskod) kör kedjan innan den färdiga bildrutan lämnas över till användarkoden.
Uppdelningen påverkar vilka utdataformat sensorn kan lämna direkt till användaren. En sensor med en fullständig ISP på chippet låter användaren välja från vilket färdigt format som helst som chippet stöder. En sensor utan en sådan matar bara ut Bayer, och formatkonverteringarna sker i MCU-kisel eller mjukvara.