Professional Documents
Culture Documents
LVCH
LVCH
GIÔÙI THIEÄU
1. Giôùi thieäu
2. Toång quan tình hình nghieân cöùu
3. YÙ nghóa ñeà taøi
CHÖÔNG 1:
GIÔÙI THIEÄU
1.1 GIÔÙI THIEÄU
Ngaøy nay, caùc kyõ thuaät sinh traéc hoïc ngaøy caøng ñöôïc öùng duïng roäng raõi. Trong
ñoù, nhaän daïng vaân tay ñöôïc xem laø moät trong nhöõng kyõ thuaät hoaøn thieän vaø ñaùng
tin caäy nhaát ñeå xaùc nhaän moät ngöôøi. Gaàn ñaây, kyõ thuaät naøy ñöôïc chuù yù nhieàu vaø
ngöôøi ta thaáy raèng noù thích hôïp vôùi nhöõng öùng duïng coù cô sôû döõ lieäu nhoû, nhöng
khoâng thuaän tieän cho nhöõng öùng duïng coù phaïm vi lôùn.
Ña soá caùc heä thoáng baûo maät hieän nay ñöôïc baûo veä baèng password vaø PIN
(Personal Identification Number), nhöng caùc phöông phaùp naøy ñaõ ñöôïc chöùng
minh laø khoâng hieäu quaû. Bôûi vì, password laø nhöõng con soá khoù nhôù, deã queân vaø
deã bò ñaùnh caép. Baèng caùch söû duïng vaân tay vaø maät maõ, vieäc xaùc nhaän moät ngöôøi
coù theå ñöôïc thöïc hieän baèng moät heä thoáng nhaän daïng vaân tay an toaøn vaø thuaän
tieân.
Hình 1.1 laø caáu truùc cô baûn cuûa heä thoáng nhaän daïng daáu vaân tay. Ñaàu tieân, daáu
vaân tay cuûa moät ngöôøi caàn ñöôïc laáy maãu (baèng moät thieát bò coù theå chuïp ñöôïc
vaân tay – Biometric sensor) vaø löu vaøo cô sôû döõ lieäu (Registration module). Sau
ñoù, khi caàn xaùc nhaän ngöôøi ñoù cung caáp laïi moät daáu vaân tay khaùc, daáu vaân tay
naøy seõ ñöôïc so saùnh vôùi daáu vaân tay trong cô sôû döõ lieäu ñeå quyeát ñònh chaáp nhaän
hay töø choái döïa treân moät giaù trò ngöôõng ñoái saùnh.
Hình 1.1: Caáu truùc cô baûn cuûa heä thoáng nhaän daïng daáu vaân tay
Hieän nay, treân thò tröôøng theá giôùi ñaõ coù baùn nhieàu loaïi thieát bò chuïp vaân tay
(fingerprint reader, fingerprint scanner) vôùi caùc chaát löôïng khaùc nhau. Baûng 1.1
giôùi thieäu moät soá loaïi thieát bò chuïp vaân tay vaø caùc thoâng soá kyõ thuaät cuûa chuùng.
Hình 1.2 laø aûnh vaân tay ñöôïc chuïp töø caùc thieát bò naøy. Chi tieát hôn coù theå tham
khaûo ôû [15], [16].
Baûng 1.1: Moät soá loaïi thieát bò chuïp vaân tay vaø caùc thoâng soá kyõ thuaät cuûa chuùng
Hình 1.2: AÛnh vaân tay ñöôïc chuïp töø caùc thieát bò treân: a) Biometrika FX2000,
b) Digital Persona UareU2000, c) Identix DFR200,
d) Ethentica TactilSense T-FPM,
e) STMicroelectronics TouchChip TCS1AD, f) Veridicom FPS110,
g) Atmel FingerChip AT77C101B, h) Authentec AES4000.
Ñeå ñaùnh giaù moät heä thoáng nhaän daïng vaân tay ta caàn phaân tích hai loaïi loãi ñoù laø:
loãi töø choái nhaàm (False Reject Rate: FRR) vaø loãi chaáp nhaän nhaàm (False Accept
Rate: FAR)
Soá loãi chaáp nhaän nhaàm cuûa caùc vaân tay khaùc nhau
FAR =
Toång soá laàn ñoái saùnh cuûa caùc vaân tay khaùc nhau
Soá loãi töø choái nhaàm cuûa caùc vaân tay khaùc nhau
FRR =
Toång soá laàn ñoái saùnh cuûa caùc vaân tay khaùc nhau
Giaù trò cuûa hai loaïi loãi naøy coù moái quan heä vôùi nhau thoâng qua giaù trò ngöôõng ñoái
saùnh T (threshold) laø sai leäch cho pheùp giöõa maãu caàn ñoái saùnh vôùi maãu ñöôïc löu
trong cô sôû döõ lieäu. Khi choïn giaù trò ngöôõng thaáp thì loãi töø choái nhaàm seõ taêng, loãi
chaáp nhaän nhaàm seõ giaûm vaø ngöôïc laïi.
Heä thoáng thöôøng ñöôïc ñaùnh giaù theo hai caùch:
1. Tyû leä loãi cöïc tieåu SUMmin = (FAR + FRR)min : theo quan ñieåm duø laø loaïi loãi
gì thì cuõng laø loãi, do ñoù tyû leä loãi cöïc tieåu SUMmin laø heä soá loãi nhoû nhaát maø
heä thoáng coù theå ñaït ñöôïc.
2. Möùc ñoä loãi caân baèng (Equal Error Rate: EER): ñoù laø ñieåm maø FAR vaø FRR
baèng nhau.
Hình 1.3 bieåu dieãn moái quan heä giöõa FAR, FRR, SUM vaø EER theo ngöôõng T
FRR FAR
EER
0
T
Hình 1.3: Moái quan heä giöõa FAR, FRR, SUM vaø EER theo ngöôõng T
PHÖÔNG PHAÙP
NHAÄN DAÏNG VAÂN TAY
CHÖÔNG 2:
¾ Singularity: Treân vaân tay coù nhöõng vuøng coù caáu truùc khaùc thöôøng so vôùi
nhöõng vuøng bình thöôøng khaùc (thöôøng coù caáu truùc song song), nhöõng vuøng
nhö vaäy goi laø singularity. Coù hai loaïi singularity laø core vaø delta.
core
delta
¾ Minutiae: Khi doø theo töøng ñöôøng vaân ta seõ thaáy coù nhöõng ñieåm ñöôøng
vaân keát thuùc (Ridge Ending) hoaëc reõ nhaùnh (Bifurcation), nhöõng ñieåm naøy
ñöôïc goïi chung laø minutiaae.
Hình 2.3: Caùc ñieåm minutiae Ridge Ending (ñieåm keát thuùc) vaø
Bifurcation (ñieåm reõ nhaùnh)
Hình 2.4: aûnh vaân tay (a) vaø tröôøng ñònh höôùng cuûa noù (b)
Phöông phaùp xaùc ñònh tröôøng ñònh höôùng nhö sau [5], [14]:
− Chia aûnh vaân tay thaønh caùc khoái nhoû hôn kích thöôùc WxW
− Tính gradient theo hai höôùng x, y laø Gx, Gy taïi moãi ñieåm (pixel) trong khoái
− Khi ñoù höôùng cuûa ñieåm chính giöõa cuûa khoái ñöôïc xaùc ñònh theo coâng thöùc:
−1 ⎜ ∑i =1 ∑ j =1
⎛ W W
2G x (i, j )G y (i, j ) ⎞
1 ⎟
ϕ = tan ⎜ W W
2 (
⎜ ∑ ∑ G x2 (i, j ) − G y2 (i, j )
⎝ i =1 j =1
) ⎟⎟
⎠
Haøm orientation.m thöïc hieän tính tröôøng ñònh höôùng ñöôïc giôùi thieäu trong
phaàn phuï luïc.
b. Xaùc ñònh caùc ñieåm singularity baèng chæ soá Poincare (Poincare index) [3]
Giaû söû (i,j) laø moät ñieåm baát kyø treân aûnh vaân tay, C laø moät ñöôøng cong kheùp
kính xung quanh (i,j) thì chæ soá Poincare taïi (i,j) laø toång ñaïi soá caùc ñoä sai leäch
höôùng cuûa caùc ñieåm lieàn keà nhau treân ñöôøng cong C.
Np −1
Poincare(i, j ) = ∑ Δ(k )
k =0
d (k ) d (k ) < π / 2
Δ (k ) = d (k ) + π d (k ) ≤ −π / 2
d (k ) − π
d ( k ) = ϕ ( x k +1 , y k +1 ) − ϕ ( x k , y k )
Trong ñoù: Np laø toång soá ñieåm treân ñöôøng cong “soá” C
ϕ(x,y) laø höôùng taïi ñieåm (x,y)
Döïa vaøo chæ soá Poincare ta coù theå xaùc ñònh caùc ñieåm singularity nhö sau:
Hình 2.5 minh hoïa caùch tính chæ soá poincare taïi ñieåm (i,j) vôùi soá ñieåm treân
ñöôøng cong “soá” Np = 8
Hình 2.5: Caùch tính chæ soá poincare taïi ñieåm (i,j) vôùi Np = 8
Haøm poincare.m thöïc hieân vieäc tính chæ soá Poincare theo thuaät toaùn treân vaø
haøm singularity.m xaùc ñònh caùc ñieåm singularity döïa vaøo chæ soá Poincare (phuï
luïc).
Hình 2.6: Sô ñoà moâ taû thuaät toaùn trích caùc ñieåm minutiae töø aûnh binary
YÙ töôûng chính cuûa phöông phaùp naøy laø töø aûnh xaùm ban ñaàu ta söû duïng caùc boä
loïc thích hôïp ñeå phaùt hieän vaø laøm maûnh ñöôøng vaân döôùi daïng moät pixel
(ridge detection), bieán ñoåi aûnh xaùm ban ñaàu thaønh aûnh binary (coù giaù trò laø 0
hoaëc 1) töông öùng.
Sau ñoù, caùc ñieåm minutiae seõ ñöôïc trích nhö sau: giaû söû (x,y) laø moät ñieåm
treân ñöôøng vaân ñaõ ñöôïc laøm maõnh vaø N0, N1, …, N7 laø 8 ñieåm xung quanh noù
thì
7
• (x,y) laø moät ñieåm keát thuùc neáu ∑N
i =0
i =1
7
• (x,y) laø moät ñieåm reõ nhaùnh neáu ∑N
i =0
i >2
b. Trích caùc ñieåm minutiae tröïc tieáp töø aûnh xaùm [1]
¾ Doø theo ñöôøng vaân (Ridge line following)
Giaû söû I laø moät aûnh xaùm coù kích thöôùc laø mxn vaø neáu coi chieàu thöù ba z laø
möùc xaùm taïi ñieåm (i,j) thì beà maët cuûa aûnh vaân tay I coù daïng nhö sau:
Hình 2.8: Beà maët cuûa aûnh vaân tay vôùi caùc ñöôøng vaân (ridge) vaø caùc raõnh (ravine)
Theo quan ñieåm toaùn hoïc thì ñöôøng vaân laø taäp hôïp caùc ñieåm cöïc ñaïi doïc theo
moät höôùng xaùc ñònh. Vieäc xaùc ñònh caùc ñieåm minutiae tröïc tieáp töø aûnh xaùm
döïa vaøo thuaät toaùn doø theo ñöôøng vaân. Thuaät toaùn naøy döïa vaøo vieäc xaùc ñònh
caùc ñieåm cöïc ñaïi doïc theo höôùng cuûa ñöôøng vaân.
¾ Xaùc ñònh ñieåm cöïc ñaïi
Giaû söû Ω((it , jt ), φ , σ ) laø thieát dieän cuûa ñöôøng vaân coù ñieåm chính giöõa laø
(it , jt ) , höôùng cuûa thieát dieän φ = ϕ t + π / 2 ( ϕ t laø höôùng cuûa ñöôøng vaân taïi
(it , jt ) ) vaø beà roäng cuûa thieát dieän m = 2σ+1 pixel (hình 2.9). Khi ñoù, Ω ñöôïc
xaùc ñònh nhö sau:
vaø ñieåm cöïc ñaïi coù theå ñöôïc xaùc ñònh baèng caùch so saùnh möùc xaùm giöõa caùc
ñieåm trong Ω
¾ Toùm laïi vieäc tìm caùc ñieåm minutiae baèng thuaät toaùn doø theo ñöôøng vaân
ñöôïc thöïc hieän nhö sau (chi tieát xem ôû taøi lieäu tham khaûo[1]):
− Laáy moät ñieåm baát kì (is,js) treân aûnh I
− Tìm höôùng ϕs taïi ñieåm (is,js)
− Tìm ñieåm cöïc ñaïi (ic,jc) gaàn (is,js) nhaát
Hình 2.10: Ñieåm cöïc ñaïi (ic,jc) töông öùng vôùi (is,js)
Taát caû caùc thuaät toaùn treân ñöôïc thöïc hieän baèng haøm minutiae.m (phuï luïc)
trong ñoù:
M0, V0 laø mean vaø variance mong muoán (thöôøng ñöôïc choïn laø 100)
Mi, Vi laø mean vaø variance cuûa aûnh I
Chuù yù: neáu möùc xaùm cuûa caùc vuøng khaùc nhau treân aûnh I khoâng ñoàng ñeàu thì coù
theå chia I thaønh caùc khoái nhoû vaø chuaån hoaù theo töøng khoái.
(Haøm normalize.m thöïc hieän chuaån hoùa möùc xaùm ñöôïc giôùi thieäu ôû phuï luïc)
2. Xaùc ñònh tröôøng ñònh höôùng theo phöông phaùp ñaõ giôùi thieäu ôû treân
3. Söû duïng haøm loïc Gabor cho aûnh ñaõ chuaån hoùa trong mieàn taàn soá
− Chia aûnh caàn loïc thaønh töøng khoái nhoû kích thöôùc WxW
− Xaùc ñònh höôùng cuûa khoái (döïa vaøo tröôøng ñònh höôùng)
− Höôùng φ cuûa boä loïc laø höôùng cuûa khoái
− Söû duïng pheùp bieán ñoåi FFT vaø pheùp bieán ñoåi IFFT cho töøng khoái aûnh vaø
haøm Gabor
Hình 2.13: Keát quaû loïc baèng haøm gabor_filter.m (phuï luïc)
vôùi T = 0.6, σx = 1, σy = 2
trong ñoù: m, n laàn löôït laø soá ñieåm ñaëc tröng cuûa I vaø I’.
Khi ñoù, ñieåm m ' ∈ I ' ñöôïc coi laø “gioáng” vôùi ñieåm m ∈ I neáu ñoä sai leäch veà
khoâng gian vaø ñoä sai leäch veà höôùng nhoû hôn caùc giaù trò ngöôõng r0 vaø θ0 :
Neáu
Toång soá ñieåm cuûa I – soá ñieåm gioáng nhau
< ngöôõng T
Toång soá ñieåm cuûa I
thì I’ ñöôïc coi laø gioáng I. Trong ñoù T laø phaàn traêm soá ñieåm sai leäch cho pheùp.
MAÏNG NEURAL
NHAÂN TAÏO
CHÖÔNG 3:
Caùc tín hieäu truyeàn trong daây thaàn kinh vaøo vaø daây thaàn kinh ra cuûa caùc
neural laø tính hieäu ñieän, ñöôïc thöïc hieän thoâng qua caùc quaù trình phaûn öùng vaø giaûi
phoùng caùc chaát höõu cô. Caùc chaát naøy ñöôïc phaùt ra töø caùc khôùp noái daãn tôùi caùc
daây thaàn kinh vaøo seõ laøm taêng hay giaûm ñieän theá cuûa nhaân teá baøo. Khi ñieän theá
naøy ñaït ñeán moät möùc ngöôõng naøo ñoù seõ taïo ra moät xung ñieän daãn tôùi truïc daây
thaàn kinh ra. Xung naøy ñöôïc truyeàn theo truïc, tôùi caùc nhaùnh reõ khi chaïm tôùi caùc
khôùp noái vôùi caùc neuron khaùc vaø seõ giaûi phoùng caùc chaát truyeàn ñieän. Thöôøng
chia khôùp noái thaønh 2 loaïi: khôùp noái kích thích (excitatory) vaø khôùp noái öùc cheá
(inhibitory).
Phaùt hieän quan troïng nhaát veà boä naõo sinh hoïc laø caùc lieân keát khôùp thaàn kinh
khaù meàm deûo, coù theå bieán ñoäng vaø söûa ñoåi theo thôøi gian tuøy thuoäc vaøo caùc daïng
kích thích. Hôn nöõa, caùc neuron coù theå saûn sinh caùc lieân keát môùi vôùi caùc neuron
khaùc; ñoâi khi, löôùi caùc neuron coù theå di truù töø vuøng naøy sang vuøng khaùc trong boä
naõo. Ñaây laø cô sôû quan troïng ñeå giaûi thích cho cô cheá hoïc cuûa boä naõo con ngöôøi.
Caùc chöùc naêng cô baûn cuûa boä naõo bao goàm:
- Boä nhôù ñöôïc toå chöùc theo caùc boù thoâng tin vaø truy caäp theo noäi dung.
- Boä naõo coù theå toång quaùt hoùa, coù theå truy xuaát caùc tri thöùc hay caùc moái lieân
keát chung cuûa caùc ñoái töôïng töông öùng vôùi moät khaùi nieäm chung naøo ñoù.
- Boä naõo coù khaû naêng ñieàu chænh hoaëc tieáp tuïc thöïc hieän ngay khi coù nhöõng
sai do thoâng tin bò thieáu hay thieáu chính xaùc. Ngoaøi ra, boä naõo coøn coù theå
phaùt hieän vaø phuïc hoài caùc thoâng tin bò maát döïa treân söï töông töï giöõa caùc ñoái
töôïng.
- Boä naõo coù khaû naêng xuoáng caáp vaø thay theá daàn. Khi coù nhöõng truïc traëc taïi
caùc vuøng naõo (do chaán thöông) hoaëc baét gaëp nhöõng thoâng tin hoaøn toaøn môùi
laï, boä naõo vaãn coù theå ñöôïc tieáp tuïc laøm vieäc.
- Boä naõo coù khaû naêng hoïc.
Nhìn chung, tính toaùn sô boä cho thaáy raèng duø boä vi xöû lyù maùy tính ñieän töû
coù theå tính toaùn nhanh hôn haøng trieäu laàn so vôùi neuron cuûa boä naõo, nhöng xeùt
toång theå thì boä naõo laïi tính toaùn nhanh hôn haøng tyû laàn. Ngoaøi ra, cuõng deã thaáy
raèng boä naõo con ngöôøi coù theå löu tröõ nhieàu thoâng tin hôn caùc maùy tính hieän ñaïi,
duø raèng ñieàu naøy khoâng phaûi ñuùng maõi maõi bôûi leõ boä naõo tieán hoùa chaäm coøn boä
nhôù maùy tính thì ñöôïc naâng caáp raát nhanh nhôø nhöõng tieán boä cuûa khoa hoïc kyõ
thuaät.
2. Moâ hình neuron nhaân taïo vaø maïng neuron nhaân taïo
maïng neuron nhaân taïo (Artificial neural network – ANN) laø maïng bao goàm
caùc nuùt (neuron, ñôn vò xöû lyù) ñöôïc noái vôùi nhau bôûi caùc lieân keát neuron. Moãi
lieân keát keøm theo moät troïng soá naøo ñoù, ñaëc tröng cho ñaëc tính kích hoaït hoaëc öùc
cheá giöõa caùc neuron. Coù theå xem caùc troïng soá laø phöông tieän ñeå löu thoâng tin daøi
haïn trong maïng neuron, coøn nhieäm vuï cuûa quaù trình huaán luyeän (hoïc) laø caäp
nhaät caùc troïng soá khi coù theâm thoâng tin veà caùc maãu hoïc, hay noùi caùch khaùc, caùc
troïng soá ñöôïc ñieàu chænh sao cho daùng ñieäu vaøo ra cuûa noù moâ phoûng hoaøn toaøn
phuø hôïp moâi tröôøng ñang xem xeùt.
a. Moâ hình nhaân taïo
Moãi nueron ñöôïc noái vôùi caùc neuron khaùc vaø nhaän ñöôïc caùc tín hieäu töø
chuùng vôùi caùc troïng soá wj.
- Toång thoâng tin vaøo coù troïng soá laø:
- Net = ∑ w j s j , ñaây laø thaønh phaàn tuyeán tính cuûa neuron
- Haøm kích hoaït g ñoùng vai troø bieán ñoåi töø Neùt sang tín hieäu ñaàu ra out
- Out = g(Net), ñaây laø thaønh phaàn phi tuyeán cuûa maïng neuron
- Moät soá daïng haøm kích hoạt thöôøng duøng trong thöïc teá:
⎧1, x ≥ 0
+ Hàm bước: step(x)= ⎨ (3.1)
⎩0, x < 0
⎧1, x ≥ 0
+ Hàm dấu : sign(x)= ⎨ (3.2)
⎩− 1, x < 0
1
+ Hàm sigmoid 1: sigmoid(x)= −α ( x +θ )
(3.3)
1+ e
e −α ( x +θ ) − 1
+ Hàm sigmoid 2: sigmoid(x)=a . (3.4)
e −α ( x +θ ) + 1
Trong đó :
S= ( s1 , s 2 ,..., s) : vector tín hiệu vào
W= ( w1 , w2 ,...wn ) : vector trọng số
θ : là ngưỡng đóng vai trò làm tăng tính thích nghi và khả năng tính toán
của mạng neuron
+ Học không có giám sát (unsupervised learning), còn gọi là học không
thầy: Trong kỹ thuật học này, sẽ không có sự hồi tiếp từ môi trường để cho biết tín
hiệu ra yêu cầu của mạng nên như thế nào, hoặc chúng có đúng chưa – giống như
học có giám sát, mà nói chung mạng neuron phải tự nó phát hiện ra bất cứ mối liên
hệ có liên quan có thể tồn tại trong giữ liệu vào (chẳng hạn như: các mẫu, các đặc
trưng, các quy tắc, sự tương quan) và chuyển mối liên hệ đã phát hiện này sang đầu
ra. Mạng học với cơ chế này gọi là mạng tự tổ chức. Thí dụ, mạng neuron học
không thầy có thể cho chúng ta biết một mẫu đầu vào mới đồng dạng như thế nào
với mẫu đặc trưng đã thấy trong quá khứ (sự đồng dạng); hoặc một dạng neuron
khác có thể xây dựng một tập những cái rìu trên cơ sở sự tương tự của những thí dụ
trước đó (phân tích thành phần chủ yếu)v.v…
+ Học tăng cường (Reinforced learning): Như đã giới thiệu ở trên, kỹ thuật
học có giám sát là hiệu chỉnh dần giá trị tín hiệu đầu ra tương ứng với từng cặp mẫu
tín hiệu vào-ra. Tuy nhiên thực tế nhiều khi không thể có được các thông tin chi tiết
này. Do đó thường phải sử dụng thuật toán “học tăng cường”. trong học tăng cường
, dữ liệu huấn luyện rất thô và chúng chỉ “ ước lượng” để so sánh với “sự truyền
kiến thức” hồi tiếp trong học có giám sát.
+ Các kỹ thuật học trong mạng neuron có thể nhằm vào việc hiệu chỉnh các
trọng số liên kết – gọi là học tham số; hoặc nhằm vào việc điều chỉnh, sửa đổi cấu
trúc của mạng, bao gồm số lớp, số neuron, kiểu và trọng số các liên kết – gọi là học
cấu trúc.
Mạng neuron 3 lớp lan truyền ngược hình 3.7 có m neuron ở lớp vào, l
neuron ở lớp ẩn và n neuron ở lớp ra.
Đầu tiên, xét cặp mẫu huấn luyện (x,d). với tín hiệu mẫu đầu vào x ở lớp vào,
neuron q ở lớp ẩn sẽ nhận được tín hiệu:
m
Netq = ∑v
j =1
qj xj (3.7)
n
= η ∑ [(d i − y i ).a , (net i ) wiq ].a , (net q ).x j (3.14)
i =1
n
Δv qj = η ∑ [d oi wiq ], a , (net q ) x j = ηδ hq x j (3.15)
i =1
trong đó δ hq là sai số tín hiệu ở lớp ẩn, được định nghĩa như sau:
∂Ε ⎡ ∂Ε ⎤ ⎡ ∂z q ⎤ n
δ hq = − = −⎢ ⎥ = a (net q )∑ δ oi wiq
,
⎥⎢ (3.16)
∂net q ⎢⎣ ∂z q ⎦⎥ ⎣⎢ ∂net q ⎦⎥ i =1
Nhận thấy rằng sai số tín hiệu lớp ẩn khác với sai số tín hiệu lớp ra. Và chính
sự khác nhau này nên thủ tục để cập nhật các trọng số liên kết được gọi là “qui luật
học tổng quát hóa delta”.
Tổng quát, với mạng neuron có số lớp tùy ý, quy luật cập nhật lan truyền
ngược sẽ có dạng:
Δwij = ηδ i x j = ηδ output −i .xinput − j (3.17)
trong đó , “output-i” và “input-j” là 2 điểm kết thúc nối từ neuron j đến neuron
i;xj là tín hiệu vào; δ i là sai số tín hiệu, được xác định theo (2.13) cho lớp ra hoặc
(2.16) cho lớp vào.
b.2 Các hệ số học trong thuật toán lan truyền ngược
- Khới tạo giá trị trọng số liên kết neuron (Intial weights): Trong mạng truyền
thẳng, giá trị trọng số được khởi tạo ban đầu có ảnh hưởng quan trọng đến kết quả
cuối cùng. Chúng được gán ngẫu nhiên với giá trị tương đối nhỏ, vì nếu quá lớn thì
hàm sigmoid sẽ dễ bảo hòa ngay lúc bắt đầu, dẫn đén hệ thống sẽ bị “nghẽn” tại giá
trị địa phương nhỏ nhất hoặc rất ổn định ở lân cận điểm bắt đầu. Do đó,tầm hợp lý
của giá trị trọng số khởi tạo ban đầu thường nằm trong khoảng [-3/ki, 3/ki], trong đó
ki là số đầu vào nối vào neuron I [Wessels and Barnard, 1992]
- Hằng số học (learning constant): Một hệ số quan trọng khác cũng làm ảnh
hưởng đến hiệu quả và sự hội tụ của thuật toán lan truyền ngược, đó là hằng số học
η . Sẽ không có một giá trị hằng số hhọc cố định cho các trường hợp huấn luyện
khác nhau, mà thường chúng được chọn thử nghiệm cho từng bài toán cụ thể. Một
hằng số học có giá trị lớn có thể làm gia tăng tốc độ hội tụ, nhưng kết quả cũng có
thể sẽ bị cường điệu; Trong khi một hằng số học có giá trị nhỏ hơn thì có tác dụng
ngược lại. tầm gái trị hằng số học η thường dao động trong khoảng từ 10-3 đến 10.
Một vấn đề khác cũng được đặt ra là hằng số hằng sẽ được tốt nhất ở lúc bắt
đầu huấn luyện, tuy nhiên sẽ không còn tốt nữa sau vài lần huấn luyện. Do đó, tốt
nhất là dùng hằng số học thích nghi. Phương pháp trực giác để xác định hằng số học
này là kiểm soát riêng lẻ quá trình cập nhật trọng số để làm giảm hàm sai số; nếu
không thì giảm dần chúng nếu kết quả cường điệu; hoặc trong trường hợp khi nhiều
bước lặp đều có sự suy giảm hàm sai số dẫn đến bài toán quá hội tụ, thì nên tăng
dần hằng số học lên. Cụ thể nhất, hằng số học nên được cập nhật theo các quy luật
sau:
⎧ + a, ΔΕ < 0
⎪
Δη = ⎨− bη , ΔΕ > 0 (3.18)
⎪ 0,
⎩
trong đó:
ΔΕ là độ lệch hàm sai số; a,b là các hằng số dương
Hoặc trong trường hợp dựa trên các bước huấn luyện trước thì:
⎧ + a, D (t = 1)λ (t ) > 0
⎪
⎨ − bη (t ), D (t − 1)λ (t ) < 0 (3.19)
⎪ 0,
⎩
trong đó:
∂Ε
λ (t ) = (3.20)
∂wij
D (t ) = (1 − c)λ (t ) + cD (t − 1), c ∈ [0,1] là hằng số(3.21)
- Hàm sai số (Cost functions): Trong công thức tính hàm sai số (3.11), thành
phần sai số bình phương (di-yi)2có thể thay thế bởi bất kỳ một hàm F(di,yi) nào khác
sao cho hàm này có thể đạt cực tiểu khi argument của di và yi bằng nhau. Và tương
ứng với hàm sai số mới này, qui luật cập nhật trọng số từ (3.11) đến (3.16) nêu trên
sẽ thay đổi. Tuy nhiên, dễ dàng nhận thấy rằng chỉ có công thức tính δ oi (3.13) và
δ hq (3.16) là thay đổi theo hàm sai số, còn các công thức khác thì hầu như không
thay đổi.
- Động lượng (Momentum): Sự suy giảm gradient có thể sẽ rất chậm nếu hằng
số học η quá lớn. Do đó , phương pháp làm chênh lệch đi khả năng dao động biên
độ nhưng vẫn cho phép sử dụng hằng số học lớn là đưa thêm vào trọng số thành
phần “động lượng” theo công thức sau:
Δw(t ) = −η∇Ε(t ) + αΔw(t − 1) (3.22)
trong đó: α ∈ [0,1] là tham số động lượng và thường chọn giá trị là 0,9.
2. Mạng hồi qui (Recurrent/feedback neural networks)
a. Mạng hồi tiếp đơn lớp (Single-layer feedback networks)
a.1 Mạng Hopfield rời rạc
Mỗi một nút có một tín hiệu vào xj và một ngưỡng θ j , trong đó j=1..n. ngõ ra
của nút thứ j sẽ được nối tới ngõ vào của các nút khác với chính nó. Các liên kết này
mang trọng số wij, với i=1..n và i ≠ j (nghĩa là wii = zero). Hơn nữa, trọng số liên
kết mạng là đối xứng, tức là wij = wji.
Qui luật cập nhật tại mỗi cực trong mạng Hopfield rời rạc ( là mạng Hopfield
hoạt động với thời gian rời rạc) như sau:
⎡ n ⎤
yi(k+1)= sgn ⎢ ∑w + xi − θ i ⎥ , i = 1,2,…, n
(k )
ij yj (3.23)
⎣ j =1, j ≠1 ⎦
Mạng Hopfield rời rạc có thể tổng quát hóa thành mô hình liên tục khi thời
gian được cho là biến liên tục.
a.2 Mạng Hopfield với bộ nhớ tự kết hợp (Autoassociative memory –
AM): Thuật toán lưu trữ để xác định ma trận trọng số:
p
Wij = ∑x (3.24)
k k
i xj
k =1
Trong đó:
⎧ i≠ j
⎪ w =0
⎪ ii
⎨
= ( x1 , x 2 ,...x n ) T
k k k k
⎪ x
⎪⎩ p
Trường hợp xi là vector nhị phân đơn cực, thì xik ∈ {0,1}và quy luật lưu trữ
như sau:
p
wij = ∑ (2 xi − 1)( x j − 1) (3.25)
k k
k =1
với:
⎧ i≠ j
⎨
⎩ wii = 0
a.3 Mạng Hopfield với bộ nhớ 2 chiều kết hợp (Bidirectional associative
memory)
Cũng giống như mạng Hopfield, ta có thể có mạng BAM rời rạc hoặc mạng
BAM liên tục. Sở dĩ có chữ “hai chiều” trong tên gọi mạng là vì có thể dùng mạng
để biến đổi tín hiệu vào thành tín hiệu ra và ngược lại.
Xét mạng BAM rời rạc. Giả sử bộ nhớ neuron được kích hoạt bởi việc đặt một
vector khởi tạo x ở đầu vào của neuron lớp Y, tín hiệu ở đầu ra của lớp Y như sau:
y’ = a(wx) (3.26)
hoặc:
⎡m ⎤
y i = a ⎢∑ wij x j ⎥ với I = 1..n; a là hàm kích hoạt
,
(3.27)
⎣ j =1 ⎦
Đưa vector y’ truyền ngược trở lại neuron lớp X, khi đó tín hiệu đầu ra neuron
lớp X như sau:
x’ = a(WTy’)(2.28) (3.28)
hoặc:
⎡ ,⎤
x j = a ⎢∑ w ji y j ⎥ ,với j = 1..m; a là hàm kích hoạt
,
(3.29)
⎣ ⎦
Tổng quát, ở bước truyền tới và truyền ngược thứ k/2, tín hiệu đầu ra neuron
lớp Y và lớp X lần lượt là:
y(k-1) = a(Wx(k-2)) (3.30)
x(k)=a(WTy(k-1)) (3.31)
xét p cặp vector kết hợp đã được lưu trữ trong BAM:
{(x1,y1), (x2,y2),…, (xp,yp)} (3.32)
k k k k T k k k k T
trong đó x =(x1 ,x2 ,…, xm ) và y =(y1 ,y2 ,…, yn ) là các vector đơn cực và
lưỡng cực. Qui luật học trọng số cho BAM như sau:
⎧ p y k ( x k )T
W = ⎨ ∑kp =1
⎪
(3.33)
⎪⎩∑k =1 (2 y − 1)(2 x − 1)
k k T
hoặc:
⎧⎪ ∑ p y pi k x j k
wij = ⎨ k =1 (3.34)
⎪⎩∑k =1 (2 y i − 1)(2 x j − 1)
k k
Hình 3.9 Cấu trúc của mạng Hopfield với bộ nhớ hai chiều kết hợp (BAM)
τ y *i = − yi + a [∑ w y
j ij j + xi ] (3.35)
trong đó, τ là tỷ lệ thời gian hồi phục. chú ý rằng khi trọng số đối xứng, tức là
wij=wji và wii=0, thì trong mạng qui về mô hình Hopfield. Cho y*i=0, ta có:
yi=a(hi) = a [∑ w y
j j ij + xi ] (3.36)
cũng như các mạng lan truyền ngược khác, hàm sai số trong mạng hồi qui lan
truyền ngược cũng được tối thiểu hóa. Ta có:
n
Ε k = 1 / 2∑ Ε 2 k
k =1
trong dó:
⎧ d − yk , k
Εk = ⎨ k (3.37)
⎩o,
dùng phương pháp suy giảm gradient, trọng số được cập nhật như sau:
∂Ε ∂y k
Δ w pq = −η = η ∑k Εk (3.38)
∂ w pq ∂ w pq
∂y i ⎡ ∂y j ⎤
= a , (hi ) ⎢δ ip y q + ∑ j wij ⎥ (3.39)
∂w pq ⎢⎣ ∂w pq ⎥⎦
∂y i
∂w pq
− ∑ j a , (hi ) wij
∂y i
∂w pq
[
=∑ j δ ij − a , (hi ) wij
∂y i
∂w pq
]
= δ ip a , ( hi ) y q (3.40)
trong đó:
⎧1, i = j
δ ij = ⎨ (3.41)
⎩0, i ≠ j
∂y j
∑ L
j ij
∂w pq
= δ ip a , (hi ) y q (3.42)
trong đó:
Lij = δ ij − a , (hi ) wij (3.43)
∂y k
= [ L−1 ] kp a , (h p ) y q = ηδ p y q (3.44)
∂w pq
Δw pq = η ∑k Ε k [ L−1 ] kp a , (h p ) y q = ηδ p y q (3.45)
trong đó:
δ p = a , (h p )∑k Ε k [ L−1 ] kp (3.46)
Cùng họ với mạng hồi qui lan truyền ngược vừa nêu, còn có nhiều kiểu mạng
hồi qui/hồi tiếp khác như: Mạng hồi qui một phần (Partially Recurrent networks),
mạng hồi qui hoàn toàn (Fully Recurrent Networks); hoặc mạng với thuật toán học
tăng cường (Reinforced learning).
1. Giôùi thieäu
2. Phöông phaùp ñeà nghò
3. Thuaät toaùn huaán luyeän maïng neural
CHÖÔNG 4:
X1
W1
X2 Y
W2
.
.
.
WN
XN
Trong ñoù:
⎡ X1 ⎤
⎢X ⎥
X = ⎢ 2 ⎥ Vector tín hieäu vaøo
⎢ ⎥
⎢ ⎥
⎣X N ⎦
⎡ W1 ⎤
⎢W ⎥
W = ⎢ 2 ⎥ Vector troïng soá
⎢ ⎥
⎢ ⎥
⎣WH ⎦
Y : tín hieäu ra
Böôùc 1:
Khôûi ñoäng trò W(0)
Choïn haèng soá hoïc η
Böôùc 2: lan truyeàn thuaän
Tính:
Y(k) = net(k) = WT.X(k)
Böôùc 3: lan truyeàn ngöôïc
Tính:
∂a (net (k ))
W (k + 1) = W (k ) + η[ D(k ) − Y (k )] (a(.) laø haøm kích hoaït)
∂net (k )
Böôùc 4: laëp laïi böôùc 3 K laàn (moät epoch), vôùi K laø soá maãu döõ lieäu vaøo.
Böôùc 5: tính J ( K ) = 1 2 [D( K ) − Y ( K )]2
Böôùc 6: kieåm tra neáu J(K) ñuû beù:
Ñuû beù: keát thuùc (löu W)
Chöa: laëp laïi böôùc 1 vôùi caùc giaù trò khôûi ñoäng W(0) ñöôïc caäp nhaät töø
böôùc 4
2. Maïng Perceptron hai lôùp (moät lôùp aån vaø moät lôùp ra)
Maïng Perceptron hai lôùp ( vôùi moät lôùp aån vaø moät lôùp ra), ñöôïc huaán luyeän
baèng giaûi thuaät lan truyeàn ngöôïc suy giaûm sai soá gradient. Haøm kích hoaït lôùp
aån ñöôïc choïn laø haøm sigmoid, haøm kích hoaït lôùp ra laø haøm tuyeán tính.
X1
V11
Z1
V21
VH1 W1
X2 V12 Z2
Y
V22 W2
VH2
. .
.
. . ZH
V1N WH
.
V2N
.
XN
VHN
Hình 4.2: Moâ hình maïng Perceptron hai lôùp (moät lôùp aån vaø moät lôùp ra)
Trong ñoù:
⎡ X1 ⎤
⎢X ⎥
X = ⎢ 2 ⎥ Vector tín hieäu vaøo
⎢ ⎥
⎢ ⎥
⎣X N ⎦
⎡ Vq1 ⎤
⎢V ⎥
Vq = ⎢ ⎥ Caùc vector troïng soá lôùp aån ( q = 1,..., H )
q2
⎢ ⎥
⎢ ⎥
⎢⎣VqN ⎥⎦
⎡ W1 ⎤
⎢W ⎥
W = ⎢ 2 ⎥ Vector troïng soá lôùp ra
⎢ ⎥
⎢ ⎥
⎣WH ⎦
⎡ Z1 ⎤
⎢Z ⎥
Z = ⎢ 2 ⎥ Vector tín hieäu ra lôùp aån.
⎢ ⎥
⎢ ⎥
⎣Z H ⎦
Y : tín hieäu ra
Böôùc 1:
Khôûi ñoäng trò W(0), Vq(0)
Choïn haèng soá hoïc η
Böôùc 2: lan truyeàn thuaän
Tính:
Zq(k) = sigmoid(netq) = sigmoid(VqT.X(k))
Y(k) = neto = WT.Z(k)
Böôùc 3: lan truyeàn ngöôïc
Tính:
δ O = D(k ) − Y (k )
W (k + 1) = W (k ) + η .δ O .Z (k )
e − netq
δ hq = δ O .Wq .
(1 + e − netq ) 2
Vq (k + 1) = Vq (k ) + η .δ hq . X (k )
Böôùc 4: laëp laïi böôùc 3 K laàn (moät epoch), vôùi K laø soá maãu döõ lieäu vaøo.
Böôùc 5: tính J ( K ) = 1 2 [D( K ) − Y ( K )]2
Böôùc 6: kieåm tra neáu J(K) ñuû beù:
Ñuû beù: keát thuùc (löu W, Vq)
Chöa: laëp laïi böôùc 1 vôùi caùc giaù trò khôûi ñoäng W(0), Vq(0) ñöôïc caäp nhaät
töø böôùc 4
THÖÏC NGHIEÄM
VAØ KEÁT QUAÛ
1. Chöông trình
2. Löu ñoà giaûi thuaät
3. Keát quaû
4. Ñaùnh giaù keát quaû
CHÖÔNG 5:
Hình 5.1: Giao dieän cuûa chöông trình thu thaäp, löu tröõ vaø ñoái saùnh vaân tay.
Söû duïng:
¾ Ban ñaàu khi chöa coù döõ lieäu trong database, choïn “Laáy maãu”. Sau ñoù, click
vaøo nuùt “maãu” vaø choïn laàn löôït ba aûnh vaân tay cuûa cuøng moät ngoùn tay ñeå
laøm maãu ñoái saùnh. Tieáp theo, nhaäp caùc thoâng tin caù nhaân cuûa ngöôøi coù maãu
vaân tay ñoù vaø click “OK”.
¾ Sau ñoù, khi caàn ñoái saùnh moät daáu vaân tay naøo ñoù choïn “ñoái saùnh” vaø click
vaøo nuùt “maãu” ñeå choïn aûnh vaân tay caàn ñoái saùnh. Neáu maãu naøy gioáng vôùi
maãu naøo coù trong database thì thoâng tin caù nhaân cuûa ngöôøi coù daáu vaân tay
ñoù seõ ñöôïc thoâng baùo .
AÛnh vaøo
Hình 5.2: Löu ñoà giaûi thuaät trích caùc ñieåm ñaëc tröng
Taát caû thuaät toaùn ñöôïc neâu ôû löu ñoà hình 5.2 ñöôïc thöïc hieän baèng haøm
feature_extracting.m (phuï luïc).
AÛnh vaøo
Huaán luyeän
maïng neural
Löu maïng
neural vaøo cô sôû
döõ lieäu
Hình 5.3: Löu ñoà giaûi thuaät quaù trình laáy maãu
Caùc thuaät toaùn ôû löu ñoà treân ñöôïc thöïc hieän baèng caùc haøm sau (phuï luïc):
- neural_template.m : xaây döïng maãu ngoõ vaøo cho maïng neural
- training1.m : huaán luyeän maïng Perceptron moät lôùp
- training2.m : huaán luyeän maïng Perceptron hai lôùp
AÛnh vaøo
Loãi
FAR
FRR
Hình 5.4: Löu ñoà giaûi thuaät quaù trình ñoái saùnh
Vieäc ñoái saùnh ñöôïc thöïc hieän baèng caùch cho maãu caàn ñoái saùnh qua caùc maïng
ñaõ ñöôïc huaán luyeän trong cô sôû döõ lieäu vaø so saùnh ngoõ ra Y vôùi ngöôõng T:
- Y < T : hai maãu gioáng nhau
- Y > T : hai maãu khaùc nhau
Caùc thuaät toaùn ñoái saùnh vaø thu thaäp caùc loãi FAR vaø FRR ñöôïc thöïc hieän baèng
caùc haøm thuthap1.m hoaëc thuthap2.m (phuï luïc).
Hình 5.5: Caùc ñieåm ñaëc tröng cuûa hai daáu vaân tay khaùc nhau cuûa cuøng moät
ngoùn tay
Sau ñaây laø hai maãu ngoõ vaøo (moät duøng ñeå huaán luyeän vaø moät duøng ñeå ñoái
saùnh) töông öùng vôùi hai daáu vaân tay treân. Hai maãu naøy ñöôïc xaây döïng theo
phöông phaùp ñöôïc giôùi thieäu ôû phaàn 4.2.
Theo quan saùt ta thaáy thöôøng treân daáu vaân tay chæ coù theå coù moät hoaëc hai
ñieåm delta (moät beân phaûi vaø moät beân traùi) hoaëc khoâng coù ñieåm delta naøo. Vì
vaäy, boán giaù trò ñaàu tieân cuûa maãu ngoõ vaøo laàn löôït laø vò trí cuûa hai ñieåm delta
beân phaûi vaø beân traùi neáu coù (giaù trò 300 hoaëc -300 cho bieát khoâng coù ñieåm
delta ôû vò trí ñoù). Caùc giaù trò tieáp theo laàn löôït laø vò trí trung bình cuûa caùc
ñieåm minutiae vaø soá ñieåm minutiae ôû boán phaàn tö cuûa maët phaúng aûnh (nhö ñaõ
giôùi thieäu ôû phaàn 4.2). Nhö vaäy, coù taát caû 16 ngoõ vaøo.
mau1 =
300.0000
300.0000
109.0000
-65.0000
101.8667
49.6667
15.0000
91.1000
49.6000
10.0000
20.3733
9.9333
5.0000
93.8000
57.2000
5.0000
mau2 =
300.0000
300.0000
109.0000
-65.0000
105.8000
50.2667
15.0000
97.1000
48.9000
10.0000
21.1600
10.0533
5.0000
89.2000
58.6000
5.0000
Vector troïng soá cuûa maïng Perceptron moät lôùp töông öùng vôùi maãu 1, ñöôïc
huaán luyeän vôùi haèng soá hoïc η = 10 −7 vaø sai soá cho pheùp ε = 10 −4 nhö sau:
W=
Columns 1 through 7
Columns 8 through 14
Columns 15 through 16
-0.1687 -0.1060
vaø giaù trò ngoõ ra khi cho laàn löôït hai maãu treân qua maïng ñöôïc huaán luyeän:
>> Y1 = W*mau1
Y1 =
0.0139
>> Y2 = W*mau2
Y2 =
0.6955
Nhö vaäy, sai soá ñoái saùnh seõ laø Y2 – Y1 = 0.6816. Do ñoù, neáu choïn ngöôõng
T>0.6816 thì hai maãu naøy laø gioáng nhau, ngöôïc laïi hai maãu naøy laø khaùc nhau.
Hình 5.6 Keát quaû ñoái saùnh khi söû duïng maïng Perceptron moät lôùp.
Ta thaáy, khi taêng ngöôõng T thì FAR taêng, coøn FRR giaûm vaø ngöôïc laïi. Tuøy theo
yeâu caàu veà ñoä baûo maät cuûa heä thoáng ta coù theå choïn giaù trò ngöôõng T thích hôïp.
Ví duï, khi heä thoáng yeâu caàu ñoä baûo maät cao ta choïn giaù trò T nhoû. Khi ñoù, loãi
nhaän nhaàm seõ nhoû nhöng loãi töø choái nhaàm seõ lôùn coù theå gaây phieàn haø cho ngöôøi
söû duïng.
Ñeå coù ñaùnh giaù toång quaùt hôn ta duøng toång SUM = FAR + FRR, ñaây laø tyû leä
phaàn traêm loãi xaûy ra treân heä thoáng. Roõ raøng, moät heä thoáng toát phaûi coù SUM nhoû
(trong tröôøng hôïp naøy SUMmin = 24%)
Hình 5.7 laø caùc keát quaû ñoái saùnh khi söû duïng maïng Perceptron hai lôùp, hình 5.8
laø caùc keát quaû ñoái saùnh söû duïng phöông phaùp ñöôïc giôùi thieäu ôû phaàn 2.4
Hình 5.7 Keát quaû ñoái saùnh khi söû duïng maïng Perceptron hai lôùp.
Hình 5.8: Keát quaû ñoái saùnh söû duïng phöông phaùp ñöôïc giôùi thieäu ôû phaàn 2.4
Baûng 5.1 toång hôïp moät soá keát quaû thu thaäp ñöôïc töø caùc phöông phaùp ñoái saùnh
baèng maïng Perceptron moät lôùp, hai lôùp vaø phöông phaùp giôùi thieäu ôû phaàn 2.4
(taïm goïi laø phöông phaùp tröïc tieáp). Thôøi gian thu thaäp trong baûng döôùi chöa tính
thôøi gian trích caùc ñieåm ñaëc tröng (khoaûng 120s)
Toång loãi nhoû Thôøi gian thu thaäp moät Thôøi gian ñoái saùnh moät maãu
nhaát (%) maãu döõ lieäu (s) qua taäp döõ lieäu 50 maãu (s)
Moät lôùp 24 0.143 0.1327
Hai lôùp 22 2.175 0.2804
Tröïc tieáp 18 0 0.4764
Baûng 5.1 Moät soá keát quaû toång hôïp töø caùc phöông phaùp ñoái saùnh
CHÖÔNG 6:
PHUÏ LUÏC
1. Haøm orientation.m
function O = orientation(I,R,Wo)
% Ham tim truong dinh huong cua anh I
% Wo (le): kich thuoc cua so xem xet;
I=double(I);
[m,n]=size(I);
O(1:m,1:n)=pi;
[Gy,Gx]=gradient(I);
for i=(Wo+1)/2:m-(Wo+1)/2
for j=(Wo+1)/2:n-(Wo+1)/2
if R(i,j)==0
A=0;
B=0;
for h=i-(Wo-1)/2:i+(Wo-1)/2
for k=j-(Wo-1)/2:j+(Wo-1)/2
A=A-Gx(h,k)*Gy(h,k);
B=B+Gx(h,k)^2-Gy(h,k)^2;
end;
end;
O(i,j)=atan2(2*A,B)/2;
end;
end;
end;
2. Haøm poincare.m
function P = poincare(O,N,i,j)
% Ham tinh chi so poincare de xet diem Singularity tai diem (i,j)
% O: Truong dinh huong cua anh
% N (le): Kich thuoc "duong cong so" (curve) xem xet
a=(N-1)/2;
d=0;
do=O(i-a,j-a);
for k=j-a+1:j+a
delta=O(i-a,k)-do;
if delta<-pi/2
delta=pi+delta;
elseif delta>pi/2
delta=delta-pi;
end;
d=d+delta;
do=O(i-a,k);
end;
for h=i-a+1:i+a
delta=O(h,j+a)-do;
if delta<-pi/2
delta=pi+delta;
elseif delta>pi/2
delta=delta-pi;
end;
d=d+delta;
do=O(h,j+a);
end;
for k=j+a-1:-1:j-a
delta=O(i+a,k)-do;
if delta<-pi/2
delta=pi+delta;
elseif delta>pi/2
delta=delta-pi;
end;
d=d+delta;
do=O(i+a,k);
end;
for h=i+a-1:-1:i-a
delta=O(h,j-a)-do;
if delta<-pi/2
delta=pi+delta;
elseif delta>pi/2
delta=delta-pi;
end;
d=d+delta;
do=O(h,j-a);
end;
P=round(d*180/pi);
3. Haøm singularity.m
[m n]=size(O);
S1(1:m,1:n)=0;
S2(1:m,1:n)=0;
%---------- Tim tat ca cac diem singularity (co the co diem loi) ----------
for i=N1+1:m-N1
for j=N1+1:n-N1
if (R(i-N1,j)==0)&(R(i+N1,j)==0)&(R(i,j-N1)==0)&(R(i,j+N1)==0)
P=poincare(O,N1,i,j);
if (P==360)|(P==180)
S1(i,j)=1; % Whorl or loop
end;
end;
end;
end;
for i=N2+1:m-N2
for j=N2+1:n-N2
if (R(i-N2,j)==0)&(R(i+N2,j)==0)&(R(i,j-N2)==0)&(R(i,j+N2)==0)
P=poincare(O,N2,i,j);
if P==-180
S2(i,j)=1; % Delta
end;
end;
end;
end;
if (mean(mean(S2_sub))>delta)
delta=mean(mean(S2_sub));
i_delta=i;
j_delta=j;
end;
end;
end;
delta_left1=300;
delta_left2=-300;
if (i_delta~=0)&(j_delta~=0)
delta_left1=i_delta-i_core;
delta_left2=j_delta-j_core;
end;
delta_left=[delta_left1;delta_left2;0];
%--------------------------------------------------------------------------
delta=[delta_right delta_left];
4. Haøm minutiae.m
v=4;
sigma=5;
I=255-double(I);
[m n]=size(I);
T(1:m,1:n)=0;
for is=26:v:m-25
for js=26:v:n-25
if ((is>core(1)-20)&(is<core(1)+20)&(js>core(2)-15)&(js<core(2)+15))|(R(is,js)==255)
else
[ic jc]=ridgenearest(I,is,js,sigma);
label=true;
if R(ic,jc)==255
label=false;
else
for i=ic-4:ic+4
for j=jc-4:jc+4
if T(i,j)==255
label=false;
end;
end;
end;
end;
if label
[T R]=ridgefollowing(I,T,R,ic,jc,core,sigma,2.4);
[T R]=ridgefollowing(I,T,R,ic,jc,core,sigma,-2.4);
end;
end;
end;
end;
R_minutiae=R;
%--------------------------------------------------------------------------
function [T,R] = ridgefollowing(I,T,R,ic,jc,core,sigma,muy)
% Ham do theo duong van tay
% muy: buoc do
[m n]=size(I);
io=ic;
jo=jc;
if muy>0
object=0;
muyO=muy;
else
object=pi;
muyO=-muy;
muy=0;
end;
object1=0;
phiOO=tangentDir(I,io,jo,9);
phiO=phiOO+object;
esc=true;
while (esc)
it=round(io+muy*sin(phiO));
jt=round(jo+muy*cos(phiO));
muy=muyO;
if ((it>26)&(it<m-25)&(jt>26)&(jt<n-25))&(R(it,jt)~=255)
if (it>core(1)-20)&(it<core(1)+20)&(jt>core(2)-15)&(jt<core(2)+15)
R(it,jt)=-3; % Diem ngat do cham vao vung core
esc=false;
else
phit=tangentDir(I,it,jt,9);
[In in jn]=localmax(I,it,jt,phit,sigma);
if (io~=ic)&(jo~=jc)&(in==io)&(jn==jo)
esc=false;
else
phinn=tangentDir(I,in,jn,9);
if abs(phinn-phiOO)>5*pi/6 % Duong van doi huong tu 90 do
if phiO>pi/2 % sang -90 do hoac nguoc lai
object1=0;
else
object1=pi;
end;
object=0;
end;
phin=phinn+object+object1;
[T R esc]=stopcriteria(I,T,R,In,in,jn,phin);
io=in;
jo=jn;
phiOO=phinn;
phiO=phin;
end;
end;
else
esc=false;
end;
end;
%--------------------------------------------------------------------------
function [ic,jc] = ridgenearest(I,is,js,sigma)
% Ham xac dinh diem cuc dai cuc bo (ic,jc) gan (is,js) nhat
phiC=tangentDir(I,is,js,9);
i1=round(is-(sigma-3)*cos(phiC+pi/2));
j1=round(js-(sigma-3)*sin(phiC+pi/2));
[Ic1 ic1 jc1]=localmax(I,i1,j1,phiC,sigma);
i2=round(is+(sigma-3)*cos(phiC+pi/2));
j2=round(js+(sigma-3)*sin(phiC+pi/2));
[Ic2 ic2 jc2]=localmax(I,i2,j2,phiC,sigma);
d1=(ic1-is)^2+(jc1-js)^2;
d2=(ic2-is)^2+(jc2-js)^2;
if d1<d2
ic=ic1;
jc=jc1;
else
ic=ic2;
jc=jc2;
end;
%--------------------------------------------------------------------------
function [T,R,esc] = stopcriteria(I,T,R,In,in,jn,phin)
% Ham dieu kien dung cua thuat toan
% Ham nay se xet xem diem (in,jn) voi phuong tiep tuyen la phin co thoa
% dieu kien dung cua thuat toan khong.
% phiO: phuong tiep tuyen cua diem (io,jo) lien truoc diem (in,jn).
esc=true;
phin=phin*180/pi;
I_nguong=20;
if ((phin>-90)&(phin<=-67.5))|((phin>247.5)&(phin<=270))
case_phin=1;
elseif (phin>-67.5)&(phin<=-22.5)
case_phin=2;
elseif (phin>-22.5)&(phin<=22.5)
case_phin=3;
elseif (phin>22.5)&(phin<=67.5)
case_phin=4;
elseif (phin>67.5)&(phin<=112.5)
case_phin=5;
elseif (phin>112.5)&(phin<=157.5)
case_phin=6;
elseif (phin>157.5)&(phin<=202.5)
case_phin=7;
else
case_phin=8;
end;
%--------------------------------------------------------------------------
switch case_phin
case 1
if T(in-1,jn)==255
label=true;
for i=in-6:in+4
for j=jn-4:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2; % Mot diem minutae loi da duoc phat hien
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2; % Mot diem re nhanh
end;
esc=false;
else
for i=in-1:in+1
for j=jn-1:jn+1
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-6:in+4
for j=jn-4:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1; % Mot diem ket thuc
end;
esc=false;
end;
end;
case 2
if T(in-1,jn+1)==255
label=true;
for i=in-6:in+4
for j=jn-4:jn+6
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2;
end;
esc=false;
else
for a=-1:1
for b=-1:1
i=in-a+b;
j=jn-a-b;
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-6:in+4
for j=jn-4:jn+6
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1;
end;
esc=false;
end;
end;
case 3
if T(in,jn+1)==255
label=true;
for i=in-4:in+4
for j=jn-4:jn+6
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2;
end;
esc=false;
else
for i=in-1:in+1
for j=jn-1:jn+1
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-4:in+4
for j=jn-4:jn+6
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1;
end;
esc=false;
end;
end;
case 4
if T(in+1,jn+1)==255
label=true;
for i=in-4:in+6
for j=jn-4:jn+6
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2;
end;
esc=false;
else
for a=-1:1
for b=-1:1
i=in-a+b;
j=jn-a-b;
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-4:in+6
for j=jn-4:jn+6
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1;
end;
esc=false;
end;
end;
case 5
if T(in+1,jn)==255
label=true;
for i=in-4:in+6
for j=jn-4:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2;
end;
esc=false;
else
for i=in-1:in+1
for j=jn-1:jn+1
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-4:in+6
for j=jn-4:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1;
end;
esc=false;
end;
end;
case 6
if T(in+1,jn-1)==255
label=true;
for i=in-4:in+6
for j=jn-6:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2;
end;
esc=false;
else
for a=-1:1
for b=-1:1
i=in-a+b;
j=jn-a-b;
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-4:in+6
for j=jn-6:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1;
end;
esc=false;
end;
end;
case 7
if T(in,jn-1)==255
label=true;
for i=in-4:in+4
for j=jn-6:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2;
end;
esc=false;
else
for i=in-1:in+1
for j=jn-1:jn+1
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-4:in+4
for j=jn-6:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1;
end;
esc=false;
end;
end;
case 8
if T(in-1,jn+1)==255
label=true;
for i=in-6:in+4
for j=jn-6:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if (label)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)&(R(in,jn+20)~=255)
R(in,jn)=2;
end;
esc=false;
else
for a=-1:1
for b=-1:1
i=in-a+b;
j=jn-a-b;
T(i,j)=255;
end;
end;
if (In<I_nguong)&(R(in-20,jn)~=255)&(R(in+20,jn)~=255)&(R(in,jn-20)~=255)
&(R(in,jn+20)~=255)
label=true;
for i=in-6:in+4
for j=jn-6:jn+4
if (R(i,j)==1)|(R(i,j)==2)|(R(i,j)==-2)|(R(i,j)==-3)
R(i,j)=-2;
label=false;
end;
end;
end;
if label
R(in,jn)=1;
end;
esc=false;
end;
end;
end;
%--------------------------------------------------------------------------
function phit = tangentDir(I,it,jt,anpha)
% Ham xac dinh phuong tiep tuyen phit tai diem (it,jt)
I=255-double(I);
A=0;
B=0;
C=0;
for h=it-(anpha-1)/2:it+(anpha-1)/2
for k=jt-(anpha-1)/2:jt+(anpha-1)/2
ahk=(-I(h-1,k-1)+I(h-1,k+1)+I(h+1,k+1)-I(h+1,k-1))/4;
bhk=(-I(h-1,k-1)-I(h-1,k+1)+I(h+1,k+1)+I(h+1,k-1))/4;
A=A+ahk^2;
B=B+bhk^2;
C=C+ahk*bhk;
end;
end;
if C>0
t1=1;
t2=(B-A)/(2*C)-sqrt(((B-A)/(2*C))^2+1);
elseif C<0
t1=1;
t2=(B-A)/(2*C)+sqrt(((B-A)/(2*C))^2+1);
elseif A<=B
t1=1;
t2=0;
else
t1=0;
t2=1;
end;
if t1==0
phit=pi/2;
else
phit=atan(t2/t1);
end;
%--------------------------------------------------------------------------
function [In in jn] = localmax(I,it,jt,phit,sigma)
% Ham xac dinh diem cua dai cuc bo (in,jn) theo phuong vuong goc voi phit
In=0;
d=[1/23 2/23 5/23 7/23 5/23 2/23 1/23];
in=it;
jn=jt;
LM=[];
io=[];
jo=[];
for x=-sigma:sigma
i=round(it+x*sin(phit+pi/2));
j=round(jt+x*cos(phit+pi/2));
% Io la gia tri trung bình cua I(i,j) voi hai diem lan can cua no
Io=(I(round(i-sin(phit)),round(j-cos(phit)))+I(i,j)+...
I(round(i+sin(phit)),round(j+cos(phit))))/3;
LM=[LM Io]; % LM la vetor chua cac gia tri trung binh tren doan sigma
io=[io i];
jo=[jo j];
end;
LMn(1:2*sigma+1)=0;
for x=4:2*sigma-2
LMn(x)=LM(x-3)*d(1)+LM(x-2)*d(2)+LM(x-1)*d(3)+LM(x)*d(4)+...
LM(x+1)*d(5)+LM(x+2)*d(6)+LM(x+3)*d(7);% Loc Gaussian
if In<LMn(x);
in=io(x);
jn=jo(x);
In=LMn(x);
end;
end;
5. Haøm normalize.m
I=double(I);
[m n]=size(I);
R(1:m,1:n)=255;
for i=1:N:m-N
for j=1:N:n-N
I_sub=I(i:i+N-1,j:j+N-1);
X=[];
for x=1:N
X=[X I_sub(x,:)];
end;
M=mean(X);
VAR=sqrt(var(X,1));
if VAR>6
for x=1:N
for y=1:N
if I_sub(x,y)>M
I_sub(x,y)=100+sqrt(100*(I_sub(x,y)-M)^2/VAR);
else
I_sub(x,y)=100-sqrt(100*(I_sub(x,y)-M)^2/VAR);
end;
end;
end;
I(i:i+N-1,j:j+N-1)=I_sub;
R(i:i+N-1,j:j+N-1)=0;
end;
end;
end;
I_nor=uint8(I);
6. Haøm gabor_filter.m
I=double(I);
[m n]=size(I);
for h=11:Wg:m-Wg-9
for k=11:Wg:n-Wg-9
%------ Lay anh con tu anh chinh de loc --------
p=0;
for i=h-10:h+Wg+9
p=p+1;
q=0;
for j=k-10:k+Wg+9
q=q+1;
I_sub(p,q)=I(i,j);
end;
end;
%--------- Doi ra mien tan so va loc ---------
O=tangentDir(I_sub,(Wg+11)/2,(Wg+11)/2,9);
I_sub=fftshift(fft2(I_sub));
G=fftshift(fft2(es_gabor(Wg+20,T,O,detax,detay)));
G=abs(G);
I_sub=abs(ifft2(fftshift(I_sub.*G)));
%------ Thay anh con da duoc loc tro lai anh chinh ------
p=10;
for i=h:h+Wg-1
p=p+1;
q=10;
for j=k:k+Wg-1
q=q+1;
I(i,j)=I_sub(p,q);
end;
end;
end;
end;
I_filted=uint8(I);
%--------------------------------------------------------------------------
function g = es_gabor(Wg,T,O,detax,detay)
% Ham MTF (modulation transfer function) cua bo loc Gabor
for x=-(Wg-1)/2:(Wg-1)/2
for y=-(Wg-1)/2:(Wg-1)/2
xO=x*cos(O)-y*sin(O);
yO=x*sin(O)+y*cos(O);
g(x+(Wg+1)/2,y+(Wg+1)/2)=exp(-((xO/detax)^2+(yO/detay)^2)/2)*cos(2*pi*xO/T);
end;
end;
%--------------------------------------------------------------------------
function phit = tangentDir(I,it,jt,anpha)
% Ham xac dinh phuong tiep tuyen phit tai diem (it,jt)
A=0;
B=0;
C=0;
for h=it-(anpha-1)/2:it+(anpha-1)/2
for k=jt-(anpha-1)/2:jt+(anpha-1)/2
ahk=(-I(h-1,k-1)+I(h-1,k+1)+I(h+1,k+1)-I(h+1,k-1))/4;
bhk=(-I(h-1,k-1)-I(h-1,k+1)+I(h+1,k+1)+I(h+1,k-1))/4;
A=A+ahk^2;
B=B+bhk^2;
C=C+ahk*bhk;
end;
end;
if C>0
t1=1;
t2=(B-A)/(2*C)-sqrt(((B-A)/(2*C))^2+1);
elseif C<0
t1=1;
t2=(B-A)/(2*C)+sqrt(((B-A)/(2*C))^2+1);
elseif A<=B
t1=1;
t2=0;
else
t1=0;
t2=1;
end;
if t1==0
phit=pi/2;
else
phit=atan(t2/t1);
end;
7. Haøm matching.m
function kq = matching(tem,db_tem,thres_P,thres_O)
% Ham doi sanh mau van tay "tem" (template) voi mot mau van tay trong
% database "db_tem" (database template). Mau phai co cau truc la mot
% mang 2 hang (hang 1 chua cac gia tri bien do, hang 2 chua cac gia tri
% goc cua cac diem dac trung) va N cot (N la so diem dac trung detect
% duoc tren anh van tay). Trong do 2 cot dau tien la vi tri cua hai diem
% delta (neu co).
% thres_po: nguong sai lech ve vi tri (position).
% thres_ph: nguong sai lech ve goc (orientation).
% kq: ket qua doi sanh - ty le phan tram su giong nhau
N_tem=length(tem(1,:));
N_dbtem=length(db_tem(1,:));
d_delta_right=sqrt((tem(1,1)-db_tem(1,1))^2+(tem(2,1)-db_tem(2,1))^2);
d_delta_left =sqrt((tem(1,2)-db_tem(1,2))^2+(tem(2,2)-db_tem(2,2))^2);
if d_delta_right<thres_P
N=N+5; % Mot diem delta bang nam lan diem minutiae
end;
if d_delta_left<thres_P
N=N+5; % Mot diem delta bang nam lan diem minutiae
end;
for i=3:N_tem
dmin=500;
jmin=0;
for j=3:N_dbtem
d=sqrt((tem(1,i)-db_tem(1,j))^2+(tem(2,i)-db_tem(2,j))^2);
if dmin>d
dmin=d;
jmin=j;
end;
end;
if (dmin<thres_P)&(abs(tem(3,i)-db_tem(3,jmin))<thres_O)
N=N+1; % Mot diem minutiae giong nhau
db_tem(1,jmin)=0;
db_tem(2,jmin)=0;
end;
end;
kq=N/(N_dbtem+8)*100;
8. Haøm feature_extracting.m
function [template core] = feature_extracting(I)
% Ham xay dung tap mau cho ham matching va ham sampling (vi tri cua cac
% diem dac trung co dang toa do decac)
[J R]=normalize(I(:,:,1),10);
O=orientation(I(:,:,1),R,9);
[core delta]=singularity(R,O,45,25);
J=(255-double(J))/255;
J=sigmoid(J,25,0.4);
J=uint8((1-J)*255);
J=gabor_filter(J,21,6,1,2);
Rm1=minutiae(J,R,core);
%-----------------------------------------------
[J R]=normalize(I(:,:,2),10);
J=(255-double(J))/255;
J=sigmoid(J,25,0.4);
J=uint8((1-J)*255);
J=gabor_filter(J,21,6,1,2);
Rm2=minutiae(J,R,core);
%-----------------------------------------------
[m n]=size(Rm1);
for i=1:m
for j=1:n
if (Rm1(i,j)==1)|(Rm1(i,j)==2)
label=false;
for x=i-7:i+7
for y=j-7:j+7
if (Rm2(x,y)==1)|(Rm2(x,y)==2)
label=true;
Rm2(x,y)=0;
end;
end;
end;
if ~label
Rm1(i,j)=0;
end;
end;
end;
end;
%------------------------------------------------
template=delta;
for i=1:m
for j=1:n
if (Rm1(i,j)==1)|(Rm1(i,j)==2)
mi1=i-core(1);
mi2=j-core(2);i3=0;
mi3=O(i,j)*180/pi;
mi=[mi1;mi2;mi3];
template=[template mi];
end;
end;
end;
%--------------------------------------------------------------------------
function y = sigmoid(x,a,b)
y=1./(1+exp(-a*(x-b)));
9. Haøm neural_template.m
N1=0;
N2=0;
N3=0;
N4=0;
mi(1:3,1:4)=0;
m=length(tem(1,:));
for i=3:m
if (tem(1,i)>=0)&(tem(2,i)>=0)
N1=N1+1;
mi(1,1)=mi(1,1)+tem(1,i);
mi(2,1)=mi(2,1)+tem(2,i);
elseif (tem(1,i)>=0)&(tem(2,i)<=0)
N2=N2+1;
mi(1,2)=mi(1,2)+tem(1,i);
mi(2,2)=mi(2,2)+tem(2,i);
elseif (tem(1,i)<=0)&(tem(2,i)<=0)
N3=N3+1;
mi(1,3)=mi(1,3)+tem(1,i);
mi(2,3)=mi(2,3)+tem(2,i);
else
N4=N4+1;
mi(1,4)=mi(1,4)+tem(1,i);
mi(2,4)=mi(2,4)+tem(2,i);
end;
end;
if N1~=0
mi(:,1)=abs(mi(:,1)/N1);
mi(3,1)=N1;
end;
if N2~=0
mi(:,2)=abs(mi(:,2)/N2);
mi(3,2)=N2;
end;
if N3~=0
mi(:,3)=abs(mi(:,1)/N3);
mi(3,3)=N3;
end;
if N4~=0
mi(:,4)=abs(mi(:,4)/N4);
mi(3,4)=N4;
end;
n_tem=[tem(1,1);tem(2,1);tem(1,2);tem(2,2);mi(:,1);mi(:,2);mi(:,3);mi(:,4)];
function W = training1(X,nuy,epsilon,D,n)
% Ham huan luyen mang neural perceptron don lop 16 ngo vao
% Ham tac dong la ham tuyen tinh
% X(N,K): ma tran cua cac vector mau ngo vao (K=1 mau, moi mau co N=16 gia tri)
% nuy: hang so hoc
% epsilon: nguong huan luyen
% W: cac vector trong so duoc huan luyen
function [V W] = training(X,H,nuy,epsilon)
% Ham huan luyen mang neural perceptron hai lop (mot lop an va mot lop ra)
% Ham tac dong lop an la ham sigmoid, ham tac dong lop ra la ham tuyen tinh
% X(N,K): ma tran cua cac vector mau ngo vao (K mau, moi mau co N gia tri)
% nuy: hang so hoc
% epsilon: nguong huan luyen
% V,W: cac vector trong so duoc huan luyen cua lop an va lop ra
[N K]=size(X);
%-------------- Tao gia tri khoi dong --------------------------
V(1:H,1:N)=0.1/(N-1);
W(1:H)=1;
for i=1:H
for j=1:N
if j==i
V(i,j)=-0.1;
end;
end;
if mod(i,2)==0 % i chan
W(i)=-1;
end;
end;
%---------------------------------------------------------------
epoch=0;
J=epsilon;
dnuy=0;
while (epoch<1000)&(J>=epsilon)
nuy=nuy+dnuy;
for k=1:K
%----------Lan truyen thuan--------------------------
for q=1:H
netq=V(q,:)*X(:,k);
z(q)=sigmoid(netq);
end;
%----------Lan truyen nguoc--------------------------
detaO=-W*z'; % Ham tac dong tuyen tinh
W=W+nuy*detaO*z;
for q=1:H
netq=V(q,:)*X(:,k);
detaHq=detaO*W(q)*5*exp(-0.25*netq)/(1+exp(-0.25*netq))^2;
V(q,:)=V(q,:)+nuy*detaHq*X(:,k)';
end;
%----------------------------------------------------
end;
for q=1:H
netq=V(q,:)*X(:,k);
z(q)=sigmoid(netq);
end;
y=W*z'
Jo=J;
J=(y^2)/2;
dJ=J-Jo;
if dJ<0
dnuy=0.01*nuy;
elseif dJ>10
dnuy=-0.1*nuy;
else
dnuy=0;
end;
epoch=epoch+1;
end;
%--------------------------------------------------------------------------
function y = sigmoid(x)
y=20/(1+exp(-0.25*x));
False_match=0;
False_non_match=0;
load('E:\neural matching\database\NDB.mat'); %load NDB
for n=1:NDB
filename=['E:\neural matching\template\matching\tem' num2str(n)];
load(filename,'matching_tem'); % load matching_tem
match_min=threshold;
j_min=0;
for j=1:NDB
filename=['E:\neural matching\database\1\db' num2str(j)];
load(filename); % load W
match=W*matching_tem(:,i);
if match<match_min
match_min=match;
j_min=j;
end;
end;
if j_min~=0
if j_min~=n
False_match=False_match+1;
end;
else
False_non_match=False_non_match+1;
end;
end;
FAR=False_match/(NDB);
FRR=False_non_match/(NDB);
[13] Anil Jain, Lin Hong, Yifei Wan, ”Fingerprint Image Enhancement:
Algorithm and Performance Evaluation ”, IEEE Transactions on Pattern
Analysis and Machine Intelligence, Vol. 20, No. 8, 1998.
[14] Anil Jain, Lin Hong, Sharathcha Pankanti, Ruud Bolle,”Fingerprint
Enhancement”.
[15] D.Maltoni, D.Maio, A.K.Jain, S.Prabhakar, ”Fingerprint Scanners and their
Features” Extract from “Handbook of Fingerprint Recognition”, Springer,
New York, 2003.
[16] “Evaluation of Fingerprint Recognition Technologies – BioFinger”,
www.bsi.bund.dc
Từ tháng 9/1996 đến tháng 11/2001: Học tại Trường Đại Học Bách Khoa, Đại Học
Quốc Gia Tp.HCM.