Tehnici și metode de detecție a texturilor Îndrumător științific: Prof. Doctor inginer Remu s Brad Absolvent: Modrângă Cristina Maria Specializarea… [609323]
1
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ
PROIECT DE DIPLOMĂ
Absolvent: [anonimizat]
– Sibiu, 2017 –
2
UNIVERSITATEA “LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
DEPARTAMENTUL DE CALCULATOARE ȘI INGINERIE ELECTRICĂ
Tehnici și metode de detecție a
texturilor
Îndrumător științific: Prof. Doctor inginer Remu s Brad
Absolvent: [anonimizat]
– Sibiu, 2017 –
3
Cuprins
1. Prezentarea temei de proiect ………………………….. ………………………….. …………………………. 5
2. Partea teoretică ………………………….. ………………………….. ………………………….. ………………… 8
2.1 Procesarea de imagini ………………………….. ………………………….. ………………………….. …. 8
2.1.1 Imaginea în nuanțe de gri ………………………….. ………………………….. ………………….. 9
2.2 Texturi ………………………….. ………………………….. ………………………….. ……………………….. 9
2.3 Cercetare. Starea actuală în domeniu ………………………….. ………………………….. ……. 12
2.4 Imaginea binară ………………………….. ………………………….. ………………………….. ………… 18
2.4.1 Metoda lui Otsu ………………………….. ………………………….. ………………………….. ….. 19
2.5 Segmentarea imaginilor ………………………….. ………………………….. …………………………. 20
2.5.1 Algoritmul K -Means ………………………….. ………………………….. ……………………….. 21
2.6 Transformata Fourier ………………………….. ………………………….. ………………………….. .. 22
2.6.1 Transformata Fourier continuă ………………………….. ………………………….. ……….. 22
2.6.2 Transformat a Fourier Discretă Bidimensională ………………………….. ……………. 24
2.6.3 Transformata Fourier Rapidă (FFT) ………………………….. ………………………….. .. 24
2.7 Filtre Gabor ………………………….. ………………………….. ………………………….. ……………… 28
2.7.1 Produsul de convoluție ………………………….. ………………………….. …………………….. 29
2.8 Transformata Hough ………………………….. ………………………….. ………………………….. … 29
3. Rezolvarea temei de proiect ………………………….. ………………………….. ………………………… 32
3.1 Descrierea aplicației ………………………….. ………………………….. ………………………….. ….. 32
3.2 Descrierea blocurilor din schema bloc ………………………….. ………………………….. ……. 33
3.2.1 Imaginea de intrare ………………………….. ………………………….. …………………………. 33
3.2.2 Transformarea în nive le de gri ………………………….. ………………………….. ………… 36
3.2.3 Transformata Fourier ………………………….. ………………………….. ……………………… 37
3.2.4 Binarizarea spectrului de amplitudine ………………………….. ………………………….. 44
3.2.4 Thinning ………………………….. ………………………….. ………………………….. …………….. 47
3.2.5 Detecția liniilor ………………………….. ………………………….. ………………………….. …… 47
4
3.2.6 Banc -ul de filtre Gabor ………………………….. ………………………….. ……………………. 49
3.2.7 Eșantionarea imaginii de intrare ………………………….. ………………………….. ……… 52
3.2.8 Procesarea rezultatelor ………………………….. ………………………….. ……………………. 53
3.3 Interfața cu utilizatorul ………………………….. ………………………….. …………………………. 58
4. Concluzii ………………………….. ………………………….. ………………………….. ………………………… 67
5. Referițe Bibliografice ………………………….. ………………………….. ………………………….. ……… 71
5
1. Prezentarea temei de proiect
Scopul acestei lucrări este dezvoltarea unei aplicații software , ce include o interfață grafică , prin
intermediul căreia să se rezolve problema de detecție a texturilor. Aplicația dezvoltată se
concentrează în principal asupra detecției materialelor textile, care fac parte din categoria
texturilor cu grad de omogenitate ridicat.
Aplicația dezvoltată poate fi utilizată în procesul de detecție a texturilor , concentrându -se
asupra proprietății de periodicitate a texelilor. De aceea, imaginile ce nu prezintă perio dicitate
nu pot fi clasificate folosind această aplicație.
Deoarece detecția modelului țesăturilor la nivel de cusătură este operată preponderent manual
în laboratoarele textile, bazându -se pe ochiul uman, această metodă de detecție este una
subiectivă, de pinzând de o mulțime de factori care influiențează observatorul uman. Acesta este
motivul pentru care, pentru a reduce costul procesului de inspecție și pentru a crește calitatea
produselor, este necesară o automatizare a procesuluii de inspecție.
Detecția țesătu rilor presupune cercetarea datelor din care este formată imaginea de intrare într-
o manieră dependentă de modalitatea de reprezentare a datelor în sistemul de procesare și de
scopul final al unei aplicații specifice.
Un pas foarte important este p rocesul de transformare a datelor de ieșire dintr -un bloc de
procesare la o formă de reprezentare compatibilă cu forma de reprezentare a datelor de intrare
în următorul bloc de procesare.
Deși metodele de cercetare în domeniu au urmat mai multe direcții, aplicația dezvoltată
folosește analiza în domeniul frecvență, utilizân d transformata Fourier și metode de tip wavelet
în procesul de detecție al texturilor. Sistemul de procesare are ca scop final detecția porțiunilor
din imagine în care sunt reprezentate texturi diferite sau non -texturi. Se consideră a fi non –
textură, orice defect în material, care modifică structura fizică periodică a texturii.
Schema de procesare are ca prim pas transformarea imaginii de intrare în nuanțe de gri. Asupra
imaginii în nuanțe de gri obțiunute, se aplică transformata Fourier Rapidă , care prezintă
informaț iile din imagine schimbând domeniul de reprezentare spațial, în reprezentarea în
domeniul frecvență. Rezultatul obținut prin aplicarea transformatei este shift -at, astfel încât
componenta continuă a transformatei aflată în punctul (0, 0) din tabloul bidime nsional în
domaniul complex obținut, să fie mutat în centru, reprezentat de punctul (image.Width/2,
6
image.Height/2), unde image.Width și image.Height reprezintă dimensiunile în pixeli ale
imaginii de intrare.
Din rezultatul transformatei Fourier Rapidă, s e extrage spectrul de amplitudine, asupra căruia
se aplică o operație de binarizare folosind o valoare prag adaptivă, rezultată prin aplicarea
metodei Otsu asupra imaginii spectrului, după care se aplică o operație de thinnig pentru a
reduce zonele cu mai mulți pixe li albi (pixeli de interes) , la un singur pixel.
În continuare, se aplică transformata Hough de detecție a liniilor, în scopul extragerii unui set
de unghiuri de orientare ale imaginii.
Aceste unghiuri sunt folosite de următorul bloc de procesare, care gen erează un banc de filtre
Gabor de orientări și frecvențe diferite. Din acest banc se selectează filtrul care se acordă cel
mai bine cu imaginea de intrare ș i acesta se aplică asupra imaginii.
Asupra rezultatului obținut se aplică o operație de netezire. As upra imaginii netezite se aplică
algoritmul K -Means, care clasifică pixelii din imagine pe baza similarității lor. Astfel, într -o
textură ce prezintă defect, răspunsul filtrului este diferit pe zone cu defect față de zonele fără
defect, clasificând imagine a în mai multe clustere.
Obiectivele propuse în vederea rezolvării acestei teme de proiect sunt:
– Studiul articolelor științifice care prezintă starea actuală în domeniu
– Studiu metodelor implementate
– Implementarea algoritmilor folosiți în blocurile de proce sare, precum:
a. Fast Fourier Transform
b. Metoda de thresho lding Otsu
c. Metoda de thinning
d. Metoda Hough de detecție a liniilor
e. Metode de generare a banc -ului de filtre
f. Algoritmul K -Means
Lucrarea este structurată în mai multe capitole.
Capitolul 2 prezintă descri erea texturilor, starea actuală în domeniu și o scurtă descriere ,
împreună cu bazele matematice, a transformatelor și a algoritmilor folosiți în rezolvarea temei.
7
În capitolul 3 sunt prezentate tehnicile de implementare, logica și funcționalitățile aplicației și
este prezentată interfața cu utilizatorul.
Capitolul 4 prezintă rezultatele experimentale pe diverse texturi și concluziile ce reies prin
analiza rezultatelo r și posibilități de dezvoltare ulterioară a aplicației.
Capitolul 5 prezintă bibliografia utilizată în studiu.
8
2. Partea teoretică
2.1 Procesarea de imagini
În știința imagistică, procesarea imaginilor reprezintă procesul de prelucrare al imaginilor
folosind o colecție de operații matematice asupra unei forme de semnal de procesare pentru
care datele de intrare pot fi o i magine, o serie de imagini sau un format video. Datele de ieșire
ale lanțului de procesare pot fi reprezentate sub formă de imagini sau sub forma unui set de
descriptori ai semnalului de procesare de la intrare. Practic, procesarea de imagini este știința
care se ocupă cu studiul algoritmilor ce primesc o formă de imagine ca date de intrare și scot la
ieșire o altă imagine sau date ce caracterizează imaginea primită la intrare.
Majoritatea tehnicilor de prelucrare a unei imagini implică separarea planelor d e culoare ale
imaginii și tratarea acestora ca un semnal bidimensional în aplicarea tehnicilor standard de
prelucrare a semnalului. O altă tehnică populară implică transformarea imaginii de intrare într –
o imagine echivalentă în nuanțe de gri și aplicarea t ehnicilor de procesare pe această imagine
creată.
Analiza imaginilor presupune cercetarea datelor din care este formată imaginea într -o manieră
dependentă de scopul final al unei aplicații specifice. De regulă, datele în formă brută ale unui
set de imagini sau ale unei imagini sunt analizate cu scopul de a se obține o perspectivă asupra
formatului imaginii și de a extrage informațiile dorite din imaginea în cauză. În cazul procesării
de imagini și recunoașterea de modele, un pas important îl reprezintă extr acția unor date ce
caracterizează imaginea . Aceasta este o formă specială de reducere a dimensiunilor unei
imagini, atunci când datele imaginii de intrare sunt redundante.
Caracteristicile unei imagini deseori conțin informații despre culoare, formă, text ură sau
context.
9
2.1.1 Imaginea în nuanțe de gri
În domeniul procesării de imagini și computer vision, imaginea grayscale este o imagine ce are
proprietatea că are aceeași valoare pentru toate componentele de culoare, pentru fiecare pixel
din ima gine, fiind formate în totalitate din nuanțe de gri.
Imaginile grayscale sunt adesea rezultate prin măsurarea intensității luminii fiecărui pixel din
imagine într -o singură bandă în spectrul electromagnetic. De asemenea, ele pot fi și sintetizate
dintr -o imagine color după anumite formule. Cea mai utilizată este formula (2.2.1 .1). O
aproximare satisfăcătoare în aplicațiile care nu necesită o corectitudine foarte mare a datelor
este și media aritmetică a valorilor pe fiecare componentă de culoare (2.2.1 .2).
𝑔𝑟𝑎𝑦 =0.3∗𝑅+0.59∗𝐺+0.11∗𝐵 (2.2.1.1)
𝑔𝑟𝑎𝑦 =(𝑅+𝐺+𝐵) (2.2.1.2)
2.2 Texturi
Analiza și detecția texturilor este un fenomen larg răspândit, reprezentând un capitol important
în domeniul procesării de imagini . Lumea reală este extrem de bogată în texturi, o multitudine
de texturi fiind observate atât pe obiectele create artificial, cât și pe obiectele din natură, precum
pielea, lemnul, metalul și așa mai departe. Putem considera că suprafața oricărui obiect este
texturată la o anumită scală. Spre exemplu, o imagine formată în mare parte dintr -o cărămid ă
prezintă un obiect, pe când o imagine ce rezintă un zid format din mai multe cărămizi dispuse
pe orizontală și pe verticală este considerată a fi o textură.
Figura 2.2.1 Texturi din natură
10
O definiție generală a texturii se referă la caracteristicile de suprafață și aspect a le unui obiect,
caracteristici date de dimensiunea, forma, densitatea, aranjamentul și proporțiile părților
elementare din care este format un obiect. Analiza texturilor este extrem de importantă,
deoarece acestea sunt considerate a fi un indicator extrem de important în legătură cu identitatea
unu obiect și oferă informații legate de proprietățile materialului din care este compus un obiect.
Texturile pot fi împărțite în două categorii, în funcție de stimulii cu care receptorul uman le
poate percepe. Aces te categorii sunt: texturi tactile și texturi vizuale. Texturile tactile se referă
la senzația transmisă la atingerea unui obiect. Texturile vizuale fac referire la impresia vizuală
pe care acestea le produc observatorului uman, datorită variațiilor spația le, precum variațiile de
culoare, de intensitate sau de orientare într -o imagine.
Deși analiza texturilor reprezintă o zonă de cercetare importantă în dom eniul procesării de
imagini și c omputer vision, noțiunea de textură nu are o definiție precisă. Princ ipalul motiv este
faptul că texturile din natură prezintă de cele mai multe ori proprietăți diferite și contradictorii,
care cu greu pot fi descrise printr -o definiție unică, general valabilă.
Dat fiind faptul că nu s -a putut prezenta o definiție generală a noțiunii de textură, mulți
cercetători au încercat să definească texturile dintr -o anumită perspectivă a naturii lor.
Pricket [1] definește textura ca fiind orice imagine ce descrie o mulțime bidimensională de
variații. Elementele și regulile de spațial itate sau aranjament pot fi manipulate într -un mod
arbitrar, cu condiția să răm ână o caracteristică repetitivă.
Hawkins [2] oferă o descriere mai detaliată a noțiunii de textură. El consideră că noțiunea de
textură trebuie să respecte trei proprietăți imp ortante: să conțină un șablon (model) local ce este
repetat într -o regiune care este semnificativ mai mare în comparație cu dimensiunea șablonului,
Figura 2.2.2 Texturi artificiale
11
șablonul repetat trebuie să fie format din aranjamente nealeatoare ale unor părți elementare,
șabloanele tre buie să fie entități aproximativ uniforme și sa aibe aproximativ aceeași
dimensiune pe întreaga regiune din care este formată tex tura.
Haralick [3] definește texturile ca fiind un fenomen înt âlnit în zone organizate, care pot fi
descompuse în primitive ce au specifice distribuții spațiale. Această definiție provine direct din
experiența vizuală a observatorului uman asupra texturilor și este cunoscută sub numele de
abordare structurală. Fiecare textură este compusă din diverse elemente, precum obiecte, for me
sau modele de culoare. Aceste primitive sunt organizate după o anumită structură spațială,
indic ând anumite metode de amplasare fundamentale.
Cross și Jain [4] au sugerat o definiție alternativă, conform căreia o textură este o imagine
bidimensională, de natură stohastică și posibil periodică. Această definiție este cunoscută sub
denumirea de abordare stohastică și descrie o textură printr -un proces stohastic care o
generează.
Deoarece noțiunea de textură nu are o definiție fixă, general valabilă, ci e ste interpretată diferit
de cercetătorii în domeniu, problema procesul ui de analiză al texturilor poate fi rezolvat ă prin
metode de analiză computațională diferite.
Datorită gradului de diversitate și complexitate al texturilor din natură, este necesar ca acestea
să fie separat e în mai trei mari categorii, în funcție de gradul lor de aleatorism: texturi uniforme,
texturi stohastice și texturi compuse. Texturile uniforme sunt formate din elemente de
dimensiuni relativ mici, care sunt ușor de observat, dispuse în modele puternic p eriodice.
Texturile stohastice sunt formate din elemente mai puțin vizibile dec ât cele din texturile
uniforme ce sunt aranjate într -o manieră mult mai aleatoare. Texturile compuse sunt un amestec
între texturile uniforme și texturile stohastice și cuprind majoritatea texturilor din lumea reală.
În funcție de gradul de omogenitate spațială, texturile pot fi clasificate în texturi cu modele de
repetiție omogene, cvasi -omogene și neomogene. Texturile omogene conțin structuri repetitive
ideale și uniforme. Un n ivel de omogenitate scăzut implică variații spațiale în elementele de
fundamentale ale texturii sau al aranjamentului spațial al acestor elemente, fapt ce conduce la
încălcarea unei reguli de repetiție nealeatoare. Deoarece omogenitatea spațială este consi derată
a fi o proprietate esențială în procesul de procesare automată al texturilor, texturile cu un grad
de omogenitate scăzut sunt extrem de dificil de prelucrat și nu prezintă un grad ridicat de interes
în cercetarea actuală în domeniu.
12
2.3 Cercetare. Starea actuală în domeniu
Un domeniu de interes în procesul de cercetare al texturilor l -a reprezentat, încă de la mijlocul
anilor 1980, studiul metodelor de automatizare a procesului de detecție a țesăturilor. Motivația
este dată de avantajele identific ării automate a țesăturilor, bazată pe procesarea de imagini și
inteligență artificială , în favoarea metodelor manuale axate pe experiența și atenția subiecților
umani.
Țesăturile reprezintă produse textile realizate prin îmbinarea, după diverse modele, a două
sisteme de fire: fire de urzeală și fire de bătătură. Modelele după care se îmbină firele poartă
numele de armuri sau legături. Țesăturile prezintă un grad de omogenitate ridicat, fiind
considerate structuri puternic periodice. În general, firele sunt întotdeauna drepte,
desfășurându -se în paralel fie pe lungimea țesăturii (firele de urzeală), fie transversal (firele de
bătătură). Sistemele de fire ale unei țesături sunt prezentate în figura 2.3.1, unde warp sunt firele
de urzeală și weft sunt fire le de bătătură.
În industria textilă, înainte de expedierea oricărui produs către clienți, este necesar un întreg
proces de inspecție în scopul menținerii caltății produselor textile. S -a estimat că prețul unei
țesături de calitatea a doua este numai 45% -65% din prețul unei țesături de calitatea întâi.
Defectele în țesătură sunt, în mare, clasificate în patru clase: fire duble, fire lipsă din țesătură,
găuri în țesătură, variații ale densității firelor.
Figura 2.3.1 Sistemele de fire ale unei ț esături
13
Identificarea modelului țesăturilor la niv el de cusătură a firelor este una subiectivă și operată
preponderent manual în laboratoarele textile, bazându -se pe ochiul uman. O astfel de
identificare este una subiectivă, depinzând de mai mulți factori care pot influiența observatorul
uman, care este p rin natura sa subiectiv și nu are un grad de precizie ridicat. Astfel, analiza
poate fi afectată de extrem de mulți factori precum: nivelul de experiență, atenția, gradul de
oboseala, intensitatea luminii, sunet, temperatură și mulți alții. Totodată, aceas tă metodă este
ineficientă și mare consumatoare de timp, deși este considerată a fi o etapă importantă și
esențială în prefabricarea țesăturilor. Potrivit unor studii, s -a estimat faptul că ochiul uman poate
prinde sub 75% din defectele semnificative.
Astfel, pentru a reduce costul procesului de inspecție și pentru a crește calitatea produselor, este
necesară o automatizare a procesuluii de inspecție.
Cercetările în direcția automatizării procesului de detecție al țesăturilor au început încă de la
începutul anilor 1980 în Japonia, între anii 1900 -2000 în Europa și America, iar cercetătorii din
China și Asia din anii 2000 pâna în prezent.
Procesul de extragere a proprietăților unei imagini încearcă identificarea caracteristicilor, a
proprietăților sau a obiec telor din imagine. Aceste proprietăți (descriptori ai imaginii) sunt
folosiți mai departe pentru a descrie obiectele sau atributele obiectelor din imagine, înaintea
procesului de clasficare. Procesul de extragere a proprietăților operează pe tablouri
bidim ensionale ( intensitatea pixelilor din imagine) și produce la ieșire o listă de descriptori sau
un vector de proprietăți [5].
Studiile de cercetare au urmat mai multe direcții, anumiți cercetători concentrându -se în direcția
cercetării dispozitivelor de ac hiziție a imaginilor țesăturii, în timp ce alți cercetători au mers în
direcția dezvoltării de algoritmi pentru analiza modelului țesăturii . În linii mari, aceste metode
pot fi clasificate în două grupe: metode bazate pe analiza optică și metode bazate pe analiza
imaginii.
Metodele bazate pe analiza imaginii pot fi clasificate în trei categorii: metode bazate pe analiza
în domeniul frecvență, metode bazate pe analiza în domen iul spațial și metode combinate [6].
Metodele ce folosesc analiza în domeniul frecv ență pot fi împărțite în două mari categorii:
metode ce folosesc transformata Fourier și metode ce folosesc transformate de tip wavelet.
14
Unii cercetători au încercat să utilizeze transformata Fourier pentru a recunoaște modelul
țesăturii în domeniul frecve nță.
Transformata Fourier a fost inițial prezentată de către Imaoka [ 7] pentru a procesa imaginea
țesăturii și pentru a estima modelul de țesătură. S -a raportat că precizia generală a aceste metode
ar fi aproximativ 80%. Wood [ 8] a folosit în 1990 transfo rmata Fourier și funcții de
autocorelație pentru a modela periodicitatea spațială a modelului țesăturii. Astfel, a fost extrasă
o serie de caracteristici din spectrul de putere bidimensional și diagrama de autocorelație. S -a
estimat că precizia de măsurare poate ajunge la mai puțin de de două fire de țesătură per inch.
Deoarece transformata Fourier discretă este ineficientă ca timp de procesare, în anul 1996, Xu
[9] a folosit transformata rapidă Fourier (FFT) pentru a calcula spectrul de putere al al țesăt urii
din imagine și a folosit operația logaritmică pentru a comprima spectrul în scopul obținerii
spectrului imaginii în nuanțe de gri. Prin procesul de transformare a coordonatelor, punctul
origine al spectrului poate fi mutat în centrul imaginii. În cont inuare, Xu a determinat punctele
de vârf ale spectrului de putere pe direcțiile structurii periodice din imagine (textura) și a extras
separat frecvențele acestor structuri periodice, atât pe direcție verticală, cât și orizontală. În cele
din urmă, imagini le pot fi reconstruite pe baza spectrului de putere filtrat, ce păstrează doar
punctele de vârf din spectru.
Sari-Saraf împreună cu partenerii săi [ 10] au folosit transformata Fourier pentru detecția
defectelor din țesătură. Abordarea lor examinează și efe ctuează o diagrama unidimensională ,
ce este o tehnică matematică folosită pentru validarea integrității imaginii. Diagrama este
obținută prin integrarea punctelor în fiecare inel din spectrul bidimensional în domeniul
frecvență. Inelele sunt concentrice, cu raze diferite și sunt folosite pentru a monitoriza
denistățile de umplere ale țesăturii și a înfășurării firelor. Cel mai important avantaj al acestei
metode este că este mai puțin sensibilă la variația sursei de intensitate, numită și zgomot de
fundal.
În articolul [11] s-a făcut un experiment de detecție a materialelor textile ce aveau defecte în
structura fizică, rezultatele fiind comparate cu rezultatele detecției acelorași materiale textile
fără defecte în structura fizică.
În etapa de preprocesare, a supra imaginilor de intrare s -a aplicat o operație de egalizare a
histogramei în scopul de a extinde plaja de valori a nuanțelor de gri și de a îmbunătăți contrastul
imaginilor.
15
Imaginile au fost scalate la dimensiunea de 512×512 pixeli, pentru ca în etap a de procesare, să
se aplice transformata Fourier Rapidă asupra imaginilor. Din diagrama tridimensională
rezultată, s -a extras diagrama centrală a spectrului de frecvențe spațiale, atât pentru imaginile
cu defect în structură, cât și pentru imagnile fără d efect.
Comparând cele două diagrame, s -a observat că orientarea în structura țesăturii a defectului
afectează diagrama obținută; spre exemplu, defect cu fir de urzeală dublă afectează diagrama
pe direcția (fy,0), pe când defectele cu fir de bătătură dublu afectează diagrama pe direcția
(fx,0).
În direcția transformatelor de tip wavelet s-a folosit o metodă adaptivă de transformare de tip
wavelet [12] pentru a efectua o decompoziție pe mai multe dimensiuni și a măsura densitatea
țesăturilor. Sub -imaginile o rizontale și verticale de înaltă frecvență s -au generat printr -o
descompunere standard pe o anumită direcție și o dimensiune selectată, care conțin separat
informațiile de urzeală și de țesătură. Apoi, densitatea țesăturii și caracteristicile de structură
aferente pot fi analizate folosind o metode de thresholding, filtrare și analiză a frecvenței [13].
În urma experimentelor, s -a observat că eroarea acestei metode automate de detectare a fost mai
mică de 3%, comparativ cu detecția manuală.
O altă abordare în direcția transfomatelor de tip wavelet este prezentată în articolul [ 14], în care
s-a folosit un banc de filtre Gabor, obținut prin varierea parametrilor filtrului Gabor, precum:
orientare, frecvență, fază, lungimea de undă . Răspunsul filtrelor, rezulta t prin operația de
convoluție între imaginea de intrare și valorile filtrului, va conține puncte de energie scăzută
pentru porțiunile din imagine ce nu conțin defect și puncte de energie ridicată pentru porțiunile
defective din imagine. Asupra imaginii fil trate, se aplică o operație de binarizare puternică ,
rezultând o imagine binară în care pixelii colorați în alb (intensitatea 255 ) reprezintă zonele cu
defect din imaginea originală, iar pixelii c olorați în negru (intensitatea 0 ), reprezintă zonele fără
defecte din imagine. Algoritmul a fost testat pe imagini cu materiale textile ce prezentau 16
defecte diferite ce sunt prezente în materialele produse în fabricile textile și prezintă o acuratețe
de 83.5% pe aceste exemple.
În lucrările [ 15, 16], s-a folosit un banc de filtre Gabor pentru segmentarea imaginilor ce conțin
mai multe modele de țesătură (figura 2.3.2).
16
S-a generat bancul de filtre Gabor, variindu -se frecvența (u) și orientarea filtrelor ( Ө).
Parametrul Ө poate fi variat folosindu -se două met ode: cu un unghi de separare a orientării de
30ș [ 17] (Ө ia valorile: 0ș, 30ș, 60ș, 90ș, 120ș, 150ș) sau cu un unghi de separare a orientării de
45ș [18] (Ө ia valorile: 0ș, 45ș, 90ș, 135ș) . Parametrul de frecvență u ia valorile: 1√2, 2√2, 4√2,
…, (N/4) √2, unde N este lățimea imaginii asupra căreia se aplică filtrul. Numărul de filtre
pentru un unghi de separare a orientării de 30ș este de 6 log 2(𝑁/2), iar pentru un unghi de
separare a orientării de 45ș este de 4 log 2(𝑁/2).
Schema de procesare este prezentată în figura 2.3.3.
Asupra imaginii de intrare se aplică toate filtrele Gabor din banc, rezultând un număr de imagini
egal cu numărul de filtre din banc. Asupra acestor imagini filtrate se aplică o metodă de
extragere a prop rietăților, precum: folosirea magnitudinea primită ca răspuns la filtrare,
aplicarea unei metode de netezire a imaginii, folosirea doar a componentei reale de la răspunsul
filtrului, folosirea unei funcții sigmoidale neliniare, etc.
Figura 2.3.2 Imagine cu mai multe modele de țesătură
17
În lucrarea [ 16] s-au folosit informațiile despre magnitudine de la ieșirea filtrelor. La finalul
procesului de extragere a proprietăților din imagine, rezultă un set de imagini extrase din
imaginile de la ieșirea filtrelor. Se pleacă de la premisa că pixelii care aparțin la a ceeași regiune
din imagine au aceleași proprietăți și că trebuiesc grupați în aceleași zone în spațiul de
caracteristici. În continuare, asupra acestor imagini se aplică un algoritm de clustering, precum
CLUSTER [18], KIF (K -Means Iterative Fisher) [ 19] sau K-Means [16]. Pentru aplicarea
algoritmilor de clustering, este necesar să se ofere la intrare numărul de clustere, adică numărul
de texturi diferite din imagine. Astfel, această abordare necesita informații apriori legate de
numărul de texturi din imagi ne.
Inițial, algoritmul K -Means poziționează clusterele în mod aleator în imaginea de intrare. Apoi,
algoritmul calculează distanța de la fiecare punct la fiecare cluster și asignează fiecare punct la
clusterul față de care acesta are cea mai mică distanț ă. Distanța dintre un punct și un cluster
poate fi calculată folosind distanța Euclidiană. Următorul pas este recalcularea poziției
clusterului, astfel încât acesta să se afle în centrul punctelor care aparțin de el.
Algoritmul lucrează interativ , parc urgând din nou toate punctele din imagine și asignându -le
celui mai apropiat cluster, apoi recalculând poziția fiecărui cluster, până când nu se mai
modifică poziția niciunui cluster.
Figura 2.3.3 Schema de procesare pentru segmentarea
imaginilor ce conțin mai multe modele de țesătură
18
Când se încheie algoritmul de clustering, fiecare pixel din imagine este atașat la un anumit
cluster, iar imaginea este segmentată.
Metodele de analiză în domeniul spațial au fost abordate în diverse direcții. Gao [20] a folosit
funcții de auto -corelație pentru a calcula repetările firelor de urzeală și de bătătură. Numărul
firelor de urzeală poate fi calculat ca fiind cel mai mic multiplu comun dintre numărul minim
de fire de urzeală corespunzător firelor de bătătură. Poziția și densitatea firelor de urzeală pot fi
determinate printr -un proces de binarizare a imaginii de intra re și o filtrare mediană. În final,
pot fi determinate proprietățile firelor de bătătură întrețesute.
Kuo [ 21] a folosit rețele neuronale pentru identificarea modelului de țesătură. Firele de urzeală
și firele de bătătură pot fi identificate prin cumulare a valorilor pixelilor în nuanțe de gri. Valorile
proprietăților texturii definite pot fi calculate și modul de întrețesere al firelor poate fi stabilit
prin aplicarea algoritmului FCM (Fuzzy C -Means). Apoi, diagrama modelului țesăturii și
matricea țesături i pot fi aflate prin aplicarea algoritmului Back -Propagation [ 22].
Au fost abordate și alte direcții în procesul de cercetare, neprezentate în această lucrare, precum
identificarea modelului de țesătură folosind metode statistice, teorii de morfologie mate matică,
etc.
2.4 Imaginea binară
Imaginea binară (figura 2.4.1) reprezintă o imagine digitală care are doar două valori posibile
pentru un pixel. În mod uzual, cele două valuri sunt 0 (negru) și 255 (alb), dar pot fi folosite
orice alte valori din intrevalul [0, 255]. Imaginea binară poate fi obținută prin procese de
thresholding sau de segmentare, folosindu -se o culoare pentru obiectele din imagine, iar restul
imaginii fiind culoarea de fundal [ 23].
O imagine binară poate fi creată dintr -o imagine grayscale folos indu-se o valoare prag. Astfel,
toți pixelii care au intensitatea mai mică decât valoarea de prag primesc valoarea 0, pe când
pixelii ce au intensitatea mai mare sau egală cu valoarea prag primesc valoarea 255.
Valoarea pragului poate fi dată static, dar performanțele algoritmului nu sunt excelente,
deoarece valoarea de prag diferă în funcție de imaginea de intrare. De aceea, s -au dezvoltat
algoritmi adaptivi pentru calcularea valorii de prag și extragerea imaginii binare.
19
2.4.1 Metoda lui Otsu
Meto da lui Otsu este un algoritm de binarizare a unei imagini. Algoritmul pleacă de la premisa
că imaginea este formată din două clase de pixeli, având o histogramă bimodală (pixeli din prim
plan și pixeli din fundal), apoi calculează valoarea de threshold opt imă, separând cele două
clase astfel încât varianța intra -clase este minimă și varianța dintre clase este maximă [ 24].
Metoda lui Otsu efectuează o căutare exhaustivă pentru valoare de prag care minimizează
dispersia din fiecare clasă. Dispersia de minimiz at 𝜎𝑤, este definită ca fiind suma ponderată
dintre dispersiile ( 𝜎0 și 𝜎1) celor două clase, după formula (2.4.1.1). Ponderile 𝑤0 și 𝑤1 sunt
probabilitățile celor două clase separate de valoarea de prag (threshold -ul) t și se calculeaz ă
după formulele (2.4.1.2), (2.4.1.3). Acestea sunt calculate pentru N vârfuri din histogramă .
𝜎2
𝑤(𝑡)= 𝑤0(𝑡)𝜎2
0(𝑡)+ 𝑤1(𝑡)𝜎2
1(𝑡) (2.4.1.1)
𝑤0(𝑡)= ∑ 𝑝(𝑖)𝑡−1
𝑖=0 (2.4.1.2)
𝑤1(𝑡)= ∑ 𝑝(𝑖)𝑁
𝑖=𝑡 (2.4.1.3)
Otsu [ 24] demonstrează că minimizarea dispresiei pentru fiecare clasă este același lucru cu
maximizarea dispersiei între cele două clase (2.4.1.4) , unde 𝜇0 și 𝜇1 sunt mediile celor două
Figura 2.4.1 Imagine binară
20
clase și sunt calculate după formulele (2.4.1.5), ( 2.4.1.6), iar 𝜇𝑇 este media întregii imagini,
calculată după formula ( 2.4.1.7).
𝜎2
𝑏(𝑡)= 𝜎2−𝜎2
𝑤(𝑡)= 𝑤0(𝑡)(𝜇0(𝑡)−𝜇𝑇)2+ 𝑤1(𝑡)(𝜇1(𝑡)−𝜇𝑇)2 (2.4.1.4)
𝜇0(𝑡)= ∑ 𝑖𝑝(𝑖)
𝑤0𝑡−1
𝑖=0 (2.4.1.5)
𝜇1(𝑡)= ∑ 𝑖𝑝(𝑖)
𝑤1𝑡−1
𝑖=0 (2.4.1.6)
𝜇𝑇(𝑡)= ∑ 𝑖𝑝(𝑖)𝑡−1
𝑖=0 (2.4.1.7)
Algoritmul este unul iterativ. Inițial, se calculează histograma și probabilitățile pentru fiecare
nivel de gri și se setează 𝑤0(0), 𝑤1(0), 𝜇0(0) și 𝜇1(0). Se parcurg toate valorile posibile
pentru prag t ( de la 0 la intensitatea maximă din imagine) și pentru fiecare valoare se calculează
𝑤0(𝑡), 𝑤1(𝑡), 𝜇0(𝑡) și 𝜇1(𝑡) și 𝜎2
𝑏(𝑡).
La finalul algoritmului, valoarea de prag obținută este cea pentru care 𝜎2
𝑏(𝑡) are valoare
maximă sau 𝜎2
𝑤(𝑡) are valoare minimă, în funcție de metoda de implementare .
2.5 Segmentarea imaginilor
În procesarea de imagini, segmentarea imaginilor este procesul de divizare al unei imagini în
mai m ulte regiuni (segmente) adiacente, în vederea simplificării modului de reprezentare al
unei imagini originale, într-o imagine mai semnificativă și mai ușor de analizat. Segmentarea
este, în general, folosită pentru a se identifica obiecte și marginile dintr -o imagine (linii, curbe,
etc) și pentru separarea porțiunilor din imagine ocupate cu obiecte , de imaginea de fundal .
Putem privi procesul de segmentare al imaginilor ca fiind o metodă prin care, fiecărui pixel din
imagine, i se atribuie o anumită etichetă, astfel în cât tuturor pixelilor care au aceleași seturi de
caracteristici ( precum culoare, textură, intensitate) să li se atribuie aceeași etichetă. Aceste
etichete sunt o formă de reprezentare a regiunilor distincte din imagine.
Rezultatele segmentării unei imagi ni este reprezentat printr -un set de regiuni distincte care
acoperă imaginea în întregime.
Exită o multitudine abordări referitoare la metode de segmentare a imaginilor, în funcție de
forma imaginii și de rezultatul dorit la ieșire, precum:
21
1. Metode de seg mentare ce folosesc o valoare prag (metode de thresholding).
Aceste metode pot fi combinate cu tehnici de preprocesare sau de postprocesare
sau pot fi aplicate direct asupra unei imagini. (ex. Metoda Otsu de segmentare )
2. Metode de segmentare de detecție a muchiilor (marg inilor unui obiect) , bazate
pe snake și de tip balon . Aceste metode detectează muchiile dintr -o imagine, ce
sunt considerate a fi marginile unui obiect, și sunt folosite pentru identificarea
unui obiect . (ex.: algoritmul watershed)
3. Tehnici de region growin g și split and merge
4. Metode de clustering. Aceste metode de segmentare se bazează pe informațiile
de culoare din imagine. (ex.: algoritmul de clustering K -Means)
5. Metode de segmentare specifice texturilor, precum filtrele de textură
2.5.1 Algoritmul K -Mean s
Algoritmul K -Means este un algoritm de învățare nesupervizată ce rezolvă problema de grupare
automată a datelor dintr -un set, pe baza caracteristicilor comune ale acestora. Ideea de bază a
algoritmului este împărțirea datelor în funcție de similaritatea lor. Astfel, un set dat de date de
antrenament este clasificat într -un număr k de clustere fixa t apriori, cu condiția ca fiecare
element din setul de date să aparțină unui singur cluster. Acest număr k reprezintă valoarea
literei k din denumirea algoritmului.
Inițial, se alege numărul de clustere k. Fiecare cluster are un centru de clasă, numit și centroid.
În faza de inițializare, se generează aleator coordonatele fiecărui centru de clasă, cu condiția ca
acestea să fie alese tot în spațiul de reprezentare a dat elor de antrenament. Termenul de
coordonate este un termen general, reprezentând un set de valori diferite în funcție de tipul de
date din setul de date. Generic, pentru gruparea punctelor sau a pixelilor în k clase distincte, se
folosesc cele două coordon atele spațiale x și y. Totuși, algoritmul poate fi adaptat la în funcție
de necesitatea problemei.
Se parcur ge imaginea pixel cu pixel. P entru fiecare pixel se calculează similaritatea dintre
pixelul curent și toate cele k centre de clasă. Pixelul se va asocia centrului de clasă față de care
prezintă cea mai puternică similaritate. Cea mai utilizată metodă pentru calculul similarității
este distanța Euclidiană dintre două puncte, dar poate fi folosită orice metodă de calcul ce
22
calculează corect similarit atea între exemplele din setul de date și centroizi, în funcție de
cerințele problemei.
După parcurgerea întregii imagini, se consideră că toți pixelii din imagine asociați la un centru
de clasă formează un cluster. Astfel, pentru ca centrul de clasă să ca racterizeze cât mai bine
datele (pixelii) asociați, acesta trebuie să se afle în centrul clusterului. Astfel, pentru fiecare
cluster, se mută centrul de clasă în mijlocul punctelor asociate .
Apoi, se parcurge din nou imaginea pixel cu pixel și pentru fieca re pixel se calculează
similaritatea dintre pixelul curent și toate cele k centre de clasă mutate la pasul anterior și
algoritmul se repetă până când fiecare pixel din imagine rămâne asociat aceluiași centru de
clasă pentru două iterații consecutive.
La finalul algoritmului, datele din setul de date sunt grupate în k clustere și, practic, imagin ea
este segmentată în k regiuni.
2.6 Transformata Fourier
2.6.1 Transformata Fourier continuă
Transformata Fourier este o unealtă care descompune un semnal (pract ic, orice formă de undă
din lumea reală), într -o sumă de semnale sinusoidale (funcții sinus și co sinus) . Practic,
transformata Fourier este o extensie a teoremei Fourier pentru semnale neperiodice. Aceasta se
face tratând semnalul neperiodic ca fiind un s emnal periodic, cu o perioadă ce tinde la plus
infinit.
Transformata Fourier descompune o funcție (un semnal) reprezentat ă într-un anumit domeniu
de reprezentare (domeniul timp, domeniul spațial, etc) în frecvențele din care este compusă.
Funcția rezulta tă este o funcție complexă în domeniul frecvență, ce conține aceeași informație
ca și funcția originală, dar sub o altă formă de reprezentare. Valoarea absolută a funcției
complexe rezultate reprezintă cantitatea acelei frecvențe în funcția inițială, iar a rgumentul
complex reprezintă offset -ul de fază al funcției sinusoidale ce are ca argument acea frecvență.
Formula lui Euler stabilește relația fundamentală dintre funcțiile tr igonometrice și funcția
exponențială complexă. Formula lui Euler afirmă că, pentr u orice număr real x, este valabilă
23
relația (2. 6.1.1). Datorită relației (2. 6.1.1), t ransformata Fourier a unei funcții în domeniul timp
sau în domeniul spațial f(x) este definită prin formula (2. 6.1.2), unde u este variabilă în
domeniul frecvență și j= √−1.
𝑒𝑗𝑥=cos𝑥+𝑗sin𝑥 (2.6.1.1)
𝐹(𝑢)= ∫ 𝑓(𝑥)𝑒−𝑗2𝜋𝑢𝑥+∞
−∞𝑑𝑥 (2.6.1.2)
F(u) este o funcție complexă. În continuare, notăm componenta reală Fr(u) și componenta
imaginară Fi(u). Amplitudinea M(u) este defini tă după formula (2. 6.1.3), iar faza ϕ(u) este
definită după formula (2. 6.1.4).
𝑀(𝑢)=│𝐹(𝑢)│= √𝐹𝑟2(𝑢)+ 𝐹𝑖2(𝑢) (2.6.1.3)
𝜙(𝑢)= tan−1𝐹𝑖(𝑢)
𝐹𝑟(𝑢) (2.6.1.4)
Funcția inițială, f(x), poate fi reconstruită prin aplicarea transformatei Fourier inversă asupra
funcției F(u), după formula (2. 6.1.5). Funcțiile F(u) și f(x) sunt numite și funcții pereche de
transformare Fourier.
𝑓(𝑥)= ∫ 𝐹(𝑢)𝑒𝑗2𝜋𝑢𝑥+∞
−∞𝑑𝑢 (2.6.1.5)
Pentru un semnal bidim ensional, f(x,y), unde x și y sunt variabile în domeniul spațial,
transformata Fourier este calculată prin aplicarea formulei (2. 6.1.6), unde u și v reprezintă
frecvențele corespunzătoare variabilelor spațiale x și y. Transformata Fourier inversă este
calculată prin aplicarea formulei (2. 6.1.7).
𝐹(𝑢,𝑣)= ∬𝑓(𝑥,𝑦)𝑒−𝑗2𝜋(𝑢𝑥+𝑣𝑦)+∞
−∞𝑑𝑥 𝑑𝑦 (2.6.1.6)
𝑓(𝑥,𝑦)= ∬𝐹(𝑢,𝑣)𝑒𝑗2𝜋(𝑢𝑥+𝑣𝑦)+∞
−∞𝑑𝑢 𝑑𝑣 (2.6.1.7)
24
2.6.2 Transformata Fourier Discretă Bidimensională
Deoarece imaginea digitală este un o mulțime discretă, reprezentată printr -un tablou
bidimensional, asupra ei nu poate fi aplicată transformata Fourier continuă.
Transformata Fourier discretă este o formă eșantionată a transformatei Fourier continue.
Aceasta nu co nține toate frecvențele din componența unei imagini, ci doar un set finit de
eșantioane, suficient de mare cât să descrie complet imaginea în domeniul spațial. Acest set este
format din numărul de pixeli din imagine, fiecărui pixel din imaginea reprezentat ă în domeniul
spațial corespunzându -i o anumită frecvență. Întotdeauna, numărul de eșantioane de la ieșire
este egal cu numărul de eșantioane (valori discrete) de la intrare.
Pentru o imagine de dimensiune NxM, în care intensitățile pixelilor sunt reprezen tate printr -o
funcție discretă f(x,y), unde x și y sunt valori discrete în domeniul spațial (x ϵ [0, N -1], y ϵ [0,
M-1]), iar u și v sunt valori discrete în domeniul frecvență (u ϵ [0, N -1], v ϵ [0, M -1])
transformata Fourier Discretă bidimension ală este calculată după formula (2. 6.2.1). Practic, x,
y, u și v sunt eșantioanele imaginii.
𝐹(𝑢,𝑣)= ∑ ∑𝑓(𝑥,𝑦)𝑒−𝑗2𝜋(𝑢𝑥
𝑁+𝑣𝑦
𝑀)𝑀−1
𝑦=0 𝑁−1
𝑥=0 (2.6.2.1)
Transformata Fourier discretă bidimensională inversă este calculată după formula (2. 6.2.2).
𝑓(𝑥,𝑦)= ∑ ∑𝐹(𝑢,𝑣)𝑒𝑗2𝜋(𝑢𝑥
𝑁+𝑣𝑦
𝑀)𝑀−1
𝑣=0 𝑁−1
𝑢=0 (2.6.2.2)
2.6.3 Transformata Fourier Rapidă (FFT)
Transformata Fourier Discretă este un algoritm extrem de costisitor. Pentru N puncte,
complexitate a acestui algoritm este de 2𝑁2, fiind inadmisibilă pentru procesarea în timp real.
Transformata Fourier Rapidă este un algoritm ce calculează transformata Fourier Discretă,
reducând drastic numărul de calcule, având o complexitate de 2𝑁log 2𝑁. Pentru un număr N
suficient de mare, timpul de procesare este semnificativ mai mic, fapt pentru care transformata
25
Fourier Rapidă este folosită în favoarea transformatei Fourier clasice. Algoritmul poate fi
aplicat pe tablouri ce au dimensiunile numere ce su nt puteri ale lui 2.
Ideea de transformată Fourier Rapidă a fost discutat încă din jurul anului 1805 de către Gauss
într-o lucrare nepublicată [ 25], care a folosit -o pentru interpolarea traiectoriilor asteroizilor
Pallas și Juno, fără să calculeze timpul d e computațional asimptotic. Lucrarea a fost publicată
postmortem [ 26], dar algoritmul a devenit popular abia în anul 1965, când James Cooley și John
Tukey au publicat un articol în care au reinventat algoritmul, explicând îmbunătățirea în timpul
de procesa re [27].
Ideea ce stă la baza algorimului este simetria valorilor transformatei Fourier Discrete (2.6.3.1).
Extinzând, rezultă că este adevărată și formula (2. 6.3.2), pentru orice număr natural i .
𝐹𝑁+𝑘 = 𝐹𝑘 (2.6.3.1)
𝐹𝑖𝑁+𝑘 = 𝐹𝑘 (2.6.3.2)
Cooley și Tukey [ 27] au demonstrat că este posibil să se împartă semnalul discret pe care se
calculează transformata Fourier discretă în submulțimi mai mici asupra cărora se va calcula
transformata Fourier discretă. Semnalul discret iniți al de lungime N este împărțit în două
submulțimi: submulțimea ce conține valorile cu indici numere pare și submulțimea ce conține
valorile cu indici numere impare. La rândul lor, aceste submulțimi sunt descompuse în alte două
submulțimi submulțimea ce conț ine valorile cu indici numere pare și submulțimea ce conține
valorile cu indici numere impare și așa mai departe, până se ajunge la N submulțimi cu un
singur element , ca în figura 2. 6.3.1.
Figura 2.6.3.1 Descompunerea semnalului de lungime 16 în 16 s emnale de
lungime 1
26
Operația de descompunere este explicată mai detaliat în contin uare. Relația de calcul a
transformatei Fourier discretă este dată de formula (2.6.3.3) , pentru k ϵ[0,N) . Definim vectorul
de fază 𝑊𝑁 ca în formula (2.6.3.5). Datorită proprietăților de simetrie ale vectorului de fază
(2.6.3.6) și de periodicitate (2. 6.3.7), formula (2.6.3.3) poate fi scrisă în forma (2.6.3.4).
𝐹[𝑘]= ∑ 𝑓[𝑘]𝑁−1
𝑛=1 𝑒−𝑗2𝜋𝑘𝑛
𝑁 (2.6.3.3)
𝐹[𝑘]= ∑ 𝑓[𝑘]𝑊𝑁𝑘𝑛 𝑁−1
𝑛=1 (2.6.3.4)
𝑊𝑁= 𝑒−𝑗2𝜋
𝑁 (2.6.3.5)
𝑊𝑁𝑘+𝑁
2= − 𝑊𝑁𝑘 (2.6.3.6)
𝑊𝑁𝑘+𝑁=𝑊𝑁𝑘 (2.6.3.7)
În continuare, descompunem semnalul de lungime N în două subsemnale de lungime N/2:
subsemnalul ce conține valorile cu indici numere pare și subsemnalul ce conține valorile cu
indici numere impare ca în formula (2.6.3.8). În continuare, formula (2.6.3.8) poate fi rescrisă
în forma (2.6.3.9). Dat fiind că 𝑊𝑁𝑘 este factor liber în sumă, se poate rescrie formula
(2.6.3.10). Datorită proprietăților vectorului de fază (2.6.3.11), relația se poate scri e în forma
(2.6.3.12). Notăm suma componentelor de pe indicii pari 𝐹𝑒[𝑘] și suma componentelor de pe
indicii impari 𝐹𝑜[𝑘]. Relația devine (2.6.3.13). Astfel, transformata Fourier discretă a N puncte
devine sumă a două transformate Fourier discr ete a N/2 puncte, 𝐹𝑒[𝑘] și 𝐹𝑜[𝑘]. În continuare,
cele două subsemnale se împart din nou în două submulțimi și așa mai departe până se ajunge
la N submulțimi (N transformate Fourier discrete) cu 1 punct.
𝐹[𝑘]= ∑ 𝑓[𝑛]𝑁−1
𝑛=0 𝑊𝑁𝑘𝑛= ∑ 𝑓[2𝑛]𝑁
2−1
𝑛=0𝑊𝑁2𝑛𝑘+ ∑ 𝑓[2𝑛+1]𝑁
2−1
𝑛=0𝑊𝑁(2𝑛+1)𝑘 (2.6.3.8)
𝐹[𝑘]= ∑ 𝑓[2𝑛]𝑁
2−1
𝑛=0(𝑊𝑁2)𝑘𝑛+ ∑ 𝑓[2𝑛+1]𝑁
2−1
𝑛=0(𝑊𝑁2)𝑘𝑛𝑊𝑁𝑘 (2.6.3.9)
𝐹[𝑘]= ∑ 𝑓[2𝑛]𝑁
2−1
𝑛=0(𝑊𝑁2)𝑘𝑛+ 𝑊𝑁𝑘 ∑ 𝑓[2𝑛+1]𝑁
2−1
𝑛=0(𝑊𝑁2)𝑘𝑛 (2.6.3.10)
𝑊𝑁2= 𝑒−𝑗2𝜋
𝑁2= = 𝑒−𝑗2𝜋
𝑁
2= 𝑊𝑁
2 (2.6.3.11)
𝐹[𝑘]= ∑ 𝑓[2𝑛]𝑁
2−1
𝑛=0𝑊𝑁
2𝑘𝑛+ 𝑊𝑁𝑘 ∑ 𝑓[2𝑛+1]𝑁
2−1
𝑛=0𝑊𝑁
2𝑘𝑛 (2.6.3.12)
27
𝐹[𝑘]= 𝐹𝑜[𝑘]+ 𝑊𝑁𝑘 𝐹𝑒[𝑘] (2.6.3.13)
Spectrul de frecvență pentru fiecare semnal de lungime 1 este egal cu valoarea semnalului.
Următorul pas îl reprezintă combinarea celor N spectre de frecvență în ordinea inversă
descompunerii lor , ținând cont de vectorul de fază . Acest pas se ef ectuează după o tehnică
numită the butterfly diagram , prezentată în figura 2.6.3.2. În această figură, direcția săgeților
indică o operație de adunar e a valorii din care pleacă săgeata la valoarea în care aceasta intră.
Valorile care pleacă de la mulțimea de intrare la cea de ieșire (transformata Fourier pentr x
puncte ) sunt înmulțite cu coeficienții trecuți pe linia pe care aceștia se transmit.
În final, valorile de ieșire reprezintă valorile transformatei Fourier discrete asupra mulțimii de
intrare, calculate cu o complexitate mult mai mică ( 2𝑁log 2𝑁).
Transformata Fourier Rapidă Bidimensională se calculează folosind transformata Fourier
Rapidă unidimensional ă astfel: se calculează transformata Fourier Rapidă unidimensională pe
toate liniile din tabloul bidimensional, apoi se calculează transformata Fourier Rapidă
unidimensională pe toate coloanele din tabloul bidimensional.
Figura 2.6.3.2 The butterfly diagram pentru un semnal de lungime 8
28
2.7 Filtre Gabor
Filtrel e Gabor au fost pentru prima oară introduse de către Dennis Gabor, în anul 1946 [ 28].
Acestea sunt filtre trece bandă, ce sunt folosite în procesarea imaginilor în pentru extragerea de
caracteristici, recunoaștere facială sau pentru analiza texturilor.
Filtrul Gabor unidimensional este definit ca fiind o funcție sinusoidală mărginită în
amplitudine de o funcție Gaussină. Expresia generală este prezentată în formula (2.7.1) , unde
𝑓𝑥 reprezintă frecvența funcției sinusoidale și 𝜎2 este dispersia fu ncției Gaussiene.
𝑔(𝑥)= 𝑒−1
2 [( 𝑥−𝑥0
𝜎)2+𝑗2𝜋𝑓𝑥𝑥] (2.7.1)
Componenta pară a filtrului Gabor este prezentată în formula (2.7.2), iar componenta impară
este prezentată în fomula (2.7.3).
𝑔𝑒(𝑥)= 𝑒−1
2 ( 𝑥
𝜎)2cos(2𝜋𝑓𝑥𝑥) (2.7.2)
𝑔𝑜(𝑥)= 𝑒−1
2 ( 𝑥
𝜎)2sin(2𝜋𝑓𝑥𝑥) (2.7.3)
În spațiul bidimensional, filtrul Gabor e definit printr -o funcție Gaussiana kernel modulată de
o undă plană sinusoidală. Forma filtrului este prezentată în figura 2.7.1.
Componenta impară a filtrului Gabor în spațiul bidimensional este prezentat în formula (2.7.4),
iar componenta pară este prezentată în formula (2.7.5) , unde f și ф reprezintă frecvența,
Figura 2.7.1 Filtru Gabor în planul bidimensional
29
respectiv faza, undei plane sinusoidale de -a lungul axei x, 𝜎2 este dispersia funcției Gaussiene,
iar Ө este unghiul de orientare al filtrului .
𝑔𝑒(𝑥,𝑦)= 𝑒−1
2 𝑥2 + 𝑦2
𝜎2sin(2𝜋𝑓(𝑥cosӨ+ 𝑦sinӨ)) (2.7.4 )
𝑔𝑜(𝑥,𝑦)= 𝑒−1
2 𝑥2 + 𝑦2
𝜎2cos(2𝜋𝑓+ ф) (2.7.5 )
2.7.1 Produsul de convoluție
În domeniul procesării de imagine, produsul de convoluție este o metodă generică de filtrare ,
reprezentând o operație matematică aplicată asupra unei imagini și a unei măști de convoluție,
obținută, de regu lă, printr -o metodă de filtrare .
Considerând imaginea (matricea) de intrare I[N,M] și a măștii de convoluție M[N,M], produsul
de convoluție este definit prin formula (2.7.1.1) și reprezintă un număr întreg.
𝑐=𝐼⨂𝑀= ∑ ∑𝐼[𝑖,𝑗]𝐻[𝑖,𝑗]𝑀−1
𝑗=0 𝑁−1
𝑖=0 (2.7.1.1)
2.8 Transformata Hough
Transformata Hough este o tehnică de extragere a caracteristicilor dintr -o imagine, folosită în
domeniile procesării de imagini, computer vision și prelucrarea digitală a imaginilor.
Inițial, transformata Hough a fost creată pentru a detecta linii într -o imagine [ 29], dar a fost
dezvoltată ulterior în scopul detecției de forme arbitrare , preponderent elipse sau cercuri [30].
Transformata Hough clasică detectează o linie prin găsirea punctelor ce formează linia.
Potrivit formulei (2. 8.1), un punct în planul x, y este definit prin cei doi parametri, m și n. Astfel,
pentru o linie în planul x, y, avem o mulțime de combinații posibile pentru valorile lui x și y, și
valorile m și n fixate, astfel încât să fie respectată formula (2. 8.1). Deoar ece valorile
parametrilor m și n sunt fixate, se trece într -un nou plan de reprezentare m, n, denumit feature
30
space (2.8.2). În noul plan de reprezentare, orice punct ( 𝑥𝑙,𝑦𝑙), definesc o mulțime de linii în
funcție de valorile parametrilor m și n.
𝑦=𝑚𝑥+𝑛 (2.8.1)
𝑛=−𝑚𝑥+𝑦 (2.8.2)
Deoarece acest plan de reprezentare consideră liniile verticale ca având lungime infinită,
transformata Hough lucrează cu coordonate le polare (figura 2. 8.1). Astfel, ecuația unei linii este
definită de relația (2. 8.3), unde 𝜌 reprezintă lungimea perpendicularei dusă din origine pe
dreaptă, iar Ө este unghiul făcut de dreapta perpendiculară cu dreapta Ox .
𝜌=𝑥 cosӨ+𝑦 sinӨ (2.8.3)
Algoritmul operează folosindu -se de o structură numită acumulator, care este un tablou
bidimensional de dimensiune egală cu numărul de combinații posibile pentru valorile 𝜌 și Ө
(figura 2.7.2) . Indicii tabloului conțin toate combinațiile posibile pentru 𝜌 și Ө. Considerăm
acumulatorul având limite ( −𝜌𝑚𝑎𝑥,𝜌𝑚𝑎𝑥) pentru indicii de pe liniile acumulatorului și
(−Ө𝑚𝑎𝑥,Ө𝑚𝑎𝑥) pentru indicii de pe coloanele acumulatorului.
Parametrul 𝜌𝑚𝑎𝑥 indică lungimea maximă a unei linii drepte ce poate exista în imaginea de
intrare. Considerân d imaginea de intrare o imagine dreptunghiulară de dimensiune NxM, linia
de lungime maximă din imagine este linia ce străbate imaginea pe întreaga lungime, făcând un
unghi de 45 ș cu planul xOy. Lungimea liniei este simplu de calculat, fiind ipotenuza unui
triunghi dreptunghic de catete N și M, după formula (2. 8.4).
Parametrul Ө va fi variat între -90ș și 90ș sau între 0ș și 180ș.
Figura 2.8.1 Reprezentarea unei linii prin coordonate polare
31
𝜌𝑚𝑎𝑥 = √𝑁2+ 𝑀2 (2.8.4)
Inițial, acumulatorul se inițializează cu 0. Pentru detectarea liniilor, se parcurge imaginea de
intrare pixel cu pixel. La detecția unui punct (pixel cu intensitatea mai mare decât o valoare
prag), de coordonate 𝑥𝑝 , 𝑦𝑝, se parcurge acumulatorul ș i se incrementează toate valorile cu
indicii 𝜌𝑝 , Ө𝑝 pentru care respectă formula (2.8.5).
𝜌𝑝=𝑥𝑝 cosӨ𝑝+𝑦𝑝 sinӨ𝑝 (2.8.5)
După ce se parcurg toate punctele din imagine, punctele de maxim din acumulator indică
prezen ța unor drepte. Valorile mari din acumulator indică faptul că multe puncte din imagine
au respectat ecuația dreptei respective. Din acumulator, se poate extrage un singur punct de
maxim sau se pot extrage un număr de puncte, în ordine descrescătoare sau se pot extrage toate
punctele mai mari decât o valoare impusă, în funcție de scopul în care este folosită metoda.
După ce se găsesc punctele dorite, ecuația dreptelor este dată de indicii (pozițiile) din
acumulator ale punctelor, 𝜌𝑝 și Ө𝑝.
Figura 2.8.2 Forma Acumulatorului
32
3. Rez olvarea temei de proiect
3.1 Descrierea aplicației
Aplicația curentă își propune determinarea defectelor dintr -o textură, bazându -se pe
proprietatea filtrelor Gabor bidimensionale impare de a produce o matrice simetrică care, prin
produsul de convoluție, produce un număr mic de ieșire pentru zonele fără defect și un număr
mare la ieșire pentru zonele afectate de defect. Aplicația se axează pe detecția materialelor
textile, dar poate fi aplicată oricărui tip de textură puternic periodică, concentrându -se, în
rezolvarea problemei, asupra proprietăților de periodicitate ale unei imagini.
Figura 3.1.1 Schem a bloc a aplicației
33
În figura 3.1.1 este prezentată schema bloc a aplicației, reprezentând toate etapele prin care
trece o imagine de la intrare până la generarea rezultatelor.
3.2 Descrierea bloc urilor din schema bloc
3.2.1 Imaginea de intrare
Imaginea de intrare trebuie să fie o textură pentru ca aplicația să poată detecta defectele din
imagine. Sunt preferate texturile fine, puternic periodice. Pentru acestea, produsul de convoluție
cu filtrul Gabor corespunzător este întotdeauna o valoare mică în valoare absolută, apropiată de
0. În practică, produsul de convoluție nu este 0 deoarece texturile nu sunt perfect periodice,
ideale.
Imaginea de intrare poate fi în format jpeg, bitmap sau png. Sunt preferate imaginile de tip png
în favoarea celor de tip jpeg, deoarece acestea nu sunt comprimate și nu își pierd din proprietăți.
Calitatea imaginii de intrare este foarte importantă, deoarece filtrele Gabor sunt extrem de
sensibile la proprietățile imaginilor .
Pentru a se încărca o imagine, se selectează opțiunea Load -> Load Image din interfața grafică
a proiectului , care apelează metoda LoadImage din clasa principală a proiectului . După apăsare,
se va deschide o fereastră de dialog care perimite căutarea unei imagini sal vată în calculator și
selectarea ei. Selectarea se face prin click pe imagine, apoi click pe butonul Open din fereastra
de dialog, ca în figura 3.2.1.1.
private void LoadImage()
{
openFileDialog.ShowDialog();
_path = openFileDi alog.FileName;
imageToProcess = new PreprocessingBitmap( _path );
pictureBoxOriginal.Image = imageToProcess.ColorBitmap;
}
Această metodă inițial deschide fereastra de dialog. După ce a fost ales un fișier și se apasă
butonul Ope n din fereastra de dialog, se preia calea absolută a imaginii selectate concatenată
cu numele imaginii. Calea absolută (variabila _ path) este transmisă ca parametru
34
constructorului clasei PreprocessingBitmap , care este o clasă folosită pentru încărcarea ef ectivă
a imaginii în structurile de date ce urmează să fie folosite în procesul de procesare a imaginii.
Clasa PreprocessingBitmap păstrează informații despre dimensiunile imaginii selectate, datele
de reprezentare ale imaginii originale într -o structură Bitmap și imaginea în nuanțe de gri
obținută , ce urmează să fie folosită mai departe în procesare . Diagrama clasei este prezentată în
figura (3.2.1.2).
Figura 3.2.1.1. Încărcarea unei imagini în aplicație
35
Clasa PreprocessingBitmap permite încărcarea unui imagini prin c ale absolută _ path, sau
utilizarea unei imagini deja încărcate în aplicație. Încărcarea unei imagini este făcută unul din
cei doi constructori supraîncărcați, în funcție de metoda aleasă. Metoda utilizată din interfața
grafică este cea prin cale absolută.
public PreprocessingBitmap(string path)
{
_path = path;
LoadImage();
SetGrayscaleImage();
}
private void LoadImage()
{
using (Stream bitmapStream = File.Open(_path, FileMode.Open))
{
_image = Image.FromStream(bitmapStream);
ColorBitmap = new Bitmap(_image);
GrayscaleBitmap = new Bitmap(_image);
Width = _image.Width;
Height = _image.Height;
Grayscal eMatrix = new int[Width, Height];
}
}
Figura 3.2.1.2 Diagrama clasei PreprocessingBitmap
36
Metoda LoadImage încarcă imaginea selectată în membrul _ image , copiază imaginea în cele
două bitmap -uri folosite pentru reprezentarea grafică a imaginii, inițializează proprietățile
Width cu dimensiunea în pixeli a lățimii imagini și Height cu dimensiunea în pixeli a înălțimii
imaginii și alocă memorie pentru tabloul bidimensional GrayscaleMatrix , ce păstrează
intensitățile imaginii în nuanțe de gri pentru fiecare pixel. Aceasta este folosită în continuar e în
procesare, pentru a accesa direct intensitățile imaginii, fără să fie nevoie să se acceseze mereu
bitmap -ul ce păstrează imaginea în nuanțe de gri. Bitmap -ul este folosit pentru reprezentare.
3.2.2 Transformarea în nivele de gri
Acest bloc primește la intrare imaginea ce se vrea a fi procesat ă și produce la ieșire aceeași
imagine în cele 256 de nuanțe de gri posibile. Imaginea în nuanțe de gri este produsă prin suma
ponderată a fiecărei componente de culoare a unui pixel, după formula (2.2.1 .1) prezentată în
subcapitolul 2. 1.1.
Majoritatea algori tmilor din domeniul procesării de imagini lucrează pe imagini în nuanțe de
gri în favoarea imaginilor color, datorită volumului mic de informații ale acestora, păstrând o
singură intensitate pentru fiecare pixel și a simplificării metodelor de procesar e.
În continuare, asupra imaginii în nivele de gri obținute, se aplică transformata Fourier și bancul
de filtre Gabor.
Transformarea imaginii în nuanțe de gri este realizată în clasa PreprocessingBitmap , prin
metoda SetGrayscaleImage . Metoda SetGrayscaleImage verifică inițial dacă imaginea de
intrare este dej a o imagine în nuanțe de gri , prin apelarea metodei booleene IsGrayscale , care
returnează true pentru o imagine în nuanțe de gri și false pentru o imagine color. În cazul în
care imaginea încărcată este deja o imagine în nuanțe de gri, se setează doar Gray scaleMatrix
cu nuanța de gri preluată din imagine, deoarece GrayscaleBitmap a fost deja setat în constructor
cu imaginea corespunzătoare.
În caz contrar, se setează atât pixelii din GrayscaleBitmap , cât și valorile din GrayscaleMatrix ,
cu valoarea sumei po nderate a fiecărei componente de culoare din imagine, pentru fiecare pixel.
public void SetGrayscaleImage()
{
if (!IsGrayscale())
{
37
for (int x = 0; x < ColorBitmap.Width; x++)
{
for (int y = 0; y < ColorBitmap.Height; y++)
{
var pixelColor = ColorBitmap.GetPixel(x, y);
var grey = (byte)(pixelColor.R * 0.3 + pixelColor.G * 0.59 + pixelColor.B * 0.11);
GrayscaleBitmap.SetPixel(x, y, Color.FromArgb(pixelColor.A, grey, grey, grey));
GrayscaleMatrix[x, y] = grey;
}
}
}
else
{
for (int x = 0; x < ColorBitmap.Width; x++)
{
for (int y = 0; y < ColorBitmap.Height; y++)
{
var pixelColor = ColorBitmap.GetPixel(x, y);
GrayscaleMatrix[x, y] = pixelColor.R;
}
}
}
}
3.2.3 Transformata Fourier
Baza teoretică a transformatei Fourier a fost prezentată în subcapitolul 2.6. Deoarece
transformata Fourier Discretă are un timp de procesare m are, având complexitate de O( 𝑁2), în
această aplicație s -a folosit transformata Fourier Rapidă, care are complexitate de O( 𝑁log 2𝑁).
Transformata Fourier transformă imaginea în nuanțe de gri din domeniul spațial, într -o nouă
imagine în domeniul frecvență, ce păstrează același date, dar sub o altă formă de reprezentare.
Imaginea de intrare este un tablou de numere întregi ce reprezintă intensitățile pixelilor.
Aplicând transformata Fourier, obținem un tablou de numere complexe, de aceeași dimensi une
cu imaginea de intrare, ce păstrează informații despre spectrul de amplitudine și spectrul de fază
al imaginii în domeniul frecvență . Scopul acestei aplicații nu necesită informații despre spectrul
de fază, ci doar despre spectrul de amplitudine , folos indu-se informații din spectrul de
amplitudine pentru detecția unghiurilor de orientare optim e Ө pentru filtrele Gabor .
Spectrul de amplitudine se calculează după formula (3.2.1), unde Fr este partea reală a
numărului complex rezultat, iar Fi reprezintă parte a imaginară. Acesta păstrează informații
despre structura geometrică a imaginii și despre despre cantitatea fiecărei frecvențe din imagine.
38
𝑀(𝑢)=│𝐹(𝑢)│= √𝐹𝑟2(𝑢)+ 𝐹𝑖2(𝑢) (3.2.1)
Informații din spectrul de amplitudine sunt folosite mai departe, î n celălalte blocuri de
procesare.
Transformata Fourier este calculată în clasa FFT. Diagrama clasei FFT este prezentată în figura
3.2.3.1.
Figura 3.2.3.1 Diagrama clasei FFT
39
Datele de intrare sunt reprezentate de structura de tip PreprocessingBitmap , care este pareluată
prin constructorul clasei și copiată în membrul _ image . Deoarece transformata Fourier Rapidă
necesită ca tabloul (semnalul) de intrare să fie de dimensiuni ce sunt puteri ale lui 2,
transformata Fourier Rapidă va fi aplicată doar pe o p orțiune din imagine, care reprezintă cea
mai mare porțiune din imagine ce are dimensiunile puteri ale lui 2. Faptul că nu se folosește
întreaga imagine nu degradează rezultatele obținute, deoarece spectrul de amplitudine rezultat
păstrează informații despr e toate unghiurile de orientare a texturii.
Astfel, în constructor este apelată metoda CopyData , care modifică datele de intrare la forma
necesară procesărilor ulterioare. Astfel, se salvează în variabilele N și M cel mai mare număr
ce este putere a lui 2, care este mai mic sau egal decât lățimea, respectiv înălțimea, imaginii de
intrare. În continuare, se alocă memorie pentru structurile de date folosite în procesare . Metoda
IsPowe rOfTwo returnează true dacă argumentul său este putere a lui 2 și false în caz contra r,
iar metoda PrecedentPowerOfTwo returnează cel mai mare număr multipul de 2, care este mai
mic decât argumentul primit la apel.
Deoarece transformata Fourier Rapidă folosește numere complexe, se copiază o porțiune NxM
din datele imaginii de intrare în n uanțe de gri într -un tablou de numere complexe, _ data.
Imaginea de intrare reprezintă numere naturale, de aceea datele vor fi copiate în partea reală a
numerelor complexe, iar partea imaginară a acestora va fi 0.
private void CopyData()
{
N = IsPowerOfTwo(_image.Width) ? _image.Width : PrecedentPowerOfTwo(_image.Width);
M = IsPowerOfTwo(_image.Height) ? _image.Height : PrecedentPowerOfTwo(_image.Height);
_data = new COMPLEX[N, M];
_result = n ew COMPLEX[N, M];
_rescaledValues = new double[N, M];
_fftShifted = new COMPLEX[N, M];
FftShiftedAmplitude = new int[N, M];
FftLogAmplitude = new int[N, M];
FftThresholdedAmplitude = new int[N, M] ;
FftBitmap = new Bitmap(N, M);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
_data[i, j] = new COMPLEX(_image.GrayscaleMatrix[i, j]);
}
}
}
40
Pentru reprezentarea numerelor complexe, am implementat clasa COMPLEX , care conține 4
proprietăți ce reprezintă: partea reală, partea imaginară, amplitudinea și faza unui număr
complex. În această reprezentare a numerelor complexe , doar partea reală și partea imaginară
pot fi scrise direct, deoarece proprietatea Magnitude (amplitudinea) și Phase (faza), sunt
calculate pe baza părții reale și a părții imaginare după formulele prezentate în capitolul 2.6,
având doar metoda get.
public class COMPLEX
{
public double Real { get; set; }
public double Imaginary { get; set; }
public double Magnitude
{
get { return Math.Sqrt(Real * Real + Imaginary * Imaginary); }
}
public doub le Phase
{
get { return Real != 0 ? Math.Atan(Imaginary / Real) : 0; }
}
public COMPLEX() { }
public COMPLEX(double real, double imaginary)
{
Real = real;
Imaginary = imaginary;
}
public COMPLEX(double real)
{
Real = real;
Imaginary = 0;
}
}
În continuare, se poate aplica transformata Fourier Rapidă bidimensională, prin aplarea metodei
FFT2D . Metoda FFT2D lucrează asupra d atelor de intrare copiate în structura de numere
complexe _ data, astfel: se desparte tabloul bidimensional de intrare în linii și coloane și se
aplică transformata Fourier Rapidă unidimensională ( FFT1D ) separat asupra fiecărei linii și
apoi asupra fiecărei coloane din tablou. Rezultatul apelului este un tablou unidimensional de
aceeași dimensiune cu tabloul de intrare, care reprezintă transformata Fourier asupra tabelului
unidimensional de intrare , iar acesta este salvat pe pozițiile corespunzătoare din tab loul
bidimensional de tip complex _ result , care memorează rezultatul transformatei Fourier aplicată
asupra imaginii (informațiile spectrului de amplitudine și a spectrului de fază).
public void Fft2D(bool directFourierTransform)
{
int i, j;
_result = _data;
List<COMPLEX> rows = new List<COMPLEX>();
for (j = 0; j < M; j++)
41
{
rows.Clear();
for (i = 0; i < N; i++)
{
COMPLEX c = new COMPLEX(_result[i, j].Real, _result[i, j].Imaginary);
rows.Add(c);
}
Fft1D(directFourierTransform, ref rows);
for (i = 0; i < N; i++)
{
_result [i, j] = rows[i];
}
}
List<COMPLEX> columns = new List<COMPLEX>();
for (i = 0; i < N; i++)
{
columns.Clear();
for (j = 0; j < M; j++)
{
COMPLEX c = new COMPLEX(_result[i, j].Real, _result[i, j].Imaginary);
columns.Add(c);
}
Fft1D(directFourierTransform, ref columns);
for (j = 0; j < M; j++)
{
_result[i, j] = columns[j];
}
}
FillData();
}
Metoda Fft1D realizează transformata Fourier Rapidă unidimensională asupra liniilor și
coloanelor din imaginea de intrare, prin descompunerea s emnalului de intrare de lungime N,
în N semnale de lungime 1. Descompunerea semnalului se face prin reindexarea fie cărui
element, prin interschimbarea biților i, log 2𝑁-i, unde N reprezintă lungimea semnalului, iar
log 2𝑁 reprezintă numărul mi nim de biți pe care poate fi reprezentată dimensiunea
semnalului, iar i este poziția unui bit din șir. Metoda de interschimbare este prezentată în
figura 3.2.3.2.
42
Recompunerea se face în mai mulți pași , de număr egal cu numărul de biți al dimensiunii
semnalului după modelul butterfly diagram , prezent at în subcapitolul 2.6.3.
Recompunerea semnalului se face în log 2𝑁 etape, unde N este lungimea semnalului de
intrare. În primul pas se combină rezultatele celor N semnale de lungime 1 în rezultatul
transformatei Fourier a N/2 semnale de lungime 2, apoi se combină rezultatele celor N/2
semnale de lungime 2 în rezultatul transformatei Fourier a N/4 semnale de lungime 4, și așa
mai departe, până se combină rezultatul a 2 semnale de lungime N/2 în rezu ltatul
transformatei Fourier a unui semnal de lungime N, înmulțindu -se cu vectorul de fază al
fiecărei etape pentru fiecare jumătate impară a semnalului .
Rezultatul transformatei Fourier este shiftat astfel încât componenta continuă , de pe poziția
(0,0) s ă ajungă în centrul imaginii, pe poziția (N/2, M/2) , care este salvat în tabloul _ fftShifted .
Metoda de shift -are este prezentată grafic în figura 3.2.3. 3. Astfel, toate punctele ce au
coordonatele (x, y) mai mici decât N/2 și M/2, sunt mutate la coordona tele (x+N/2, y+N/2),
toate punctele ce au coordonatele (x, y) mai mari decât N/2 și M/2m sunt deplasate la
coordonatele (x -N/2, y -M/2), punctele care au coordonatele (x, y), x< N/2 și y> M/2 sunt
deplasate la coordonatele (x +N/2, y -M/2), iar punctele care au coordonatele (x, y), x> N/2 și
y< M/2 sunt deplasate la coordonatele (x -N/2, y+M/2) .
Figura 3.2.3.2 Metoda de reindexare a elementelor din semnal
43
Din rezultatul shiftat, este extras spectrul de amplitudine shiftat, prin parcurgerea tabloului
bidimensional și asignarea locațiilor corespunzătoare din tabloul bidimensional
_rescaledValues valoarea amplitudinii numărului complex. Pentru a respecta proprietățile unei
imagini, valorile spectrului de amplitudine sunt normaliza te și se face o conversie explicită de
tip la numere întregi, astfel încât toate valorile s ă se afle în intervalul [0, 255]. Rezultatul este
salvat în tabloul bidimensional FftShiftedAmplitude , ce reprezintă spectrul normalizat de
amplitudine al imaginii procesate. Pentru imaginile de tip textură, spectrul de amplitudine
prezintă un număr mic de componente în domeniul frecvență și este periodic pe anumite direcții
date de structura fizică a texturii, fiind ușor de analizat. În figura 3.2.3. 4 este prezentată textura
procesată (stânga) și spectrul de amplitudine rezultat (dreapta). Punctele de inte res din spectru
sunt cele ce au culoarea diferită de negru. Punctele reprezentate cu negru, semnifică faptul că
acele frecvențe de coordonate u și v, au valori nesemificative, poate 0, în imaginea procesată.
void FftShift()
{
int i, j;
for (i = 0; i <= N / 2 – 1; i++)
{
for (j = 0; j <= M / 2 – 1; j++)
{
_fftShifted[i + N / 2, j + M / 2] = _result[i, j];
_fftShifted[i, j] = _result[i + N / 2, j + M / 2];
_fftShifted[i + N / 2, j] = _result[i, j + M / 2];
_fftShifted[i, j + M / 2] = _result[i + N / 2, j];
}
}
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
_rescaledValues[i, j] = _fftShifted[i, j].Magnitude;
}
Figura 3.2.3.3 Reprezentarea grafică a metodei de shift -are a transformatei Fourier
44
}
FftShiftedAmplitude = RescaleAmplitude(_rescaledValues);
}
3.2.4 Binarizarea spectr ului de amplitudine
După cum se observă în figura 3.2.3.2, anumite compon ponente de interes din spectrul de
amplitudine al imaginii sunt reprezentate cu alb (valori maxime), iar altele au nuanțe de gri.
De aceea, asupra spectrului de amplitudine s -a aplic at o operație adaptivă de binarizare.
Alegerea unui prag fix nu este fezabilă datorită v arietății de imagini și a inten sităților acestora.
Astfel, valoarea de prag este calculată în funcție de imaginea asupra căreia se aplică, folosind
metoda de thresholdi ng Otsu. Această metodă este prezentată în sub capitolul 2.4.1 și este
implementată după formulele descrise, în vederea minimizării variației intra -clase, prin
minimizarea sumei varianțelor din fiecare dintre cele clase considerate: pixeli de fundal și pixe li
din plan principal .
Valoarea de prag este determinată prin apelarea metodei GetThresholdValue din clasa
OtsuThresholding . Diagrama clasei este prezentată în figura 3.2.4.1.
Figura 3 .2.3.4 Imagine în domeniul spațial și spectrul său de amplitudine în
domeniul frecvență
45
Constructorul clasei OtsuThresholding primește ca parametru imaginea în nu anțe de gri. În
constructor se apelează metoda BuildHistogram , care construiește histograma imaginii, salvată
în membrul _ histogram . Membrul _ histogram este un vector de dimensiune 256, în care se
păstrează valoarea frecvenței fiecărei dintre cele 256 de n uanțe de gri în imagine.
Metoda GetThresholdValue determină și returnează valoarea pragului pentru imagine. Se
consideră imaginea formată din 2 tipuri de pixel i: pixeli de fundal și pixeli din planul principal.
Pentru a determina valoarea de prag care să c lasifice cât mai bine aceste două grupe de pixeli,
se iterează toate valorile pe care le poate lua pragul (0, 255) și se consideră a fi valoarea de prag
corectă acea valoare care minimizează variața intra -clase.
Fiecare iterație calculează ponderea fiecăr ei clase, ca fiind suma valorilor din histogramă până
la valoarea de prag din iterația curentă pentru pixelii de fundal și suma valorilor din histogramă
de la poziția egală cu valoarea de prag până la valoarea de pe poziția 255 din histogramă, pentru
pixel ii din plan principal. Apoi, aceste ponderi sunt împărțite la suma tuturor el ementelor din
histogramă (frecvențele pentru toate nivelele de gri).
Apoi se calculează media fiecărei clase, ca fiind suma produsului dintre nivelul de gri i și
frecvența acelui n ivel de gri în imagine _ histogram[i] , unde i ϵ [0,t) pentru pixelii din fundal și
i ϵ [t, 255] pentru pixelii din planul principal.
În continuare, se calculează varianța fiecărei clase, ca fiind suma produsului dintre diferența
dintre nivelul de gri i și m edia clasei, calculată anterior, la pătrat și frecvența acelui nivel de gri
în imagine _ histogram[i] , unde i ϵ [0,t) pentru pixelii din fundal și i ϵ [t, 255] pentru pixelii din
planul principal.
Figura 3.2.4.1 Diagrama cl asei OtsuThresholding
46
Ultimul pas în reprezintă calculul varianței din clase, de m inimizat ca fiind egală cu suma
produsului dintre ponderea fiecărei clase și varianța sa.
Această valoare este salvată în tabloul _ threshold , pe poziția valorii de threshold din iterația
curentă.
La finalul iterațiilor, din tabloul _ threshold se extrage i ndicele pentru care valoarea de pe
poziție este minimă, iar acest indice reprezintă valoarea de prag.
Valoarea de prag este folosită mai departe pentru binarizarea spectrului de amplitudine astfel:
se parcurge spectrul de amplitudine rescalat la valorile î n nuanțe de gri suportate de o imagine
[0, 255], apoi se setează toți pixelii care au valoarea mai mare decât valoarea prag la valoarea
255, iar pixelii care au valoarea mai mică sau egală decât valoarea de prag, se setează la valoarea
0. În figura 3.2.4.2 este prezentată imaginea spectrului de amplitudine înainte și după
binarizarea și thinning -ul valorilor. Din imagine, se poate observa că transformarea
îmbunătățește procesul de detecție a liniilor din imagine cu transformata Hough ulterior ,
eliminând pun ctele ce nu prezintă interes .
Figura 3.2.4.2 . Spectrul de amplitudine înainte și
după procesul de binarizare și thinning
47
3.2.4 Thinning
Metoda de thinning operează tot pe spectrul de amplitudine. Aceasta elimină vecinătățile de
pixeli setați pe valoarea 255, la un singur pixel. Acest proces este esențial pentru pasul din
blocul următor , deoarece un număr mare de pixeli setați este dorit pentru efectul vizual, dar
aceștia îngreaunează procesul de detecție a liniilor . În figura 3.2.4.1 este prezentat spectrul de
amplitudine după procesul de thinning (stânga) și înainte de procesul de thi nning (dreapta). Din
spectru, se observă că punctele eliminate prin operația de thinning nu oferă informații
suplimentare legate de orientare.
3.2.5 Detecția liniilor
Detecția liniilor din spectrul de amplitudine oferă informații cu privire la orien tarea texturii.
Practic, se detectează toate linile care trec prin punctele din spectru, cu condiția ca ac estea să
treacă și prin punctul de origine shiftat la (N/2, M/2). Liniile care nu trec prin punctul de origine
nu oferă informații legate de orientare a texturii, astfel că ele nu sunt luate în considerare.
Transformata Hough detectează liniile care trec prin mai multe puncte din imagine , oferind
informații cu referire la lungimea și orientarea acestora. Astfel, liniile detectate sunt selectate
în funcți e de numărul de puncte din spectru care respectă ecuația dreptei, prezentată în capitolul
2.8.
Figura 3.2.4.2. Spectrul de amplitudine înainte și după procesul de thinnin g
48
În aplicația prezentată, sunt necesare doar informații legate de orientare, pentru a micșora
dimensiunea bancului de filtre Gabor din blocul următor, limitând parametrul de orientare al
filtre lor.
Implementarea utilizează o clasă numită Acumulator cu 3 proprietăți: Rho, ce păstrează distanța
liniilor detectate, Theta , ce păstrează valoarea unghiului făcut de dreapta perpendiculară pe linia
detectată cu axa Ox și Value , ce păstrează numărul de puncte care respectă ecuația dreptei în
coordonate polare.
internal class Acumulator
{
public int Value { get; set; }
public double Rho { get; set; }
public double Theta { get; set; }
public Acumulator() { }
public Acumulator(int rho, int theta)
{
Value = 0;
Rho = rho;
Theta = theta;
}
}
Metoda de detecție Hough este implementat în clasa Hough . În teorie, pentru detecția lini ilor,
se folosește un tablou bidimensional de tip Acumulator , de dimensiuni 2ThetaMax (cu valori
ale lui Theta între -ThetaMax …+ ThetaMax ) pentru linii și 2MaximumDistance (cu valori ale
lui Rho între -RhoMax…+ RhoMax) pentru coloane. Alegerea valorilo r pentru ThetaMax și
RhoMax sunt prezentate în capitolul 2.8.
Pentru implementare, Acumulatorul este un tablou bidimensional Acumulator[thetaMax,
RhoMax], unde thetaMax este 180 ș, iar RhoMax este √2𝑀𝑎𝑥𝑖𝑚𝑢𝑚𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 .
În tabloul Acumulator se păstrează toate configurațiile pentru distanță și unghi în proprietățile
Rho și Theta . Inițial, proprietatea Value este setată la 0. Diagrama clasei este prezentată în figura
3.2.5.1.
Algoritmul Hough este implementat prin metoda HoughTransform din clas a Hough , în care se
parcurg toate punctele din spectrul de am plitudine rezultat după operația de thinning. Pentru
toate punctele din spectru care au intensitatea egală cu 255 (este prezent un punct), se parcurge
tabloul bidimensional de tip Acumulator și s e incrementează proprietatea Value a tuturor
49
obiectelor pentru care valoarea se respetă ecuația dreptei în coordonate polare pentru dreptele
care trec prin originea spectrului.
În final, din tabloul de tip acumulator s e extrage un număr de obiecte, sortate descrescător în
funcție de proprietatea Value . Din aceste obiecte selectate, se extrage proprietatea Theta , care
reprezintă setul de unghiuri de input pentru banc -ul de filtre Gabor.
3.2.6 Banc -ul de filtre Gabor
Deoarece din spectrul de amplitudine nu putem extrage informații exacte despre frecvența
imaginii fără să avem informații apriori legate de frecvența de eșantionare a texturii din
imagine, această frecvență rămâne necunoscută. O modalitate de a estima valoar ea frecvenței
este folosirea unui banc de filtre Gabor impare bidimensionale, de frecvențe și orientări diferite.
Filtrele Gabor au fost prezentate în capitolul 2.7. În implementarea banc -ului, am păstrat
parametrul σ = 3.5 constan t, valoarea optimă fiind găsită prin testare. Dimensiunea filtrelor este
de 21×21 de pixeli. Parametrii care s -au variat au fost: frecvența u și orientarea Ө.
Figura 3.2.5.1 Diagrama clasei Hough
50
Pentru stabilirea plajei de valori ai frecvenței, am folosit metoda prezentată în [ 17] și anume u
ia valorile: 1√2, 2√2, 4√2, …, (N/4) √2, unde N este lățimea imaginii asupra căreia se aplică
filtrul. Deoarece frecvențele 1√2 și 2√2 sunt extrem de mici, acestea au fost eliminate.
Pentru stabilirea orientării Ө, se folosesc orientările obținute la pasul anter ior din spectrul de
amplitudine al imaginii, utilizând transformata Hough. Reprezentarea grafică a unui banc de
filtre cu orientările: 0ș, 30ș, 60ș, 90ș, 120ș, 150ș și cu frecvențe: 1√2, 2√2, 4√2, 8√2, 16√2,
32√2 este prezentată în figura 3.2.6 .1.
Banc -ul de filtre Gabor este generat în clasa ResponseGaborFilter . Clasa ResponseGaborFilter
inițializează banc -ul de filtre Gabor prin două metode: printr -un unghi de separare pentru
orientare sau printr -o listă de unghiuri, preluată de la detec ția liniilor cu metoda Hough și
selectează cel mai bun filtru din banc. Diagrama clasei este prezentată în figura (3.2.6.1).
Banc -ul de filtre este generat în metoda InitGaborBank și este memorat într -o listă de tipul
GaborFilter , numită BankOfGaborFilters . GaborFilter conține două proprietăți: un obiect de
tip Gabor , în care se păstrează datele necesare generării fiecărui și utilizării fiecărui filtru și o
proprietate de tip întreg care păstrează numărul filtrului din banc.
Figura 3.2.6.1 Reprezentarea grafică a unui banc de filtre Gabor cu unghi de
separare de 30ș
51
Clasa Gabor păstrează propr ietățile filtrelor Gabor: frecvența, varianța, unghiul de orientare,
poziția lui x, poziția lui y, dimensiunea filtrului, rezultatul convoluției dintr filtru și imagine și
matricea filtrului Gabor.
Banc -ul de filtre este creat prin crearea de filtre de ori entări și frecvențe diferite. Numărul de
filtre este dat de dimensiunea imaginii și de numărul de orientări diferite rezultate în urma
transformatei Hough. Metoda BuildGaborMatrix este o metodă statică din clasa
GaborMethods , care construiește matricea de convoluție a filtrului Gabor primit ca parametru,
ce este stocată în obiectul de tip Gabor .
Matricea de convoluție este creată prin shiftarea pozițiilor tabloului bidimensional determinat
de dimensiunea filtrului _ filterLength , astfel încât punctul (_ filterLength /2,_ filterLength /2) să
Figura 3.2.6.1 Diagrama clasei ResponseGaborFilter
52
devină puncte de origine, iar apoi se calculează, pentru fiecare poziție din matricea de
convoluție a filtrului, rezultatul filtrului Gabor după formula (2.7.4).
private void InitGaborBank(List<int> orientationAngleL ist)
{
double rad2 = Math.Sqrt(2);
int number = 0;
for (double i = rad2*4; i < _image.Width / 4 * rad2; i = i * 2)
{
double frequency = i;
foreach (var angle in orienta tionAngleList)
{
Gabor g = new Gabor(_filterLength);
GaborFilter gabor = new GaborFilter();
g.Sigma = 3.5;
g.Angle = angle;
g.Frequency = fr equency;
GaborMethods.BuildGaborMatrix(g);
gabor.Gabor = g;
number++;
gabor.Number = number;
BankOfGaborFilters.Add(gabor);
}
}
}
public static void BuildGaborMatrix(Gabor gabor)
{
gabor.Angle = DegreesToRadians(gabor.Angle);
for (int i = 0; i < gabor.Size; i++)
{
for (int j = 0; j < gabor.Size; j++)
{
gabor.X = i – gabor.Size / 2;
gabor.Y = j – gabor.Size / 2;
gabor.Result[i, gabor.Size – 1 – j] = GaborOddValue(gabor);
}
}
}
3.2.7 Eșantionarea imaginii de intrare
Din imaginea de intrare transformată în imagine în nuanțe de gri se extrag un număr N de
eșantioane de dimensiunea filtrelor Gabor pentru determinarea filtrului optim. Acest fapt se
face prin însumarea produselor de convoluție în valoare absol ută pentru fiecare filtru cu fiecare
53
dintre cele N eșantioane din imagine. În final, va ieși învingător filtrul ce are cea mai mică
valoare ca suma produselor de convoluție pentru toate cele N imagini.
Am decis folosirea unui număr N de eșantioane, și nu a unui singur eșantion, deoarece texturile
nu sunt perfect periodice și filtrul nu se mapează întotdeauna pe o porțiune periodică din
imagine, putând prinde și zone de în care este reprezentată doar o parte din structura periodică
din care este formată im aginea sau zone de margine .
Astfel, având un număr mai mare de eșantioane, filtrul corect are mai multe șanse să aibe suma
produsul ui de convoluție cea mai mică și în cazurile defavorabile, iar probabilitatea de defect
scade.
Eșantioanele din imagine sunt alese în mod aleator . Se generează pentru fiecare coordonatele
pixelilor din colțul stânga sus, apoi, din acel punct, se selectează o porțiune din imagine egală
cu dimensiunea filtrului.
Banc -ul de filtre se sortează crescător după suma produselor de convoluție în valoare ab solută
pentru cele N eșantioane, apoi se selectează primul filtru din banc ca fiind cel corect și el este
folosit mai departe în procesare.
În aplicație, N ia valori între 4 și 6, deoarece procesul de convoluție al filtrelor cu eșantioanele
din imagine est e destul de costisitor și un număr N mai mare nu îmbunătățește semnificativ
rezultatele.
Filtrul selectat este salvat în membrul FinalGaborFilter . Acesta se aplică asupra întregii
imagini, rezultatul procesului de convoloție al imaginii cu filtrul fiind sa lvată în
ResponseBitmap , care reprezintă imaginea nouă filtrată, normalizată la cele 256 nivele de gri
posibile.
3.2.8 Procesarea rezultatelor
Răspunsul imaginii filtrate cu filtrul Gabor optim, salvat în ResponseBitmap este supus unei
operații de netez ire puternică, rezultând o imagine uniformă, de nuanțe diferite de gri în funcție
de textura din imagine sau de zonele fără defect și cele cu defect. Pentru netezire, s -a folosit un
filtru de dimensiunea 25×25, ce înlocuiește valoarea fiecărui pixel din im agine cu media
vecinilor săi.
54
În figura 3.2.8.1 este prezentată schema de procesare.
Algoritmul K -Means prezentat în sub -capitolul 2.5.1 a fost adaptat astfel încât să clasifice cât
mai corect imaginea primită ca input.
Algoritmul K -Means e ste imple mentat în clasa KMeans. Diagrama de clase este prezentată în
figura 3.2.8.2. Centrele de clasă sunt păstrate în lista de tip Centroid , _centroidList , iar pixelii
extrași din imagine sunt păstrați în lista de tip Pixel , _pixelsList . Atât clasa Centroid , cât și clasa
Pixel , păstrează informații legate de poziția spațială X și Y, și nivelul de gri ( Intensitate ) al
pixelului de pe poziția X și Y. Fiecare pixel din imagine are un obiect încuibărit de tip Centroid ,
ce reprezintă centrul de clasă la care este asoc iat.
Algoritmul este apelat în constructorul clasei, care primește ca intrare imaginea asupra căreia
se aplică algoritmul sub formă unui obiect de tipul PreprocessingBitmap sau sub forma unei
matrici a intensităților imaginii.
public KMeans(Preprocessing Bitmap image)
{
_grayscaleImage = image.GrayscaleMatrix;
_width = image.Width;
_height = image.Height;
ResultBitmap = new Bitmap(_width, _height);
InitKMeans();
KMeansAlgorithm ();
Figura 3.2.8.1 Schema bloc de procesare a imaginii filtrate rezultate
55
DisplayClusters();
}
Metoda InitKMeans inițializează toate centrele claselor, dându -le valori aleatoare în spațiul de
reprezentare a datelor. Valorile centroizilor reprezintă valorile pozițiilor posibile ale pixelilor,
X și Y, care sunt cuprinse între [0, image.Width], respectiv [0, image.Height]. P roprietatea
Intensitate reprezintă nivelul de gri al centroidului, care este cuprins în intervalul [0, 255].
Metoda KMeansAlgorithm parcurge toți pixelii din im agine și îi atribuie unui centru de clasă
pe baza similarității, apoi verifică dacă s-a încheiat algoritmul (_ isReady este true), verificând
dacă distanțele dintre pixeli și centrele claselor rămân constante pentru două iterații
consecutive. Apoi, centrele claselor sunt mutate în mijlocul pixelilor de care aparțin.
Figura 3.2.8.2 Diagrama clasei KMeans
56
public void KMeansAlgorithm()
{
while (!_isReady)
{
medieEroriPrecedent = medieErori;
medieErori = 0;
foreach (Pixe l pixel in _pixelsList)
{
pixel.Distance = 10000;
foreach (Centroid centroid in _centroidsList)
{
double d = GetSimilarity(pixel, centroid);
if (d < pixel.Distance)
{
pixel.Distance = d;
pixel.CentroidPixel = centroid;
}
}
}
foreach (Pixel p in _pixelsList)
{
medieErori += p.Distance;
}
if (medieErori == medieEroriPrecedent)
{
_isReady = true;
}
foreach (Centroid centroid in _centroidsList)
{
double x = 0;
double y = 0;
int intensitate = 0;
int ct = 0;
foreach (Pixel point in _pixelsLis t)
{
if (point.CentroidPixel == centroid)
{
x += point.X;
y += point.Y;
intensitate += point.Intensitate ;
ct++;
}
}
if (ct != 0)
{
centroid.X = (int)x / ct;
centroid.Y = (int)y / ct;
centroid.Intensitate = intensitate / ct;
}
else
{
centroid.Intensitate = _rand.Next(0, 255);
}
}
}
}
57
int GetSimilarit y(Pixel p1, Centroid p2)
{
return Math.Abs(p1.Intensitate – p2.Intensitate);
}
Pentru calculul similarității, majoritatea articolelor din domeniu au sugerat folosirea distanței
Euclidiene. Totuși rezultatul nu a fost unul satisf ăcător, deoarece problema de clustering nu este
centrată asupra poziției pixelilor, ci asupra diferențelor de intensitate . Astfel, metoda de calcul
a similarității calculează diferența în modul dintre intensitatea pixelului curent și intensitățile
tuturor cent relor claselor, pixelul fiind atribuit centrului de clasă pentru care diferența de
intensitate în modul este cea mai mică.
În figurile 3.2.8.3 și 3.2.8.4 sunt prezentate diferențele rezultatelor algoritmului KMeans în
funcție de metoda de calcul a similari tății: folosind distanțe Euclidiană (figura 3.2.8.3) și
diferența intensității (figura 3.2.8.4).
În figura 3.2.8.4, zona centrală nu este detectată ca aparținând unui cluster diferit față de zona
de sus, datorită faptului că, după aplicarea operației de n etezire, diferența de intensitate dintre
cele două zone este foarte mică.
Figura 3.2.8.3 Rezultatul algoritmului KMeans folosind distanța Euclidiană
58
Rezultatul este salvat în bitmap -ul ResponseBitmap , unde se colorează cu culori dife rite
punctele fiecărui centroid, în scopul reprezentării cât mai exacte.
3.3 Interfa ța cu utilizatorul
Mediul de dezvoltare folosit este Microsoft Visual Studio, versiunea 2013. Microsoft Visual
Studio este un mediu de dezvoltare integrat produs de Microsoft, utilizat pentru dezvoltarea de
aplicații Microsoft Windows .
Microsoft pune la d ispoziție o versiune gratuită de Visual Studio numită Community și două
versiuni plătite: Professional și Enterprise. Pentru dezvoltarea acestei aplicații am folosit Visual
Studio 2013 Community .
Limbaju l de programare folosit este C#, fiind un limbaj deriv at limbajului de programare C++.
Aplicația dispune de o interfață grafică formată din ferestre.
Fereastra principală din interfața cu utilizatorul este prezentată în figura 3.3.1. Aceasta prezintă
un meniu din care se încarcă imaginea (opțiunea Load ->Load Image ) și opțiunea de a vizualiza
imaginea încărcată în nuanțe de gri ( Preprocessing -> Grayscale Image ). Imaginea încărcată
originală este afiș ată, imediat după ce a fost înc ărcată, în picture box -ul Original Image. În cazul
în care se dorește afișarea i maginii în nuanțe de gri, se selectează din meniu Preprocessing ->
Figura 3.2.8.4 Rezultatul algoritmului KMeans folosind diferența de intensitate
59
Grayscale Image , iar imaginea în nuanțe de gri va fi încărcată într-o nouă formă,
TransformFormResult . În această formă sunt afișate toate rezultatele lanțului de procesare.
Aplicația permite și selectarea altor opțiuni, sub formă de butoane , grupate în group box -uri, în
funcție de transformata aplicată .
Group box -ul Fast Fourier Magnitude Spectrum conține butoane ce permit reprezentarea
spectrului de amplitudine al transformatei Fouri er asupra imaginii în diverse forme.
Transformata Fourier este aplicată la momentul încărcării imaginii, deoarece spectrul de
amplitudine rezultat este necesar în crearea banc -ului de filtre Gabor. Astfel, spectrul de
amplitudine în toate formele de reprez entare este disponibil după încărcarea imaginii .
Spectrul de amplitudine rezultat poate fi reprezentat ca fiind spectrul de amplitudine shiftat (
butonul Direct Output ), sub forma unei reprezentări la o scală logaritmică ( butonul
Logarithmical Scale Output ) sau sub forma utilizată în continuare în procesare, reprezentând
spectrul original shiftat după aplicarea unei operații de thresholding și a operației de thinning (
butonul Thresholded Output ).
Reprezentarea spectrului de amplitudine la o scală logaritmică nu poate fi utilizat în procesare,
fiind o reprezentare mai apropiată de percepția subiectului uman. Fiecare pixel din imagine este
Figura 3.3.1. Fereastra principală a aplicației
60
logaritmat în baza e, pentru a face trecere a de la zone întunecate la zone luminate mai lentă, în
scopul vizualizării mai bune a spectrului.
Cele trei metode de reprezentare și diferențele dintre ele sun t prezentate în figurile: 3.3.2, 3.3.3
și 3.3.4. Figura 3.3.2 prezintă spectrul de amplitudine direct, figura 3.3.3 prezintă spectrul de
amplitudine la o scală logaritmică și figura 3.3.4 prezintă spectrul de amplitudine după operația
de thresholding și thinning.
În funcție de valoarea de prag aleasă, operația de thresholding păstrează un număr diferit de
valori de vârf din spectru. Deoarece imaginile sunt diferite, a cestea nu au aceeași valoare de
prag. De aceea, este necesară utilizarea unei valori de prag adaptivă, calculată în aplicație prin
metoda lui Otsu de thresholding. În procesare, se folosește spectrul de amplitudine prezentat în
figura 3.3.4, deoarece repre zintă cea mai bună reprezentare pentru extragerea orientărilor din
spectru.
Figura 3. 3.2 Spectrul de amplitudine direct
61
Pentru generarea banc -ului de filtre Gabor, se selectează una din opțiunile: 30 degree , 45
degree , Detected Angle , prezentate în figura 3.3.5 și apoi se apasă buton ul Create Filter Bank .
Figura 3.3.3 Spectrul de amplitudine la o scală logaritmică
Figura 3.3.4 Spectrul de amplitudine după operațiile de thresholding și thinning
62
În funcție de opțiunea selectată, se va genera un banc de filtre Gabor. Opțiunile 30 degree și 45
degree generează un banc de filtre Gabor cu unghi de separare de 30, respectiv 45 de grade.
Opțiunea Detected Angle , folosește ung hiurile detectate cu transformata Hough din spectrul de
amplitudine.
Prin apăsarea butonului Show Filter Bank , se deschide o nouă formă în care sunt reprezentate
formele fizice ale filtrelor din banc, în funcție de metoda aleasă de generare, precum în fig ura
3.3.6.
Figura 3.3.5 Opțiunile de procesare a imaginii folosind filtre Gabor
63
Butonul Show Image Samples , deschide o nouă formă în care sunt reprezentate eșantioanele din
imagine folosite pentru găsirea celui mai bun filtru din banc, precum în figura 3.3.7.
Butonul Selected Filters Details deschide o formă nouă care permite vizualizarea filtrului Gabor
selectat și a detaliilor sale, precum frecvență, orientare și matricea de convoluție.
Butonul Show Selected Filter Response deschide o nouă formă TransformResultForm , în care
este afișat rezultatul convoluției filtrulu i Gabor selectat asupra imaginii de procesat, normalizat
la cele 256 nivel e de gri, precum în figura 3.3.8 .
Figura 3.3.6. Reprezentarea filtrelor din banc cu unghi de separare de 30 ș
Figura 3.3.7 Eșantioanele din imagine folosite pentru
găsirea celui mai bun filtru din banc
64
Butonul Show Bank Response deschide o nouă formă în care sunt afișate rezultatele convoluției
tuturor filtrelor Gabor din banc asupra im aginii de procesat, normalizate la cele 256 nivele de
gri, precum în figura 3.3.9. Pentru afișarea rezultatelor filtrelor, se selectează filtru l dorit din
combo box. Fiecare filtru este descris în combo box prin valoarea frecvenței și a orientării, fiind
caracteristicile cele mai importante ale filtrelor. Rezultatele filtrelor se afișează prin selectarea
combo box -ului și apăsarea tastei down , prezentându -se imaginea filtrată cu filtrul Gabor
selectat.
Această funcționalitate este adăugată pentru ca utiliza torul să poată percepe vizual răspunsurile
filtrelor din banc asupra texturilor.
Figura 3.3.8 Răspunsul filtrului Gabor selectat asupra imaginii
65
Butonul Apply Smoothing On Image netezește imaginea filtrată cu filtrul selectat și afișează
rezultatul într -o formă nouă, TransformResultForm . Netezirea se face prin a tribuirea fiecărui
pixel valoarea de intensitate rezultată ca fiind media pixelilor dintr -o vecinătate prestabilită. Un
exemplu al funcționalității este prezentat în figura 3.3.10.
Figura 3.3.9 Selectarea filtr ului din banc și afișarea răspunsului
filtrului Gabor selectat asupra imaginii
Figura 3.3.10 Răspunsul filtrului Gabor selectat asupra imaginii și netezirea acestia
66
Butonul K-Means aplică algoritmul K -Means asupra imaginii netezite, car e grupează pixelii
din imagine pe baz a similarităților dintre ei . Într -o textură ce prezintă defect, răspunsul filtrului
este diferit pe zone cu defect față de zonele fără defect, clasificând imaginea în mai multe
clustere. Pixelii grupați în clustere sunt afișaț i într -o formă nouă, TransformResultForm .
Prin apăsarea butonului Process All , se execută întregul lanț de procesare. Imaginea încărcată
este transformată în nuanțe de gri. Asupra imaginii în nuanțe de gri obțiunute, se aplică
transformata Fourier Rapidă.
Din rezultatul transformatei Fourier Rapidă, se extrage spectrul de amplitudine shiftat, asupra
căruia se aplică o operație de binarizare folosind o valoare prag rezultată prin aplicarea metodei
Otsu asupra imaginii spectrului. În continuare, se aplică o operație de thinnig pentru a reduce
zonele cu mai mulți pixeli albi vecini , la un singur pixel.
Asupra spectrului de amplitudine rezultat, se aplică transformata Hough de detecție a liniilor,
în scopul extragerii unui set de unghiuri de orientare ale imaginii.
Aceste unghiuri sunt folosite pentru generarea bancului de filtre Gabor de orientări și frecvențe
diferite. Din acest banc se selectează filtrul care se acordă cel mai bine cu imaginea de intrare
și acesta se aplică asupra imaginii. În acest pas, doar filtr ul selectat este aplicat asupra imaginii,
deoarece aplicarea tuturor filtrelor din banc este extrem costisitoare.
Asupra rezultatului obținut se aplică o operație de netezire. Imaginea netezită este input pentru
algoritmul K -Means, care clasifică pixelii d in imagine pe baza similarității lor. Într -o textură ce
prezintă defect, răspunsul filtrului este diferit pe zone cu defect față de zonele fără defect,
clasificând imaginea în mai multe clustere, în funcție de numărul și tipul de defecte. Pixelii
grupați î n clustere sunt afișați într -o formă nouă, TransformResultForm .
67
4. Concluzii
În urma rezultatelor experimentale, s -a constatat că timpul de răspuns este direct proporțional
cu dimensiunea imaginii de intrare. Se preferă imagini de dimensiuni mici, sub 512×512 de
pixeli. Calitatea răspunsului depinde de structura fizică a imaginii și de periodicitatea texelilor,
dar și de dimensiunea și tipul defectului din imagine.
Imaginile cu structuri puternic periodice și omogene, care prezintă defecte accentuate, sunt
clasificate cu o precizie mult mai bună față de imaginile în care texturile nu respectă un model
perfect de îmbinare a firelor. De aceea, s unt preferate texturile cu modele de cusătură fine.
Rezultatul aplicației depinde și de numărul de centre de clasă al algo rimului K -Means. În
cazul în care numărul de clase este mai mic decât numărul de texturi și non -texturi din
imaginea de intrare, zonele similare ca intesitate din imagine vor fi grupate în acelși cluster.
De aceea, se preferă ca numărul de clustere să fie mai mare sau egal cu numărul de texturi și
non-texturi din imagine. Pe baza experminetelor, s -a determinat că un număr de clase k ce ia o
valoare între 2 și 6 este suficient de mare pentru majoritatea imaginilor de intrare.
Rezultate expe rimentale sunt afi șate în figurile 4.1, 4.2 și 4.3 , unde s -au analizat texturi cu
diverse defecte.
Se observă că lanțul de procesare separă destul de bine zonele de defect de zonele fără defect.
Anumite zone din imagine care nu fac parte din zona de defect sunt clasificate ca fiind
defecte, deoarece anumite porțiuni se abat de la structura generală a texturii.
Dezvoltările ulterioare presupun implementarea unui algoritm de extragere a unui set de
descriptori din imagini și învățare a acestora, ca și date de antrenament. La execuția
algoritmului pe imagini ce nu fac parte din setul de antrenament, prin extragerea setului de
descriptori din imagine, algoritmul să poată detecta care dintre imaginile din setul de
antrenament este cea mai similară cu imaginea de intrare.
68
Figura 4.1 Secvențe de procesare a) imaginea originală, b) răspunsul filtrului
Gabor asupra imaginii, c) răspunsul filtrului Gabor asupra imaginii netezit, d)
zonele de textură și non -textură din imagine
69
Figura 4.2 Secvențe de proce sare a) imaginea originală, b) răspunsul filtrului
Gabor asupra imaginii, c) răspunsul filtrului Gabor asupra imaginii netezit, d)
zonele de textură și non -textură din imagine
70
Figura 4.3 Secvențe de procesare a) imaginea originală, b) răspunsul filtrului
Gabor asupra imaginii, c) răspunsul filtrului Gabor asupra imaginii netezit, d)
zonele de textură și non -textură din imagine
71
5. Referițe Bibliografice
[1] R. M. Pickett, "Visual Analysis of Texture in the Detection and Recognition of Objects",
in Picture Processing and Psychopictorics, B. C. Lipkin and A. Rosenfeld, Eds., Academic
Press, New York, 1970, 289 –308.
[2] J. K. Hawkin s, "Textural Properties for Pattern Recognition", in Picture Processing and
Psychopictorics, B. C. Lipkin and A. Rosenfeld, Eds., Academic Press, New York, 1970,
347–370
[3] R. M. Haralick, "Statistical and structural approaches to texture" in Proc. IEEE, volume
67(5), pages 786 -804, 1979.
[4] G. R. Cross and A. K. Jain., "Markov Random Field Texture Models" in TransPAMI, 5:25 –
39, 1983.
[5] Awcock, G. J. and Thomas, R., "Applied Image Processing",Macmillan, Basingstoke, U.K.,
1995.
[6] Jie Zhang1, Binjie Xi n2, Xiangji Wu3, "A Review of Fabric Identification Based on Image
Analysis Technology"
[7] Imaoka, H. 1988, "Trial on Automatic Measurement of Fabric Density", Journal of the
Society of Fiber Science & Technology, Vol. 44, p. 32.
[8] Wood, E.J. 1990, "App lying Fourier and Associated Transforms to Pattern Characterization
in Textiles", Textile Research Journal, Vol. 60, p. 212 -220.
[9] Xu, B.G. 1996, "Identifying Fabric Structures with Fast Fourier Transform Techniques",
Textile Research Journal,Vol. 66, p. 496-506.
[10] H. Sari -Saraf and J. S. Goddard, "On -line optical measurement and monitoring of yarn
density in woven fabrics", in Automat. Opt. Inspect. Ind. SPIE, vol. 2899, pp. 444 –452, 1996.
72
[11] Chi-ho Chan, Student Member, IEEE, and Grantham K. H. Pan g, Member, IEEE, "Fabric
Defect Detection by Fourier Analysis"
[12] Feng, Y.L. & Li, R.Q. 2001, "Automatic Measurement of Weave Count with Wavelet
Transfer", Journal of Textile Research, Vol. 22, p. 30 -31.
[13] Li, L.Q., Chen, X. & Huang, X.B. 2005, "Autom atic Inspection of Weaving Density for
Woven Fabrics Using Adaptive Wavelets", Journal of Donghua University, Vol. 31, p. 63 -65.
[14] Padmavathi S, Prem P, Praveenn D, "Locating Fabric Defects Using Gabor Filters",
Department of Information Technology, Amr ita School of Engineering, Tamil Nadu, India
[15] Ani1 K. Jain, Farshid Farrokhnia, "Unsupervised Texture Segmentation Using Gabor
Filters1", Michigan State University
[16] Khaled Hammouda, Prof. Ed Jernigan, "Texture Segmentation Using Gabor Filters",
University of Waterloo, Ontario, Canada
[17] D. Clausi, M. Ed Jernigan, "Designing Gabor filters for optimal texture separability,"
Pattern Recognition, vol. 33, pp. 1835 -1849, 2000
[18] A. K. Jain, F. Farrokhnia, "Unsupervised texture segmentation using Gabo r filters", Pattern
Recognition, vol. 24, no. 12, pp. 1167 -1186, 1991.
[19] D. A. Clausi, "Texture Segmentation of SAR Sea Ice Imagery," PhD Thesis, University of
Waterloo, Waterloo, Ontario, Canada, 1996.
[20] Gao, W.D., Liu, J.H., Xu, B.J., Di, W. & Xue, W. 2002, "Automatic Identification of
Fabric Texture", Cotton Textile Technology, Vol. 30, p. 26 -28.
[21] Kuo, C.F.J., Shih, C.Y., Ho, C.E. & Peng, K.C. 2010, "Application of Computer Vision in
the Automatic Identification and Classification of Woven Fabr ic Weave Patterns", Textile
Research Journal, Vol. 80, p. 2144 -2157.
[22] Pan, R.R., Gao, W.D., Liu, J.H. & Wang, H.B. 2011, "Genetic Algorithm -Based Detection
of the Layout of Color Yarns", Journal of the Textile Institute, Vol. 102, p. 172 -179.
[23] "Con version of a Color Image to a Binary Image". CoderSource.net. 2005 -04-18. Archived
from the original on 2008 -06-10. Retrieved 2008 -06-11.
73
[24] Nobuyuki Otsu, "A threshold selection method from gray -level histograms", IEEE Trans.
Sys., Man., Cyber. 9 (1): 6 2–66. doi:10.1109/TSMC.1979.4310076
[25] Heideman, Michael T.; Johnson, Don H.; Burrus, C. Sidney , "Gauss and the history of the
fast Fourier transform", Archive for History of Exact Sciences. 34 (3): 265 –277. ISSN 0003 –
9519. doi:10.1007/BF00348431, 1985
[26] Gauss, Carl Friedrich, "Theoria interpolationis methodo nova tractata", Werke, Band 3,
265–327 (Königliche Gesellschaft der Wissenschaften, Göttingen, 1866)
[27] Cooley, J. W. and Tukey, O. W., "An Algorithm for the Machine Calculation of Complex
Four ier Series", Math. Comput. 19, 297 -301, 1965.
[28] Gabor, D., "Theory of communication. Journal of the Institute of Electrical Engineers",
93, 429 –457, 1946
[29. P.V.C. Hough., "Method and means for recognizing complex patterns", u.s. patent
3069654.
[30] D. H. Ballard., "Generalizing the hough transform to detect arbitrary shapes", pages 714 –
725, 1987.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Tehnici și metode de detecție a texturilor Îndrumător științific: Prof. Doctor inginer Remu s Brad Absolvent: Modrângă Cristina Maria Specializarea… [609323] (ID: 609323)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
