mercoledì, dicembre 20, 2006

Un framework per l'analisi di dati

Quante volte è capitato, a chiunque faccia ricerca in ambito scientifico, di dover manipolare ed esplorare dati, magari di doverli rappresentare graficamente, oppure interpolare con una qualche tencinca, per esempio con le T-spline. Se non si utilizza un software commerciale come Matlab e si sta lavorando in C++ per mantenere un occhio sulla portabilità e un occhio sull'efficienza.. in genere ci si affida a librerie esterne con il risultato di avere un elenco enorme di dipendenze. Ecco qui un framework che mette a disposizione tantissimi strumenti (tutti quelli di cuik si ha bisogno?) sotto un'unico pacchetto: ROOT.
Direi che il modo migliore per apprezzare ROOT è quello di andare a dare un occhio al materiale pubblicato, alle applicazioni che ci sono state implementate utilizzandolo.. e poi scaricarlo e provare ad utilizzarlo :D

sabato, dicembre 16, 2006

Tensor Voting

Il Tensor Voting, tecnica che si sta diffondendo molto rapidamente nella computer vision per il perceptual grouping di informazioni, non può che essere una tecnica citata in questo blog come ospite d'onore: infatti penso che non ci sia nulla di più vicino alla tecnologia, all'arte ed alla percezione di questa tecnica.
Il Tensor Voting affronta il problema di determinare le strutture percettive presenti in un insieme di punti di uno spazio a N dimensioni RN. Tali strutture vengono determinate sfruttando due principi principali:
  1. La "continuazione percettiva" di strutture esistent verso il vicinato: ad esempio se osserviamo una linea tratteggiata vediamo comunque una linea, anche se in realtà si tratta solo di tanti segmenti, questo perchè eprcettivamente tentiamo a "continuare" ogni segmento verso il successivo.
  2. La "morbidezza delle variazioni" delle strutture stesse: qui si intende parlare di smoothness, in questo caso il senso di questo termine è quello di mantenere il più costante possibile (minimizzarne quindi le variazioni) la curvatura delle strutture. Ad esempio la curva con curvatura costante che può unire due punti è un arco di circonferenza, non obbligatoriamente un segmento, infatti l'arco di circonferenza potrebbe evitare variazioni brusche nella derivata prima della curva in una giunzione precedente o successiva.
Non intendo descrivere qui il Tensor Voding, sarebbe decisamente ridondante (si cerci sulla rete, con autori Medioni, Tang e Mordohai), quello che intendo dare come idee.. o come riflessioni sono le seguenti:
  • Esistono tutti gli strumenti matematici che permettono di lavorare algoritmicamente con il Tensor Voting.. ma nessuno strumento di analisi globale, che permetta di interpretarne i risultati.. che sono stupefacenti.. ma che non sono secondo me descritti con sufficiente rigore.. ad esempio non si parla mai dello spazio delle possibili orientazioni, o delle possibili curve, o del fatto che ogni singolo voting è uno step discreto in un automa a stati infiniti.. insomma dal punto di vista analitico manca un bel po' di lavoro (speriamo di essere io a farlo ;).
  • Il Tensor Voting è una tecnica molto pontente, non ci sono dubbi.. però credo che il suo nome debba essere spezzato in due:
    • Tensor: Si lavora con votanti e voti che sono tensori; i votati sono solo punti.
    • Voting: Si tratta di una tecnica di voto, come ad esempio Hough; io direi che la generalizzazione del Tensor Voting più ovvia è il Voting.. una descrizione del voting come meta-tecnica di information transmission fra dati possa essere un formalismo potente, molte tecniche figlie possono essere costruite a partire da questa. Ovviamente in questo caso la matematica analitico-descrittiva del Voting sarebbe l'assoluta essenza del Voting stesso.
  • Dal punto di vista computazionale ci sono vari problemi: è una tecnica che può essere resa molto veloce grazie alle giuste strutture dati, però tende ad occupare una quantità di memoria esponenziale al crescere della dimensionalità N, costruire una tecnica efficiente di sintesi dei tensori del tensor voting field per dimensionalità alte potrebbe essere molto utile.