+ All Categories
Home > Technology > Aplicare Filtre pe Imagini

Aplicare Filtre pe Imagini

Date post: 27-Jan-2015
Category:
Upload: vlad-petre
View: 795 times
Download: 2 times
Share this document with a friend
Description:
 
9
1 12.01.2011 Aplicarea filtrelor de imagine POSTERIZE + GREYSCALE + PIXELIZE asupra unui Bitmap. Vlad-Ştefan PETRE 341C1 [email protected] http://twitter.com/vladpetre88 http://www.linkedin.com/in/ vladpetre88
Transcript
Page 1: Aplicare Filtre pe Imagini

1 12.01.2011

Aplicarea filtrelor de imagine POSTERIZE + GREYSCALE + PIXELIZE

asupra unui Bitmap.

Vlad-Ştefan PETRE

341C1

[email protected]

http://twitter.com/vladpetre88

http://www.linkedin.com/in/vladpetre88

Page 2: Aplicare Filtre pe Imagini

2 12.01.2011

Efectul Filtrelor

Page 3: Aplicare Filtre pe Imagini

3 12.01.2011

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.

Page 4: Aplicare Filtre pe Imagini

4 12.01.2011

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.

Page 5: Aplicare Filtre pe Imagini

5 12.01.2011

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.

Page 6: Aplicare Filtre pe Imagini

6 12.01.2011

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.

Page 7: Aplicare Filtre pe Imagini

7 12.01.2011

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.

Page 8: Aplicare Filtre pe Imagini

8 12.01.2011

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.

Page 9: Aplicare Filtre pe Imagini

9 12.01.2011

Mulţumesc!

Întrebări?


Recommended