Sunteți pe pagina 1din 7

Sisteme de vedere artificială Lucrarea de laborator nr.

01

Lucrarea nr.1

Obiectivele lucrării

- achiziţia imaginilor folosind mediul software Matlab

Principala operaţie a unui sistem de vedere artificială este descrierea simbolică a unei
imagini. Etapele parcurse în acest scop sunt:
• achiziţia şi formarea imaginilor
• preprocesarea imaginilor
• segmentarea imaginilor
• descrierea
• recunoaşterea formelor
• interpretarea

⎡ x1 ⎤
x = ⎢ ⎥ → clasificare
⎢x ⎥
⎣ n⎦
achiziţie şi
segmentare descriere recunoaştere interpretare
preprocesare

Camera
TV Braţ
robot
controler
robot
Sisteme de vedere artificială Lucrarea de laborator nr.01

1. Achiziţia imaginilor folosind mediul software Matlab

Figura 1 Image Acquisition Toolbox

Matlab Image Acquisition toolbox reprezintă un set de funcţii dedicat pentru


achiziţia de imagini de la camere video de diferite tipuri pentru a putea fi folosite în
procesare de imagini, analiză sau vizualizare.
Acest toolbox poate fi folosit în combinaţie cu Image Processing Toolbox sau
Data Acquisition Toolbox. Împreună, Image Acquisition toolbox şi Image Processing
Toolbox oferă un mediu complet pentru dezvoltarea aplicaţiilor customizate de
prelucrarea imaginilor. Image Acquisition Toolbox cuprinde şi un bloc SimuLink,
denumit “From Video Device” (de la dispozitiv video) pe care îl putem folosi pentru a
aduce date video live într-un model. Image Acquisition Toolbox detectează automat
imaginile compatibile şi dispozitivele video de achiziţie.
Conectarea la dispozitive este atribuită printr-un obiect oferind o interfaţă de
configuraţie şi de achiziţie. Putem crea mai multe obiecte de conexiune pentru achizitie
simultană de la cât mai multe dispozitive atât cât suportă sistemul sau placa de achiziţie.
Toolboxul oferă o interfaţă pe mai multe dispozitive hardware şi furnizori, simplificând
procesul de configurare. Putem configura dispozitivul utilizând Image Acquisition Tool
sau modificând proprietăţile obiectului asociat dispozitivului din linia de comandă a
Matlabului. Se pot seta proprietăţi care sunt comune tuturor tipurilor de dispozitive, care
includ formatul video, rezoluţia, regiunile de interes. Se mai pot stabili proprietăţi
specifice ale dispozitivului cum ar fi nuanţa, saturaţia, luminozitatea, rata de cadru,
contrastul, sincronizarea video dacă dispozitivul suportă aceste proprietăţi.
Toolboxul poate obţine în mod continuu cadre în timp ce informaţiile obţinute
deja sunt procesate în Matlab sau în SimuLink. Toolboxul salvează automat în memorie,
într-o zonă tampon. Informaţiile pot fi obţinute într-o gamă largă de tipuri de date,
inclusiv cu semn sau fără semn pe 8,16, 32 biţi întregi sau numere cu virgulă mobilă.
Toolboxul suportă orice tip de reprezentare a culorii cum ar fi RGB, YUV sau grayscale.
Sisteme de vedere artificială Lucrarea de laborator nr.01

Toolboxul acceptă orice rată de cadre şi rezoluţie video suportată de PC-ul şi hardware-ul
de imagini. Pentru a determina tipul de dispozitiv video disponibil trebuie apelată funcţia:
imaqhwinfo
ans =

InstalledAdaptors: {'dcam' 'winvideo'}


MATLABVersion: '7.4 (R2007a)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '2.1 (R2007a)'
Câmpul InstalledAdaptors ne va indica ce dispozitive disponibile avem, iar în
acest caz avem o cameră video dcam şi driverul suport winvideo. Pentru a afla mai multe
detalii despre camera video se apelează:
info = imaqhwinfo('dcam')
info =

AdaptorDllName: [1x77 char]


AdaptorDllVersion: '2.1 (R2007a)'
AdaptorName: 'dcam'
DeviceIDs: {[1]}
DeviceInfo: [1x1 struct]
Următorul exemplu creează o intrare video obiect de adaptor DCAM. Înlocuind
numele adaptorului al dispozitivului de achiziţie a imaginii disponibil pe sistemul de
lucru prin comanda:
vid = videoinput('dcam',1,'Y8_1024x768')
se crează o iniţializare a camerei video cu ajutorul toolboxului de achiziţie.
După ce s-a creat obiectul de intrare video, Matlabul poate să aibă acces la dispozitivul de
achiziţie video şi este gata să-şi achiziţioneze date. Pentru a putea previzualiza captura
video cu scopul de a stabili unele detalii, poziţia camerei, cadrul se foloseşte comanda :
preview(vid)
Funcţia previzualizare deschide o fereastra Video Preview pe ecran care conţine captura
video live. Pentru a opri fluxul de video live, putem apela funcţia stoppreview. Pentru a
reporni fluxul previzualizare, se apelează funcţia previzualizare din nou pe aceeaşi intrare
video obiect.
Pentru a vedea o listă completă cu toate proprietăţile suportate de camera video, se
foloseşte funcţia
get(vid)
General Settings:
DeviceID = 1
DiskLogger = []
DiskLoggerFrameCount = 0
EventLog = [1x0 struct]
FrameGrabInterval = 1
FramesAcquired = 0
FramesAvailable = 0
FramesPerTrigger = 10
Logging = off
LoggingMode = memory
Name = Y8_1024x768-dcam-1
NumberOfBands = 1
Previewing = on
ReturnedColorSpace = grayscale
Sisteme de vedere artificială Lucrarea de laborator nr.01

ROIPosition = [0 0 1024 768]


Running = off
Tag =
Timeout = 10
Type = videoinput
UserData = []
VideoFormat = Y8_1024x768
VideoResolution = [1024 768]

Pentru a stabili valoarea unei proprietăţi a unui obiect video, se foloseşte funcţia
set sau se poate face referire la o proprietate asemeni unui câmp dintr-o structură,
utilizând notaţia punct.
Unele proprietăţi au valoare numai de citire, nu se poate stabili valoarea lor, ele
fiind folosite numai pentru a oferi informaţii despre starea unui obiect. Alte proprietăţi
devin ca valoare numai pentru citire, în momentul în care obiectul video rulează.
Nucleul oricărei aplicaţii de achiziţie de imagini de la un dispozitiv video îl
reprezintă datele achiziţionate. Un declanşator (eng : trigger) este evenimentul care
iniţiază achiziţia de imagini, în cadrul unui proces de memorare (eng: logging).
Evenimentul de declanşare apare atunci când anumite condiţii sunt îndeplinite. Obiectul
video suportă câteva proprietăţi care pot fi folosite pentru a configura aspectele execuţiei
de declanşare.

Proprietatea Descriere
InitialTriggerTime Raportează timpul absolut când primul declanşator se execută
TriggerCondition Specifică condiţiile pe care un declanşator trebuie să le îndeplinească
TriggerFcn Specifică execuţia funcţiei de întoarcere când un declanşator apare
TriggerFrameDelay Specifică numărul de cadre care nu le va memora
TriggerRepeat Specifică numărul de secunde adiţional pentru a executa un declanşator
TriggersExecuted Raportează numărul de declanşatoare care au fost executate
TriggerSource Specifică sursa care trebuie monitorizată după ce condiţiile au fost îndeplinite
TriggerType Specifică tipul declanşatorului : imediat, manual sau hardware

Pentru a seta oricare dintre proprietăţile unui declanşator se foloseşte funcţia set. Pentru
a afla toate configuraţiile valide TriggerType, TriggerSource, şi proprietăţile lui
TriggerCondition se foloseşte funcţia triggerinfo, specificând obiectul video ca argument.
config = triggerinfo(vid);
Această funcţie returnează o structură de vectori, o structură pentru fiecare
combinaţie validă a valorilor proprietăţilor. Fiecare structură în vector este alcătuită din
trei câmpuri care conţin valorile fiecărei proprietăţi a declanşatorului. Pentru a seta
valorile proprietăţilor lui TriggerType, TriggerSource, şi TriggerCondition trebuie
folosită funcţia triggerconfig, specificând valoarea proprietăţii ca argument a funcţiei. Se
poate stabili de-asemenea intervalul pentru a captura cadrele cu ajutorul funcţiei
FrameGrabInterval căreia i se atribuie o valoare corespunzătoare pentru achiziţia
cadrelor de la obiectul video. După ce s-a creat obiectul de intrare video şi proprietăţile
sale au fost configurate, se pot achiziţiona date. Acesta este de obicei nucleul oricărei
aplicaţii de achiziţie şi implică câţiva paşi: pornirea obiectului video prin apelul funcţiei
start, declanşarea de achiziţie, pentru a se putea achiziţiona date obiectul trebuie să
execute o declanşare. În funcţie de tipul de declanşare poate fi o declanşare automată sau
manuală, iar în acest caz obiectul aşteaptă un apel către funcţia de declanşare înainte de
Sisteme de vedere artificială Lucrarea de laborator nr.01

iniţializarea achiziţiei. Pentru a putea aduce mai multe cadre în spaţiul de lucru al
Matlabului, se foloseşte funcţia getdata. La funcţia getdata se mai pot adăuga tipul si
formatul în care dorim să primim informaţiile. Exemplu de apel al functiei getdata :
data = getdata(obj,n,type,format)
Odată ce informaţiile se află în spaţiul de lucru al Matlabului, acestea pot fi
prelucrate ca orice alt tip de date. Pentru a afişa fiecare cadru achiziţionat se foloseşte
funcţia :
imaqmontage(data)
Pentru a returna imediat o singură imagine cadru se foloseşte funcţia getsnapsho .
frame = getsnapshot(obj)
Pentru a vedea ultimile cadre achiziţionate se foloseşte funcţia peekdata. Pentru a
elibera informaţiile achiziţionate din zona de memorie buffer folosite pentru a stoca
cadrele achiziţionate, se foloseşte funcţia flushdata. Atunci când s-a terminat lucrul cu
obiectul video acesta poate fi şters din memorie cu ajutorul funcţiei delete, apelând
obiectul creat delete(vid). Pentru a ne deconecta şi a şterge toate cadrele achiziţionate sau
pentru a reporni dispozitivul se foloseşte funcţia : imaqreset .

Functii Detalii Exemplu

imaqhwinfo determina tipul de dispozitiv video disponibil info = imaqhwinfo('dcam')


videoinput crează o iniţializare a camerei video cu ajutorul vid =
toolboxului de achiziţie videoinput('dcam',1,'Y8_1024x768')

preview deschide o fereastra Video Preview pe ecran preview(vid)


care conţine captura video live
get afişează o listă completă cu toate proprietăţile get(vid)
suportate de camera video
Set stabileşte valoarea unei proprietăţi a unui obiect set(vid)
video
TriggerRepeat implementează achiziţia de cadre în mod
continuu
FrameGrabInterval stabileşte intervalul pentru a captura cadrele
getdata aduce mai multe cadre în spaţiul de lucru al data = getdata(obj,n,type,format)
Matlabului
imaqmontage afişează fiecare cadru achiziţionat imaqmontage(data)

getsnapshot returnează imediat o singură imagine cadru getsnapshot(obj)


peekdata vizualizarea ultimilor cadre achiziţionate

flushdata eliberează informaţiile achiziţionate din zona de


memorie buffer
imaqreset deconectează şi şterge toate cadrele
achiziţionate sau pentru a reporni dispozitivul
Sisteme de vedere artificială Lucrarea de laborator nr.01

2. Manipularea fişierelor imagine sub mediul de lucru Matlab

Mediul software de lucru folosit în cadrul laboratorului este Matlab 7.1. Image
Processing Toolbox conţine o serie largă de funcţii utile procesării imaginilor sub Matlab,
imaginile fiind stocate în tablouri de valori numerice de tip uint8, uint16 sau double. În
lucrarea de faţă sunt prezentate câteva funcţii de manipulare a fişierelor imagine. Există
mai multe tipuri de imagini suportate de catre mediul de lucru Matlab. Pentru o imagine
de m × n pixeli, vom avea:
ƒ imagine binară (binary image) – imagine ce conţine doar pixeli albi sau negri,
reprezentată sub forma unor tablouri de valori de 1(alb) şi 0(negru) – informaţiile
vor fi stocate într-o matrice m × n de uint8 sau uint16;
ƒ imagine indexată (indexed image) – imagine (matrice m × n ) a caror pixeli conţine
valoarea indicelui culorii dintr-o paletă de culori. Paleta de culori este un tablou
p × 3 , cele trei coloane reprezentând valorile RGB, unde p reprezintă numărul de

nuanţe din paletă;


ƒ imagine in nuante de gri (grayscale sau intensity image) – valorile tabloului
imagine (matrice m × n ) conţine direct nuanta de gri, fără a fi nevoie de o paletă
de culori;
ƒ imagine multiframe (multicadru) – tablou de imagini numite cadre, reprezentate
in Matlab ca tablouri 4-dimensionale, a patra dimensiune fiind numarul cadrului
( m × n × 3 × nr.cadre );
ƒ imagine RGB (Red-Green-Blue, imagine color) – fiecare pixel este reprezentat de
trei valori, câte una pentru fiecare componentă: roşu, verde şi respectiv albastru.
(imaginea este stocată într-o matrice ).
¾ citirea fişierelor imagine - imread
Funcţia folosită pentru deschiderea fisierelor ce contin imagini este imread:
A = imread(FILENAME,FMT), unde A este matricea in care va fi stocată informaţia,
FILENAME este numele fişierului imagine, iar FMT este formatul fisierului. Formatele
suportate de mediul Matlab se pot afla folosind funcţia imformats.
Un exemplu de utilizare a acestei funcţii este următorul:
var = imread(‘filename.fmt, ‘fmt’);
Sisteme de vedere artificială Lucrarea de laborator nr.01

¾ afişarea imaginilor - imshow


Vizualizarea imaginilor se poate face folosind funcţia imshow:
imshow(i);
Imaginea va fi afişată în figura curentă. Pentru a fi afişată în altă figură, este utilă
următoarea comandă matlab: figure, imshow(i);
¾ salvarea imaginilor - imwrite
Funcţia folosită pentru salvarea imaginilor într-un fisier pe discul dur, într-un format
standard suportat de catre mediul Matlab este imwrite:
imwrite(A, FILENAME, FMT) ,
unde A este matricea imagine, FILENAME este numele fisierului în care sa fie stocată
imaginea, iar FMT este formatul dorit al fisierului.
¾ afişarea informaţiilor unui fişier imagine - imfinfo
Funcţia imfinfo este folosită pentru aflarea informaţiilor despre un fisier imagine.
Exemplu:
imfinfo('imagine.tip')
¾ funcţii de conversie a imaginilor:
dither – creează o imagine binară dintr-o imagine grayscale şi o imagine indexată dintr-o
imagine rgb;
gray2ind – creează o imagine indexată dintr-o imagine grayscale;
grayslice – creează o imagine indexată dintr-o imagine grayscale;
im2bw – creează o imagine binară dintr-o imagine indexată sau dintr-o imagine rgb;
ind2gray – creează o imagine grayscale dintr-o imagine indexată;
ind2rgb – creează o imagine rgb dintr-o imagine indexată;
mat2gray – creează o imagine grayscale dintr-o matrice de date;
rgb2gray – creează o imagine grayscale dintr-o imagine rgb;
rgb2ind – creează o imagine indexată dintr-o imagine rgb.