230 likes | 354 Views
OO2-project: Beeldbewerking G. de Haan EH9.27. Inhoud. Beeldbewerking Waar gaat het over? Wat is een beeld? Hoe wordt beeld opgeslagen? De opdracht: Een 3x3 lineair filter Wat doet het? Wat kan je ermee? Praktische tips. Waar gaat het over?. This is our field. WEB.
E N D
Inhoud • Beeldbewerking • Waar gaat het over? • Wat is een beeld? • Hoe wordt beeld opgeslagen? • De opdracht: Een 3x3 lineair filter • Wat doet het? • Wat kan je ermee? • Praktische tips
This is our field WEB Video processing in ES 72 Hz 1:1 85 Hz 1:1 95 Hz 1:1 24 Hz 1:1 25 Hz 1:1 30 Hz 1:1 VGA, SVGA, XVGA, etc.. 50 Hz 2:1 60 Hz 2:1 50 Hz 2:1 60 Hz 2:1 100 Hz 2:1 CIF QCIF 1-25Hz 1:1 Flat panel displays
400 pixels/lijn 40 pixels/lijn 300 lijnen 30 lijnen Een (z/w) beeld is een matrix van helderheidswaarden Meer pixels betere beeldkwaliteit
Beeld in een 1-dimensionaal pixel-array width 0 y x Width*height Address: [y*width+x]
Hoeveel bits per pixel moeten we opslaan? Experiment: We kunnen ongeveer 200 niveaux in een beeld onderscheiden We gebruiken daarom een 8 bit representatie voor de luminantie
Het input bestand met beeld data (name.y format) football.y bicycle.y File: {byte0,byte1,……..byten, bytewidth*height} Pixel linksboven Pixel rechtsonder Voorbeeld: Twee pixels boven elkaar b.v.: byten en byten+width
De opdracht: Een 3x3 filter
3x3filter Voorbeeld: filter coefficienten allemaal “1” Wat doet een 3x3 filter met een beeld? • 3x3 Filter vervangt elk pixel (byte) in de file door een gewogen som van dat pixel en zijn 8 directe buren: • Met: • En filter-coefficient C gerepresenteerd door e e n byte
Wat kunnen we er mee? (blur) Filter coefficienten: +1 +1 +1 +1 +1 +1 +1 +1 +1
C-code for blurring for(int a=width+1;a<width*height-(width+1);a++){ buf_o[a]=(unsigned char)(( (int)buf_i[a-1 - width] + (int)buf_i[a - width] + (int)buf_i[a+1- width] + (int)buf_i[a-1 ] + (int)buf_i[a ] + (int)buf_i[a+1 ] + (int)buf_i[a-1 +width] + (int)buf_i[a +width] + (int)buf_i[a+1+width] +4 )/ 9); }
Wat kunnen we er mee? (sharpen) Filter coefficienten: -1 -1 -1 -1 12 -1 -1 -1 -1
C-code for sharpening for(int a=width+1;a<width*height-(width+1);a++){ result=(( -1* (int)buf_i[a-1 - width] + -1* (int)buf_i[a - width] + -1* (int)buf_i[a+1- width] + -1* (int)buf_i[a-1 ] + 12* (int)buf_i[a ] + -1* (int)buf_i[a+1 ] + -1* (int)buf_i[a-1 +width] + -1* (int)buf_i[a +width] + -1* (int)buf_i[a+1+width] +2 )/ 4); if(result<0) buf_o[a]=0; else if(result>255) buf_o[a]=255; else buf_o[a]=result; }
Wat kunnen we er mee? (find edges) Filter coefficienten: -1 -1 -1 -1 8 -1 -1 -1 -1 +128
C-code for edge detection for(int a=width+1;a<width*height-(width+1);a++){ result=( -1* (int)buf_i[a-1 - width] + -1* (int)buf_i[a - width] + -1* (int)buf_i[a+1- width] + -1* (int)buf_i[a-1 ] + 8* (int)buf_i[a ] + -1* (int)buf_i[a+1 ] + -1* (int)buf_i[a-1 +width] + -1* (int)buf_i[a +width] + -1* (int)buf_i[a+1+width] +128); if (result<0) buf_o[a]=0; else if (result>255) buf_o[a]=255; else buf_o[a]=result; }
Tips • Voorkom dat er overflows optreden • “Clip” gewogen som b.v. tussen 0 en 255 (range van 1 byte) • De efficiëntie test betreft hetzelfde algoritme, maar met andere weegfactoren (filter-coëfficiënten) • De plaatjes zijn 406kB • Vanwege tijd nodig voor uploaden FPGA slechts deel van 128x128 pixels bewerken • 16kB voor input-plaatje en 16kB voor output-plaatje • Om resultaat te visualiseren kun je het 128x128 blok van het oorspronkelijke beeld vervangen door het processing-resultaat en met de “view-button” van Windows-applicatie tonen op scherm
Tot slot • Deze presentatie komt beschikbaar op de OO2 web-site • Zip-file “ImProc.zip op de web-site • Enkele plaatjes in .y-formaat • Windows applicatie, ImProc.exe, om effect van 3x3 filtering to demonstreren Image Processing Application