Lisp/Visione in Lisp
La visione artificiale è resa possibile da potenti strumenti del Lisp a mezzo di algoritmi dedicati alla interpretazione binaria delle immagini. All'inizio si lavorava con immagini binarie composte da array bidimensionali di stati binari (pixel on/pixel off). Nel tempo l'evoluzione ha comportato miglioramenti nella gestione adattativa dell'immagine tali da ricavare da immagini a colori più informazioni sulla tipologia di oggetti nel campo visivo. l'introduzione della vista binoculare ha inoltre consentito agli algoritmi di estrarre oggetti 3D nello spazio di visione con riferimento a solidi simulati che orientassero poi sistemi decisionali di analisi del comportamento ed azione in uno spazio virtuale ricostruito.
L'immagine binaria può essere rappresentata da un array binario come questo
(camera-right '( (1 0 1 1 1 1 1 1 0 ... )
(0 0 1 1 1 1 1 1 0 ... )
(1 0 1 0 1 1 1 1 0 ... )
(0 0 1 1 0 0 0 1 0 ... )
...
(0 0 1 0 1 1 1 1 0 ... )
(0 0 1 0 1 1 0 1 0 ... )
(0 0 1 0 1 0 1 1 0 ... )
(1 0 1 1 1 1 1 1 0 ... ))
Array di dimensione finite 800x600 che rappresenta la risoluzione del sistema di visione. In Linux esiste un set di strumenti per convertire immagini da vari formati al formato testuale Lisp per leggerlo ed eseguire le vostre prove (guardare sulla vostra distribuzione Linux i comandi pgmtolispm <--> lispmtopgm e formati grafici collegati a tiff, gif, png, bmp, ecc.).
Un esempio di integrazione Lisp su Linux con acquisizione da WebCam e rilevazione dei profili in tempo reale
(libload "video4linux/v4l")
(new-window) ; apre una finestra grafica
(setq image (ubyte-matrix 240 320 3)) ; alloca lo spazio per l'immagine
(setq video-device (new v4ldevice "/dev/video" "NTSC" 1 320 240))
(while t
(=> video-device grab-into-rgb image) ; cattura del frame e inserimento nella area immagine allocata
(rgb-draw-matrix 0 0 image)) ; visualizzazione della imagine nella finestra
Algoritmi di manipolazione di array binary di immagine
[modifica | modifica sorgente] (defun vis2d_edge() ...)
(defun vis2d_contour() ... )
(defun vis2d_sharp() ... )
Algoritmi di estrazione delle informazioni di oggetti presenti su un piano di visione
[modifica | modifica sorgente]Blob.lsp racchiude in se una serie di algoritmi che ritorna una lista di oggetti estratti da una immagine che ha subito una manipolazione dell'informazione mediante una filtrazione del contenuto e una definizione dei contorni con un algoritmo di level detection. Dopo questa azione il sistema identifica nella lista i singoli oggetti ricavando ( posizione x, y, dimensione, area, perimetro, orientazione, assi morfologici, peso caratteristico della forma ) e pone tutte le informazioni ricavate nella forma di lista S-expression.
( object2d ((obj1 (-16.7882 2.3789) 78.78 71.898 197.789 271.1 ( 37.23 89.78 ) 1023.7879)
(obj2 (6.8233 3.9780) 78.78 71.898 197.789 90.0 ( 37.23 89.78 ) 1023.7879)
(obj2 (-6.1827 -10.7976) 78.78 71.898 197.789 30.6 ( 37.23 89.78 ) 1023.7879))
)
Algoritmi per riconoscimento tridimensionale di oggetti con telecamera binoculare
[modifica | modifica sorgente]L'analisi di una forma tridimensionale basandosi sulla vista binoculare presenta alcuni problemi superabili con l'adozione di una tecnica mista di marcatura laser della scena con un reticolo di punti di riferimento generati da un apposito ologramma. Nella visione senza i marker un piano inclinato bianco che occupa totalmente l'area di visione è un problema, la mancanza di elementi quali la valutazione del riflesso e della discontinuità del colore sono superati dai marker del laser. Con l'inserimento dei punti del retinolo di marcatura laser il piano viene descritto in modo perfetto sia nella distanza dal sistema di visione sia nel verso di orientazione delle superfici inscritte nel campo visivo. La proiezione dei punti assume un andamento prospettico tale che agli algoritmi agganciano i punti del marker laser e da questi estraggono le posizioni nello spazio del piano o di oggetti in esso contenuti. La traduzione avviene assimilando le forme a piani, cilindri, sfere, coni, tronchi di cono, mezze sfere o porzioni, piramidi, tronchi di piramide e toroidi. Il sistema aggiorna una lista di oggetti ogni tash di fine identificazioni oggetti.
Esempio di lista generata dopo il riconoscimento delle due videocamere con due oggetti il piano ed il cilindro in linguaggio VRLM .
( lista-3d ( plane ojb1 ( 0.0 0.0 -70.7893)( -0.5289 0.5022 0.8939))
( cyl obj2 ( 1.7123 7.1127 3.5421) ( 0.711 17.234) ( -0.5289 0.5022 0.8939))
....
))