I.U.M. Modellazione Geometrica

Laboratorio di I.U.M. Modellazione Geometrica

Esercizio 1

Scrivere un algoritmo per convertire una regione da una rappresentazione secondo il contorno ad una rappresentazione secondo lo spazio occupato, più precisamente a griglia di pixel. La regione e' una regione poligonale semplicemente connessa. Convenzioni: In questo modo evitiamo i casi particolari di vertici del poligono che cadono sul lato comune di due pixel, o sul vertice comune di quattro pixel della griglia.

Materiale di supporto

Qui trovate un esempio di input, un esempio di output, e un programma grafico che vi consentira' di visualizzare input e output per controllare la correttezza del risultato.

Algoritmo

1. Dimensionamento della griglia

Dati i valori minimi e massimi delle ascisse e delle ordinate dei vertici del poligono, la griglia deve estendersi almeno, su ciascuno dei due assi coordinati, dalla parte intera inferiore del minimo alla parte intera superiore del massimo.

2. Determinazione dei pixel da riempire

Ci sono tre tipi di pixel da riempire:
  1. pixel che contengono un vertice (rossi in figura)
  2. pixel che sono attraversati da un lato (verdi in figura)
  3. pixel che sono contenuti interamente all'interno della regione (gialli in figura)

2.1 Ricerca dei pixel contenenti un vertice

Sia V=(x,y) un vertice del poligono. Il pixel che contiene V si determina semplicemente calcolando la parte intera inferiore e superiore dei valori di x e di y.

2.2 Ricerca dei pixel attraversati da un lato

Sia e = V1 - V2 = (x1,y1) - (x2,y2) un lato del poligono. Siano P1 e P2 i pixel che contengono V1 e V2. Gli altri pixel attraversati da e si trovano muovendosi per adiacenze da P1 a P2. Per passare da un pixel al successivo, si attraversa il lato o il vertice che e' intersecato da e (e che porta d un pixel nuovo, diverso da quello appena esaminato in precedenza).

2.3 Ricerca dei pixel interni alla regione

Idea di base: supponiamo di conoscere un pixel P che giace interamente dentro la regione.

Possiamo muoverci per adiacenze di lati da P visitando (e riempiendo) tutti i pixel che possiamo raggiungere senza attraversare pixel appartenenti al contorno della regione.

In pratica si compie una visita in DFS del grafo che ha per nodi i pixel e ha un arco fra ogni coppia di pixel che condividono un lato.

Questo metodo pero' ha il problema che bisogna prima trovare un pixel interno P da cui partire.

Variante piu' facile: Anziche' cercare i pixel da riempire (= quelli interni alla regione), cerchiamo i pixel da lasciare vuoti (= quelli esterni). Infatti sappiamo che ogni pixel sul contorno della matrice che non sia stato marcato come pieno (non contenente vertici ne' attraversato da lati) e' un pixel esterno alla regione.

Complessita' temporale

Sia p il numero di lati del poligono e sia la nostra griglia una matrice n X m.

Problemi intrinseci del metodo

Il metodo funziona solo se l'insieme dei pixel esterni e' 4-connesso. Altrimenti possono restare "sacche" di pixel esterni alla regione non raggiungibili a partire dal controno della griglia.

Esercizio 2

Scrivere un algoritmo per convertire una regione da una rappresentazione tramite griglia di pixel ad una rappresentazione tramite quadtree di regione.

Nota

In questo esercizio non e' richiesto di costruire effettivamente (memorizzandolo) l'albero quaternario che rappresenta il quadtree, ma di determinare le sue foglie. Tuttavia non e' vietato, se risulta piu' semplice, costruire l'albero e poi produrre in output le sue foglie.

Materiale di supporto

Qui trovate un esempio di input, un esempio di output, e un programma grafico che vi consentira' di visualizzare l'output per controllare la correttezza del risultato.

Algoritmo

1. Ridimensionamento della griglia

Per poter costruire il quadtree, il numero di pixel su ogni lato della griglia deve essere una potenza di 2. Quindi, se la nostra immagine e' m X n pixel, occorre prima portarla a k X k pixel, dove k e' la piu' piccola potenza di 2 che sia maggiore di m e di n, completandola con pixel vuoti.

2. Costruzione del quadtree

E' possibile costruire il quadtree partendo dalla radice (cioe' iniziando a guardare se per caso l'immagine e' tutta bianca o tutta nera, in caso contrario dividerla in quattro quadranti e cosi' ricorsivamente...) oppure partendo dalle foglie (ossia iniziando a guardare i pixel dell'immagine a 4 a 4 e vedere se hanno lo stesso colore, nel caso raggrupparli in un quadrato piu' grande e cosi' via...).