Kamerabaserad systemdesign del 3 – vad händer bakom skärmen
I de två första artiklarna i den här serien diskuterades val av bildsensor och grundläggande utmaningar med signalbehandling som man stöter på vid utformningen av ett inbäddat kamerasystem. Den här gången tittar Giles Peckham från Xilinx och Adam Taylor, CEng FIET, närmare på bildbehandlingskedjan.
Om man betraktar signalkedjan i detalj kan man se att den innehåller ett antal gemensamma element för att fånga, behandla, analysera och lagra eller visa bilderna som identifieras av sensorn. Ur ett övergripande systemperspektiv kan dessa anses falla inom tre funktionella grupper.
Gränssnitt till bildsensor
Beroende på typen av sensor måste detta gränssnitt tillhandahålla nödvändiga tidsstämplar, skärningar och konfigurationssignaler, samt ta emot sensordata, avkoda dem vid behov och formatera dem innan de skickas vidare till bildbehandlingskedjan.
Bildbehandlingskedjan
Bildbehandlingskedjan tar emot bilddata från enhetsgränssnittet och utför åtgärder som färgfiltermatrisinterpolering och färgrymdskonvertering. Detta kan vara färg till gråskala, till exempel. All algoritmisk styrning som behövs tillämpas också inom bildbehandlingskedjan. Detta kan variera från enkla algoritmer som brusreducering eller kantförbättring till mer komplicerade algoritmer som objektigenkänning eller optiskt flöde. Det är vanligt att kalla algoritmimplementeringen för uppströmsdelen av bildbehandlingskedjan. Den här delens komplexitet beror på den aktuella tillämpningen. Utdataformateringen, som konverterar behandlade bilddata till rätt format för att matas ut till en bildskärm eller ett kommunikationsgränssnitt, kallas för nedströmsdelen.
Systemövervakning och -kontroll
Det här är separat från funktionerna för sensorgränssnitt och bildbehandling, och fokuserar på två aspekter. Den första är att hantera konfiguration av bildbehandlingskedjan, tillhandahålla analys på bilden och uppdatera bildbehandlingskedjan efter behov under algoritmkörningen. Den andra aspekten är kontroll och hantering av det inbäddade kamerasystemet i stort, vilket omfattar att ta hand om:
* Energisparfunktioner och sekvensering av enheternas kraftförsörjningsskenor
* Genomförande av självtest och andra systemhanteringsfunktioner
* Kommunikation via nätverk eller punkt-till-punkt
* Konfigurering av bildenheten via en I2C- eller SPI-länk före de första bildbehandlingsåtgärderna
I vissa tillämpningar kan systemövervakningen även få åtkomst till en bildrutelagring och köra algoritmer på bildrutorna i det. I sådana fall är systemövervakningen kapabel att bli en del av bildbehandlingskedjan.
Implementeringsutmaningar
Sensorns gränssnitt, bildbehandlingskedja och bildskärms- eller minnesgränssnittet kräver alla förmågan att hantera höga databandbredder. Systemövervakning och -kontroll, å andra sidan, måste kunna behandla och svara på kommandon som tas emot via kommunikationsgränssnittet och ge stöd för extern kommunikation. Om systemövervakningen även ska utgöra en del av bildbehandlingskedjan krävs en högpresterande processor.
För att uppfylla sådana krav kan inbäddade kamerasystem implementeras med en kombination av en huvudprocessor och tillhörande FPGA eller ett programmerbart system på ett chip (SoC), till exempel en Xilinx Zynq-enhet som nära integrerar en högpresterande processor med FPGA-infrastruktur (figur 1). Utmaningar inom vart och ett av de tre övergripande områdena påverkar de enskilda funktioner som behövs och hur de implementeras.
Fig 1. Ett programmerbart Zynq-SoC kan implementera viktiga systemfunktioner på ett enda chip (klicka för större bild)
Enhetsgränssnitt
Sensorns gränssnitt bestäms av den valda bildsensorn. De flesta inbäddade kameratillämpningar använder CMOS-bildsensorer (CIS), som kan ha antingen en parallell CMOS-utdatabuss med statusflaggor eller en snabb seriell kommunikation för att stödja snabbare bildfrekvenser än vad som är möjligt med ett parallellt gränssnitt. Detta kan förenkla systemgränssnittet på bekostnad av en mer komplex FPGA-implementering.
För att aktivera synkronisering är det vanligt att ha datakanaler som innehåller bilden och andra dataord tillsammans med en synkroniseringskanal som innehåller kodord som definierar innehållet på datakanalen. Förutom data- och synkroniseringsband finns det även ett klockband eftersom gränssnittet är källsynkront. Dessa seriella höghastighetband implementeras normalt som LVDS eller som LVDS med reducerat sving för att minska systembruset och energiförbrukningen.
Oavsett gränssnitt måste sensorn vanligen konfigureras innan någon bild kan genereras. Det görs vanligtvis via ett gränssnitt för allmänna ändamål som I2C eller SPI.
Implementering av det här gränssnittet i en FPGA säkerställer inte bara den höga signalbandbredd som krävs, utan underlättar även integrering med bildbehandlingskedjan. I2C- eller SPI-sensorkonfigurationsgränssnittet kan implementeras av antingen FPGA eller av processorn för systemövervakning och -kontroll.
Bildbehandlingskedja
Bildbehandlingskedjan består av elementen och gränssnitten med bildpunktsutdata från enhetsgränssnittet både uppströms och nedströms. Men bildpunkterna som tas emot kanske inte är i ett format som kan användas för att visa en bild korrekt. Bildkorrigering kan även krävas, särskilt om en färgsensor används.
För att hålla dataflödet på den nivå som krävs implementeras bildbehandlingskedjor ofta i FPGA:er för att utnyttja deras parallella natur och låta uppgifter ledas i pipelines för att säkerställa hög bildfrekvens. Det är även viktigt att tänka på svarstider i tillämpningar som avancerade system för förarassistans. Genom att basera bildbehandlingskärnorna runt ett gemensamt sammankopplingsprotokoll förenklas sammankopplingen av behandlings-IP:t och bidrar till att upprätta en effektiv bildbehandlingskedja. AXI är ett av de vanligaste protokollen, bland ett antal som är vanliga, tack vare dess flexibla natur som stöder både minnesmappade och strömmade gränssnitt.
Typiska behandlingssteg inom bildbehandlingskedjan är:
* Färgfiltermatris: Generering av varje bildpunkts färg, som är resultatet av Bayermönstret på sensorn
* Färgrymdskonvertering: Konvertering från RGB till YUV, som används i många bildbehandlingsalgoritmer och utdatascheman
* Färgmättnadsomsampling: Konvertering av YUV-bildpunkter till en effektivare bildpunktskodning
* Tillämpning av bildkorrigeringsalgoritmer som färg- eller gammakorrigering, eller utföra bildförbättring eller brusreducering
* Nedströms kan videoutgångstimingen konfigureras och konvertera tillbaka till internt parallellt utdatavideoformat innan de skickas till drivrutinen som behövs
Vissa system använder även externa DDR-minnen som en bildrutelagring. Ofta är detta även tillgängligt på processorsidan av SoC:t, vilket gör att systemövervakaren kan överföra data via nätverk som Gigabit Ethernet eller USB vid behov eller att agera som en förlängning av bildbehandlingskedjan.
Systemövervakning
Detta implementerats vanligtvis i processorn, för att behandla kommandon för att konfigurera bildbehandlingskedjan enligt tillämpningens krav. För att göra så att kommandon kan tas emot och behandlas måste systemövervakningen ha stöd för flera kommunikationsgränssnitt, från enkelt RS232, Gigabit Ethernet, USB samt PCIe eller mer specialiserade gränssnitt som CAN i fordonstillämpningar.
Om arkitekturen för det inbäddade kamerasystemet medger detta kan processorn användas för att generera överläggsinformation för bilder som kan läggas ovanpå utdatabilden. Åtkomst till bilddata gör det även möjligt för processorn att utföra ytterligare behandling, möjligen genom att dra nytta av bibliotek med öppen källkod som OpenCV, OpenCL och OpenVX, eller samla in statistik som histogram av distributionen av bildpunktsvärden.
Knyta ihop säcken
I nästa artikel i den här serien beskrivs hur du skapar ett fungerande kamerasystem med redan tillgängliga verktyg med en färdigförpackad sats som innehåller ett Zynq 7020 programmerbart SoC och en kommersiell bildsensormodul.
Giles Peckham, Xilinx och Adam Taylor, CEng FIET
Filed under: Embedded