Prelucrare Imagini
Prelucrare Imagini
Prelucrare Imagini
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Prelucrare</strong> <strong>Imagini</strong><br />
Se da o imagine (cu nuanțe de gri) img.pgm in format PGM. Despre formatul PGM găsiți<br />
informații la următorul link: http://en.wikipedia.org/wiki/Netpbm_format#PGM_example. Pe<br />
scurt:<br />
1. Prima linie conține șirul „P2”;<br />
Pentru simplitate nu vom folosi fișiere ce conțin linii de comentarii # (daca aveți<br />
imagini cu comentarii (obținute de exemplu din irfanview), le eliminați);<br />
2. A doua linie conține numărul de coloane si numărul de linii al imaginii;<br />
3. Cea de-a treia linie conține valoarea maxima pe care o putem găsi in matrice (de<br />
obicei 255);<br />
4. Urmează apoi elementele matricii (pixelii din imagine).<br />
Observații:<br />
<strong>Imagini</strong>le de tip PGM le puteți vizualiza (si converti) folosind programul irfanview<br />
(gratis).<br />
Numărul zero reprezintă negru, numerele mari (ex:255) alb.<br />
Când faceţi prelucrarea, parcurgeţi matricea, mai puţin marginea(de grosime 1 pixel),<br />
deoarece atunci când investigaţi un pixel, trebuie sa-i căutaţi si vecinii, iar pixelilor de<br />
pe margine le lipsesc unul sau mai mulţi vecini. De aceea in imaginile pe care le<br />
folosiţi, aveţi deja prevăzută o margine de culoarea fundalului.<br />
In cele ce urmează vom considera ca fiecare pixel are doar 4 vecini (cei din punctele<br />
cardinale).<br />
Cerința 1:<br />
Scrieți o rutina care sa citească un fișier de tip imagine PGM intr-o matrice.<br />
Scrieți o rutina care sa scrie o matrice intr-un un fișier de tip imagine PGM.<br />
Cerinţa 2:<br />
Din aceasta imagine cu nuanțe de gri să se facă o imagine binara (alb-negru). Aceasta se face<br />
printr-o operaţie de segmentare, astfel încât toţi pixelii ce au o valoare mai mica decât o<br />
anumita valoare (pragul de segmentare) devin 0 (negri) si cei care au o valoare mai mare<br />
devin 255 (albi). Valoarea de segmentare se considera 128.<br />
Cerinţa 3:<br />
Filtraţi (eliminaţi) din imagine pixelii albi singulari. Aceştia sunt pixelii din imagine care nu<br />
au nici un vecin (in punctele cardinale). Eliminarea lor se face înlocuindu-i cu valoare<br />
fundalului.<br />
Cerinţa 4:<br />
Vom considera un obiect ca totalitatea pixelilor albi ce sunt uniţi intre ei. Un pixel este unit cu<br />
altul, daca se afla in una din cele 4 direcţii cardinale (deci consideram că un pixel poate să<br />
aibă doar 4 vecini; daca sunt pe diagonala nu sunt uniți intre ei). Intr-o imagine se pot afla mai<br />
multe obiecte.<br />
Pentru fiecare obiect din imagine identificaţi:<br />
a. aria = numărul total de pixeli din care e compus obiectul;<br />
b. "bounding box" = dreptunghiul ce îl putem construi in care sa încapă obiectul găsit.<br />
c. centru de greutate al obiectului, care se calculează făcând media (separat pe X si pe Y) a<br />
tuturor pixelilor ce compun obiectul.<br />
d. perimetrul obiectului. Vom considera perimetrul ca fiind format din pixelii negri (ce<br />
aparţin obiectului) ce au cel puţin un vecin alb.<br />
Afișați aceste informații pe ecran.<br />
v.0.3
Ex: Pentru o imagine cu un singur obiect genul:<br />
........<br />
.####...<br />
...###..<br />
..###...<br />
........<br />
Afisati:<br />
Obiect 1: A=10 CG=(3,2) BB=(1,1),(5,3) P=9<br />
Cerinta 5:<br />
Scrieți o funcție care sa salveze imagini color de tip PPM. (vezi wikipedia)<br />
Salvați o imagine color (img5.ppm) care sa contina:<br />
imaginea originala(cu nuanțe de gri -> completați același număr in toate cele 3<br />
câmpuri: R, G, B)<br />
In jurul fiecărui obiect desenați un dreptunghi (bonding-box-ul) cu galben (255 255<br />
0), cu un pixel mai mare in fiecare direcție, astfel incat sa nu se suprapună peste<br />
vreunul din pixelii obiectului;<br />
Centrul de greutate afișat(suprapus) cu roșu (255 0 0), 5 pixeli in total: unul exact<br />
in centru si ceilalți 4 in colturile lui, astfel incat sa formeze un mic „X” roșu);<br />
Observații:<br />
1. Păstrați o copie a imaginii inițiale, pentru punctul 5;<br />
2. Operaţiile care presupun modificarea matricii (ex. filtrarea) se efectuează intr-o alta<br />
matrice, deoarece daca modificăm maricea in timp ce o parcurgem se întâmpla<br />
modificări nedorite (vecinii unui pixel pe care ii testam trebuie sa fie vecinii originali,<br />
nu vecini ce ar fi putut fi modificaţi de o operaţie anterioara).<br />
3. După fiecare pas se va afişa afişa imaginea/matricea obţinuta şi se va scrie intr-un<br />
fişier separat (fiecare fişier se va numi img1.pgm, img2.pgm, img3.pgm, img5.ppm in<br />
funcţie de cerinţă).<br />
4. Atenție la perimetru (verificarea daca un pixel e pe margine) sa nu obțineți rezultate<br />
eronate daca ștergeți complet pixelii obiectului pe măsura ce investigați.<br />
v.0.3