Aplicare Filtre pe Imagini
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
797
On Slideshare
797
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Aplicarea filtrelor de imagine POSTERIZE + GREYSCALE + PIXELIZE asupra unui Bitmap. Vlad-Ştefan PETRE 341C1 vlad@vladpetre.com http://twitter.com/vladpetre88 http://www.linkedin.com/in/vladpetre881 12.01.2011
  • 2. Efectul Filtrelor2 12.01.2011
  • 3. Implementarea Serială • Citirea header-ului bmp din fişierul de intrare într-o structură de date. • Citirea informaţiilor despre pixeli (secvenţe de [R,G,B]) din fişierul de intrare într-un vector. • Aplicarea filtrelor pixel cu pixel asupra secvenţelor de [R,G,B]. • Scrierea header-ului bmp într-un fişier de ieşire. • Scrierea noii secvenţe de [R,G,B] în fişierul de ieşire.3 12.01.2011
  • 4. Implementarea OpenMP • Paralelizarea for-ului care aplică filtrele pixel cu pixel prin inserarea directivei: #pragma omp parallel for • Vectorul care stochează informaţiile despre pixeli rămâne global (deci partajat) între firele de execuţie.4 12.01.2011
  • 5. Implementarea Pthreads • Vectorul care stochează informaţiile despre pixeli rămâne global (deci partajat) între firele de execuţie. • Codul care aplică filtrele asupra imaginii este scris într-o rutină pthreads. • Fiecare thread, în funcţie de id-ul său, va aplica filtrul asupra unei fâşii din imagine.5 12.01.2011
  • 6. Implementarea MPI • Vectorul care stochează informaţiile despre pixeli nu mai poate să fie partajat între firele de execuţie. • Threadul 0 (master) se va ocupa doar de citirea/scrierea în fişiere, de împărţirea imaginii în bucăţi şi de comunicarea/transferurile cu thread- urile slave. • Imaginea se împarte într-un număr de bucăţi egal cu numărul de thread- uri. Fiecare bucată trebuie să aibă un număr par de linii de pixeli (exceptând ultima), aceasta fiind o constrângere a filtrului pixelize. • Fiecare thread primeşte o astfel de bucată împreună cu dimensiunile ei. • Fiecare thread va aplica filtrele asupra bucăţii lui de imagine, după care va trimite noua bucată de imagine thread-ului master.6 12.01.2011
  • 7. Rezultate Serial OpenMP Pthreads MPI Test 1 0m1.470s 0m1.346s 0m1.425s 0m2.859s Test 2 0m1.482s 0m1.405s 0m1.384s 0m2.961s Test 3 0m1.481s 0m1.390s 0m1.395s 0m3.137s Notă: • Toate testele au fost rulate pe un procesor AMD Turion TL-58 X2 Dual-Core 1900MHz, având ca sistem de operare Ubuntu 10.04 32bit. • Toate binarele au fost compilate cu optiunea –g (exemplu: gcc –g). • Fişierul de intrare este un bitmap cu dimensiunea 5616x3744 pixeli (60 MB). • Pentru paralelizarea OpenMP am folosit schedule guided.7 12.01.2011
  • 8. Concluzii • Aplicarea efectivă a acestor 3 filtre nu este o operaţie computaţional intensivă. • Viteza nu poate fi îmbunătăţită cu mult datorită acceselor la memorie (se observă foarte bine în acest caz cum memoria este mai lentă decât procesorul). • Varianta MPI este cea mai ineficientă datorită faptului că trebuiesc transferate bucăţile de imagine către şi de la thread-urile slave. • Variantele OpenMP şi Pthreads se dovedesc a fi cele mai potrivite pentru implementarea de faţă datorită faptului că imaginea este partajată între thread-uri (nu se pierde astfel timp cu transferuri de date între thread-uri), doar calculele în sine fiind paralelizate.8 12.01.2011
  • 9. Mulţumesc! Întrebări?9 12.01.2011