Bild från FPGA till VGA (2 / 3 steg)
Steg 2: Bildbehandling
Vi behöver extrahera råa pixeldata från bilden och sedan komprimera som och rekonstruera i FPGA via VGA-kabel. För detta använde jag Matlab, men du kan använda python också.
En viktig sak att nämna är att den en pixel består av 3 delar: rött, grönt och blått och kallas därför RBG. Vilket innebär att någon annan färg (orange, brunt...) kan skapas med hjälp av dessa 3 bas färger.
Vanligtvis finns det 3 byte per pixel hängivna för färger (en Byte per bas färg). För VGA alla 3 färger lagras i endast en Byte således måste vi på något sätt komprimera tre Bytes till en. Från databladet visas som de första 3 bitarna (från den minst signifikanta biten / från mest rätt position) är röda, sedan 3 lite för grön och de slutliga 2 bitarna för blå färger.
För det första Använd Matlab funktion imread ('name.png'); som läser bilden och lagrar pixel om. Då vi kan extrahera R, G & B komponenter i separata variabler och sedan konvertera det till dubbla format för ytterligare konverteringar. För röd och grön komponenter att omsätta 1 Byte (8 bitar) i 3 bitar kan vi höja decimalvärdet av komponenten till 3/8 (matematiskt, stiga 3 bitar av totala bitars nummer rot, som är 8..). För blå komponent är detta nummer 1/4 (eller 2/8, som är samma). Översätta resultatet av genomförbart att uint8 (heltal för 8 bitar) som kommer även avrunda resultatet. Några av de avrundade värdena kan få lite större än väntat (på grund av avrundning till tak), alltså minus ett för bitarna att inte overflow. Då måste vi kombinera alla 3 färger tillbaka tillsammans i ett enda uint8 värde. Detta görs genom flytta grön 3 gånger, blå 6 gånger och sedan lägga röd, grön & blå tillsammans. Slutligen måste lagra allt i en .lista fil i HEX-format. (se Matlab-fil).
Efter att ha kört skriptet Matlab kommer data att lagras i "Mickey.list". Innan du avslutar Matlab, läsa storleken av varierande färg (höger eller vänster sida i Matlab fönstret där alla variabler lagras) eftersom kommer att du behöva ange detta värde i Verilog koden om hur många rader i filen att läsa (för Mickey.jpg är det 6960 x 2 char, således notera ner 6960). Jag ger också gimp.txt och gimp.list för dem du inte vill göra Matlab del.