venerdì, aprile 20, 2007

Level-set

Cosa posso dire dei level-set? Che sono uno strumento formidabile, stupendo, comodissimo.. MA:
- l'obbligo di rappresentazione discreta ne limita l'utilizzo a 2 e 3 dimensioni.. con voxel spesso troppo grandi;
- l'elaborazione di uno o più volumi descriventi dei level set diventa oneroso data la quantità di dati da elaborare;
- la loro algebra è molto elegante dal punto di vista teorico, ma nella pratica si scontra con moltissime problematiche, soprattutto quelle di rappresentazione sopracitate.

QUINDI:
Perchè non costruire una sotto-algebra dei level-set manipolabile analiticamente in maniera comoda, così da poter rappresentare efficientemente (in spazio) i level-set per qualunque dimensionalità e da poterli manipolare efficientemente (in tempo) rimuovendo gli ostacoli che ora come ora mostrano?

IDEE:
- si può pensare di utilizzare una famiglia ristretta di funzioni distanza da comporre fra di loro;
- si può mantenere il level-set descritto analiticamente durante tutte le elaborazioni fino a quando non ne servono direttamente i dati (risultati finali o parziali);
- si possono utilizzare tecniche come marching-squares o marching-cubes per determinare l'approssimazione discreta del level-set reale a una precisione arbitraria, e solo quando serve.

Meditate, level-settatori, meditate ;)

mercoledì, aprile 18, 2007

Complicità

Complicità


Da soli pochi giorni
l'anime osserviamo,
scoperta par ch'adorni
l'esistente ricamo.

Sguardo complice scagli,
ch'io lo so già cogliere,
seguir mia pazzia scegli,
mio combaciant'essere.

Com'incastro profondo:
completiamo diverso,
spirito pareggiando;
nulla pare avverso.

Con breve cors'ora sò,
angelica visione,
ch'armonia simil non può
ch'esser dolce passione.

Fiori siamesi, sbocciati lontani,
or sfiorano delicati petali;
ancor ne gusto 'l brivido leggero,
su foglie, stelo, corolla, intrise
d'aroma soave di tua presenza.

E' primavera, ti vedo, ti sento,
altra stagione non riesc'a pensare.
T'osservo, una foto, un ricordo:
armoniose forme, profond'anima.
Accorciar distanz'attenderò sogno.


Gabriele Lombardi

lunedì, aprile 16, 2007

Ricostruzione 3D di layout di piani.. DA UNA SOLA IMMAGINE


E' nato un nuovo servizio Web, raggiungibile qui, che permette di ricostruire una scena in 3D a partire da una sola fotografia: l'assunzione di base è la presenza di differenti classi di superfici abbastanza semplici.. ad esempio il cielo, il pavimento, eventuali palazzi oppure altri tipi di oggetti verticali.

Il rettangolo rosso.. un mistero risolto

La nebula mostrata nell'immagine viene chiamata Red Rectangle, si tratta di una delle nebulose dalla forma più curiosa e insolita di tutte quelle avvistate nella volta celeste.


In questo articolo è descritto (brevemente) il mistero di Red Rectangle e la sua soluzione.
Quante altre simpatiche forme ci potrà mostrare lo spazio profondo? In ogni caso rimarrà sempre un affascinante immenso luogo da esplorare.. e perchè no? Per farci elaborazione delle immagini ;)

Calcolo tensoriale e variazionale.. un simpatico connubio

Come noto, il calcolo tensoriale è uno strumento molto comodo per la manipolazione di strutture geometriche descritte in spazi curvi, ad esempio in cordinate sferiche, cilindriche, o altri arbitrari spazi curvi descritti da mappe invertibili.
Come anche è noto, il calcolo variazionale consente di minimizzare integrali al variare di un funzionale incognito, questo viene utilizzato molto in fisica ad esempio per la ricerca dello stato di equilibrio di membrane o corde elastiche.

Come trovo ovvio proporre, le due fantastiche teorie, che ad esempio mostrano applicazioni in geometria e nel mio campo dell'elaborazione delle immaigni, possono essere messe assieme, e come trovo ancora più ovvio, possono miscelarsi in maniera molto più profonda di quel che si possa pensare a prima vista (stile deformare membrane elastiche descrivendole all'interno di uno spazio curvo).

Un esempio interessante: ogni superficie semplice in 3D (che non interseca sè stessa, che non è degenere riducendosi parzialmente o completamente a una curva o un punto.. ecc ecc.. ce ne sono un po' di proprietà raggruppate sotto la "semplicità") identifica uno spazio curvo in 2D, questo mi porta a pensare immediatamente alla seguente cosa: se lo spazio curvo fosse l'incognita?

Ragionando: tramite le tecniche variazionali è possibile determinare la posizione di equilibrio di una membrana elastica rispetto a determinate forze esterne e interne di elasticità. L'equazione differenziale di Eulero-Lagrange rende esplicite tali dipendenze da tali forze. Lo scopo però è quello di determinare una superficie! Si immagini ora di avere delle entità bidimensionali immerse in \Re^2, si immagini che tali entità abbiano delle proprietà invarianti che rimangono preservate al variare dello spazio curvo in cui vengono immerse, altre proprietà varianti, che dipendono dallo spazio considerato. E' allora possibile costruire un integrale di superficie, in cui il funzionale integrando esprime le proprietà varianti locali di cui minimizzare la "somma", relative alla rappresentazione in 2D delle entità geometriche di interesse, e dipendenti da una superficie {(x,y,z)|(x=x(u,v),y=y(u,v),z=z(u,v)} con (u,v)\in\Re^2, che identifica la deformazione spaziale di \Re^2.

So che tutto questo buttato lì sembra senza senso.. però mi prodigherò nel mostrare un'applicazione pratica più tangibile.. con dettagli in più.. quando questa idea sarà più matura.

martedì, aprile 10, 2007

Tuoi passi

Tuoi passi


Uno sull'altro, impronte lasciando,
scolpiscon mente, cuore e vita.
Battito di farfalla, ogn'istante,
può generare in fertile fata.

Io, lento rimuovo velo su velo,
conosco l'ignoto or più di ieri.
Tiepida scoperta mostra, stupendo,
affinità e mistero solerte.

Chi eri, chi sei, chi sono, saremo
assieme tutt'uno, aggrovigliati
corpo e anima per camminare
su qualunque via c'attenda 'l passaggio.

Passeggiamo, tu, io, fianco a fianco;
ciò ch'unita sorte ha preparato,
scriverà pagine di menti
or confuse, frizzanti, armoniose.


Gabriele Lombardi

martedì, aprile 03, 2007

Programmare OOP in Matlab

In Matlab esistono degli strumenti del linguaggio appositamente realizzati per consentire la programmazione OOP, essi sono descritti nel capitolo "Classes and Objects" e sono lo standard utilizzato anche all'interno della toolbox standard di Matlab per l'UI e per molto altro.
Tale tecnica di programmazione presenta alcuni indubbi vantaggi ma anche degli svantaggi enormi, a partire dalla struttura e costruzione delle classi all'interno del file-system, l'impossibilità di utilizzo della dot-notation e molti altri.
Una tecnica alternativa per fare OOP in Matlab sfrutta lo storing del workspace locale condiviso nel caso in cui vengano utilizzate delle funzioni innestate. La seguente dichiarazione della classe "counter", completamente commentata, mostra come può essere facilmente utilizzata questa tecnica:

function c = counter(start)
% COUNTER Generates a new counter object created with internal functions.
%
% The technique used here allows to create objects with all private
% attributes and public methods exported in a structure. All local
% variables defined here can be used as object attributes. Sub-functions
% can be used as private methods and setter/getter methods can be written
% to give the acces to attributes.. using the complete information
% hiding paradigm. The main funciton is the constructor. The object status
% is stored in a local workspace that have the same lifetime of the
% generated object.

% Save the initial value:
startVal = start;

% ===========
% Now there are two object attributes: start and startVal.
% ===========

% Returning the counter: this is the public methods set exported.
c = struct('next',@Next,'prev',@Prev,'reset',@Reset);

% ===========
% The public methods body.
% ===========
% The next integer function:
function n = Next
% Set:
n = start;
% Increment:
start = start + 1;
end
% The prev integer function:
function n = Prev
% Set:
n = start;
% Decrement:
start = start - 1;
end
% The reset function:
function Reset
% Reset:
start = startVal;
end
% ===========
% Private methods are simple functions and can be defined here.
% ===========
end

% ===========
% Support functions that are not methods (no access to attributes) are
% defined here.
% ===========

Per creare un oggetto di classe "counter" è sufficiente eseguire la funzione:
c1 = counter(1);
c2 = counter(-2);
Per eseguire un metodo è sufficiente utilizzare la dot-notation:
c1.next()
ans = 1
c1.next()
ans = 2
c1.reset()
c1.next()
ans = 1
Have fun! ;)