24.08.2013 Views

Prelucrare Imagini

Prelucrare Imagini

Prelucrare Imagini

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!