You are on page 1of 18

TAÙCH BIEÂN AÛNH MAØU

TAÙCH BIEÂN AÛNH MAØU


I. Cô sôû lyù thuyeát taùch bieân
Taùch bieân laø phöông phaùp thoâng duïng nhaát ñeå taùch theo nghóa giaùn ñoaïn
trong caùc giaù trò cöôøng ñoä. Söï giaùn ñoaïn ñöôïc taùch söû duïng ñaïo haøm baäc
nhaát vaø baäc hai. Ñaïo haøm baäc nhaát löïa choïn trong xöû lyù aûnh laø gradient
(ñoä doác). Gradient cuûa haøm 2-D f ( x, y ) ñöôïc ñònh nghóa döôùi daïng vectô
 f 
G x   
f      fx 
G y   
 y 
Bieân ñoä cuûa vectô naøy:

f  mag (f )  G x2  G y2 1/ 2

  f / x  2   f / y  2 
1/ 2

Ñeå tính toaùn ñôn giaûn, con soá naøy ñöôïc xaáp xæ baèng caùch söû duïng giaù trò
tuyeät ñoái
f  G x  G y
Xaáp xæ naøy vaãn coøn döôùi daïng caùc ñaïo haøm: ñoù laø, chuùng baèng 0 trong
caùc vuøng coù cöôøng ñoä khoâng ñoåi, vaø giaù trò chuùng tyû leä vôùi baäc cuûa
söï thay ñoåi cöôøng ñoä trong vuøng coù caùc giaù trò pixel bieán thieân. Noù ñöôïc
xem laø bieân ñoä cuûa gradient hoaëc xaáp xæ ñôn giaûn cuûa noù döôùi daïng
“gradient”.
Ñaëc tính cô baûn cuûa vectô gradient laø caùc ñieåm cuûa noù laø höôùng coù tyû leä
thay ñoåi haøm f taïi toïa ñoä ( x, y ) lôùn nhaát. Goùc xaûy ra tyû leä thay ñoåi lôùn
nhaát laø:
 Gy 
 ( x, y )  tan 1  

 Gx 
Moät trong nhöõng phöông phaùp then choát ñöa ra laø öôùc ñoaùn ñaïo haøm G x
vaø G y theo phöông phaùp soá. Caùc phöông phaùp khaùc nhau ñöôïc duøng bôûi
haøm edge ñöôïc thaûo luaän sau trong phaàn naøy.
Ñaïo haøm baäc hai trong xöû lyù aûnh ñöôïc tính söû duïng toaùn töû Laplace. Toaùn
töû Laplace cuûa haøm 2-D f ( x, y ) ñöôïc cho döôùi daïng vi phaân baäc hai nhö sau:
 2 f ( x, y )  2 f ( x, y )
 2 f ( x, y )  
x 2 y 2
Toaùn töû Laplace ít khi ñöôïc duøng ñeå taùch bieân vì, vi phaân baäc hai, deã bò
aûnh höôûng bôûi nhieãu, bieân ñoä cuûa noù sinh ra caùc bieân keùp, vaø khoâng
theå taùch höôùng bieân. Tuy nhieân , toaùn töû Laplace coù theå laø phaàn boå sung
maïnh khi söû duïng keát hôïp vôùi kyõ thuaät taùch bieân khaùc. Ví duï, maëc duø
caùc bieân keùp khoâng thích hôïp ñeå taùch bieân tröïc tieáp, ñaëc tính naøy coù theå
duøng ñeå ñònh vò bieân.
YÙ töôûng cô baûn ñaèng sau taùch bieân laø tìm caùc nôi trong aûnh coù cöôøng ñoä
thay ñoåi nhanh, söû duïng moät trong hai tieâu chuaån toång quaùt sau:

1
TAÙCH BIEÂN AÛNH MAØU

Tìm caùc nôi ñaïo haøm baäc nhaát cuûa cöôøng ñoä saùng coù bieân ñoä
hôn moät ngöôõng.
Tìm caùc nôi ñaïo haøm baäc hai cuûa cöôøng ñoä saùng coù choã cheùo 0.
Caùc haøm bieân cuûa IPT (Image Processing Toolbox) cung caáp moät soá öôùc
löôïng ñaïo haøm döïa treân caùc tieâu chuaån môùi noùi tôùi. Ñoái vôùi moät soá
trong nhöõng öôùc löôïng naøy, coù theå xaùc ñònh boä taùch bieân coù nhaïy vôùi
caùc bieân ngang hay bieân doïc hay khoâng hoaëc caû hai. Caáu truùc toång quaùt
cuûa haøm naøy laø
[g, t] = edge (f, ‘method’, parameters)
Trong ñoù f laø aûnh ñaàu vaøo, method laø moät trong caùc phöông phaùp ñöôïc
lieät keâ trong baûng 1, vaø parameters laø caùc tham soá theâm vaøo ñöôïc giaûi
thích sau. Trong ngoõ ra, g laø maûng logic vôùi caùc giaù trò 1 taïi caùc vò trí caùc
ñieåm bieân ñöôïc taùch vaø 0 khi khoâng ñöôïc taùch. Tham soá t laø tuøy choïn, noù
cho ngöôõng ñöôïc duøng bôûi bieân ñeå xaùc ñònh caùc giaù trò gradient ñuû maïnh
ñeå ñöôïc goïi laø caùc ñieåm bieân.
Baûng 1
Boä taùch bieân Caùc ñaëc tính cô baûn
Sobel Tìm bieân duøng xaáp xæ Sobel vôùi ñaïo haøm cho trong
hình 1(b)
Prewitt Tìm bieân duøng xaáp xæ Prewitt vôùi ñaïo haøm cho
trong hình 1(c)
Roberts Tìm bieân duøng xaáp xæ Roberts vôùi ñaïo haøm cho
trong hình 1(d)
Laplacian of a Tìm bieân baèng caùch tìm ñieåm cheùo 0 sau khi loïc
Gaussian (LoG) qua boä loïc Gauss

Zero crossings Tìm bieân baèng caùch tìm ñieåm cheùo 0 sau khi loïc
qua boä loïc ñöôïc xaùc ñònh bôûi ngöôøi söû duïng
Canny Tìm bieân baèng caùch tìm caùc cöïc ñaïi ñòa phöông
cuûa gradient f ( x, y ) . Gradient ñöôïc tính toaùn duøng
ñaïo haøm cuûa boä loïc Gauss. Phöông phaùp duøng hai
ngöôõng ñeå taùch caùc bieân maïnh vaø yeáu, vaø goäp
caùc bieân yeáu ôû ngoõ ra chæ khi chuùng ñöôïc keát
noái vôùi caùc bieân maïnh. Do ñoù, phöông phaùp naøy
thích hôïp hôn ñeå taùch caùc bieân yeáu thaät söï.

I.1.Boä taùch bieân Sobel

2
TAÙCH BIEÂN AÛNH MAØU

Boä taùch bieân Sobel söû duïng caùc maët naï trong hình 1(b) ñeå xaáp xæ ñaïo haøm
baäc nhaát G x vaø G y . Noùi caùch khaùc, gradient taïi ñieåm taâm trong moät laân
caän ñöôïc tính theo boä taùch Sobel:

g  G x2  G y2  1/ 2
 {[( z 7  2 z 8  z 9 )  ( z1  2 z 2  z 3 )] 2  [( z 3  2 z 6  z 9 )  ( z1  2 z 4  z 7 )] 2 }1 / 2
Khi ñoù, ta noùi raèng vò trí (x,y) laø pixel bieân neáu g T taïi vò trí ñoù, trong ñoù
T laø moät ngöôõng ñöôïc chæ ñònh.

z1 z2 z3

z4 z5 z6

z7 z8 z9
Image neighborhood

-1 2 -1 -1 0 1

0 0 0 -2 0 2

1 1 1 -1 0 1
Sobel

Gx  ( z 7  2 z8  z9 )  ( z1  2 z 2  z3 ) G y  ( z3  2 z 6  z9 )  ( z1  2 z 4  z 7 )

-1 -1 -1 -1 0 1

0 0 0 -1 0 1

1 1 1 -1 0 1
Prewitt

Gx  ( z7  z8  z9 )  ( z1  z 2  z3 ) G y  ( z3  z6  z9 )  ( z1  z 4  z 7 )

-1 0 0 -1

0 1 1 0
Roberts

G x  z9  z5 G y  z8  z 6
Hình 1. Moät soá maët naï taùch bieân vaø ñaïo haøm baäc nhaát chuùng
hieän thöïc
Boä taùch bieân Sobel coù theå ñöôïc thöïc hieän baèng caùch loïc moät aûnh, f,
(duøng imfilter) vôùi maët naï beân traùi trong hình 1(b), loïc laïi f vôùi maët naï
khaùc, bình phöông caùc giaù trò pixel vôùi moãi aûnh ñöôïc loïc, coäng hai keát

3
TAÙCH BIEÂN AÛNH MAØU

quaû, vaø tính caên baäc hai. Caùc chuù thích töông töï ñoái vôùi caùc phaàn thöù 2
vaø thöù 3 trong baûng 1. Haøm edge ñôn giaûn caùc goùi toaùn töû tröôùc thaønh
moät haøm goïi vaø theâm vaøo caùc daëc tính khaùc, chaúng haïn nhö chaáp nhaän
moät giaù trò aûnh ngöôõng hoaëc xaùc ñònh ngöôõng moät caùch töï ñoäng. Theâm
vaøo ñoù, edge chöùa caùc kyõ thuaät taùch bieân khoâng hieän thöïc tröïc tieáp ñöôïc
baèng imfilter
Cuù phaùp goïi boä taùch Sobel toång quaùt laø
[g , t ] = edge(f, ‘sobel’, T, dir)
Trong ñoù f laø aûnh ñaàu vaøo, T laø ngöôõng ñöôïc chæ ñònh vaø dir xaùc ñònh
höôùng caàn tính taùch bieân: ‘ngang’, ‘doïc’ hoaëc caû hai. Nhö ñaõ noùi, g laø aûnh
logic chöùa giaù trò 1 taïi nhöõng nôi bieân ñöôïc taùch vaø giaù trò 0 taïi nhöõng nôi
bieân ñöôïc taùch. Tham soá t trong ngoõ ra laø tuøy choïn. Noù laø giaù trò ngöôõng
ñöôïc duøng bôûi edge. Neáu T döôïc chæ ñònh thì t = T. Maët khaùc neáu T khoâng
ñöôïc chæ ñònh (hoaëc ñeå roãng []), f seõ ñaët t baèng vôùi ngöôõng do noù töï
ñoäng xaùc ñònh vaø sau ñoù söû duïng cho vieäc taùch bieân. moät trong nhöõng lyù
do cô baûn cho vieäc goäp t trong tham soá ngoõ ra laø ñeå nhaän giaù trò khôûi taïo
cho ngöôõng. Haøm edge söû duïng boä taùch Sobel maëc ñònh neáu cuù phaùp
g = edge (f), hoaëc laø [g, t] = edge(f).

I.2.Boä taùch bieân Prewitt

Boä taùch bieân Prewitt söû duïng maët naï trong hình 1(c) ñeå xaáp xæ theo phöông
phaùp soá ñaïo haøm baäc nhaát G x vaø G y . Cuù phaùp goïi toång quaùt laø:
[g , t ] = edge(f, ‘prewitt’, T, dir)
Tham soá haøm naøy ñoàng nhaát vôùi tham soá Sobel. Boä taùch Prewitt hôi ñôn
giaûn hôn ñeå hieän thöïc baèng maùy tính so vôùi boä taùch Sobel, nhöng noù coù
khuynh höôùng sinh ra moät chuùt nhieãu. (Noù coù theå ñöôïc theå hieän qua heä soá
2 trong boä taùch bieân laøm trôn)

I.3.Boä taùch bieân Roberts

Boä taùch bieân Roberts söû duïng maët naï trong hình 1(d) ñeå xaáp xæ theo phöông
phaùp soá ñaïo haøm baäc nhaát G x vaø G y . Cuù phaùp goïi toång quaùt laø:
[g , t ] = edge(f, ‘roberts’, T, dir)
Tham soá haøm naøy ñoàng nhaát vôùi tham soá Sobel. Boä taùch Roberts laø moät
trong nhöõng boä taùch bieân xöa nhaát trong xöû lyù aûnh soá vaø theo hình 1(d),
noù cuõng ñôn giaûn nhaát. Boä taùch bieân naøy ñöôïc duøng ít hôn ñaùng keå caùc
boä taùch khaùc do chöùc naêng giôùi haïn cuûa noù (ví duï, noù khoâng ñoái xöùng
vaø khoâng theå ñöôïc toång quaùt hoùa ñeå taùch bieân laø thöøa soá cuûa 45 0). Tuy
nhieân, noù vaãn ñöôïc duøng thöôøng xuyeân trong hieän thöïc phaàn cöùng khi tính
ñôn giaûn vaø toác ñoä laø caùc yeáu toá chi phoái.

I.4.Boä taùch bieân Laplace cuûa haøm Gauss (LoG)

Xeùt haøm Gauss

4
TAÙCH BIEÂN AÛNH MAØU

r2

h( r )   e 2 2

Trong ñoù r 2  x 2  y 2 vaø  laø ñoä leäch chuaån. Ñaây laø haøm trôn, neáu noù
chaäp vôùi moät aûnh, seõ laøm môø aûnh. Ñoä môø ñöôïc xaùc ñònh bôûi giaù trò 
. Toaùn töû Laplace cuûa haøm naøy (ñaïo haøm baäc 2 theo r):
r2
2  r 2   2   2 2
 h(r )    e
 
4

Vôùi nhöõng lyù do roõ raøng, haøm naøy goïi laø toaùn töû Laplace cuûa haøm
Gauss (LoG). Vì ñaïo haøm baäc hai laø toaùn töû tuyeán tính, chaäp (loïc) vôùi moät
aûnh baèng  2 h(r ) gioáng nhö ñaàu tieân chaäp aûnh vôùi haøm trôn vaø sau ñoù
tính keát quaû cuûa toaùn töû Laplace. Ñaây laø chìa khoùa khaùi nieäm cô baûn cuûa
boä taùch LoG. Chuùng ta chaäp aûnh baèng  2 h(r ) bieát noù coù 2 taùc ñoäng: noù
laøm mòn aûnh (do ñoù giaûm nhieãu) vaø noù tính toaùn töû Laplace, laøm cong
moät aûnh bieân keùp. Ñònh vò caùc bieân sau ñoù tìm caùc ñieåm giao zero giöõa
caùc bieân keùp. Cuù phaùp goïi toång quaùt laø:
[g , t ] = edge(f, ‘log’, T, sigma)
Trong ñoù sigma laø ñoä leäch chuaån vaø caùc tham soá coøn laïi gioáng phaàn
tröôùc. Giaù trò maëc ñònh cuûa sigma laø 2. Nhö ñaõ noùi, boû qua baát cöù bieân
naøo khoâng lôùn hôn T. Neáu T khoâng ñöôïc cho, hoaëc roãng [ ], edge choïn giaù
trò moät caùch töï ñoäng. Ñaët T töø 0 taïo caùc bieân laø caùc ñöôøng vieàn kín,
moät ñaëc tính quen thuoäc cuûa phöông phaùp LoG.

I.5.Boä taùch bieân ñieåm giao zero

Boä taùch bieân naøy döïa treân khaùi nieäm gioáng phöông phaùp LoG, nhöng pheùp
chaäp ñöôïc thöïc hieän söû duïng haøm loïc ñöôïc chæ ñònh H. Cuù phaùp goïi haøm
[g , t ] = edge(f, ‘zerocross’, T, H)
Caùc tham soá khaùc ñöôïc giaûi thích nhö boä taùch LoG

5
TAÙCH BIEÂN AÛNH MAØU

I.6.Boä taùch bieân Canny

Boä taùch bieân Canny (Canny [1986]) laø boä taùch bieân maïnh nhaát cung caáp
bôûi haøm edge. Coù theå toùm taét phöông phaùp naøy nhö sau:
1. AÛnh ñöôïc laøm trôn söû duïng moät boä loïc Gauss vôùi ñoä leäch chuaån
 , ñeå giaûm nhieàu
g ( x, y )  G x2  G y2  vaø
1/ 2
2. Gradient cuïc boä, höôùng bieân
Gy
 ( x, y )  tan 1 ( ) , ñöôïc tính toaùn taïi moãi ñieåm. Moät trong 3 kyõ
Gx
thuaät ñaàu trong baûng 10.1 ñeå tính G x vaø G y . Moät ñieåm bieân ñöôïc
ñònh nghóa laø ñieåm coù ñoä daøi laø cöïc ñaïi ñòa phöông theo höôùng
cuûa gradient.
3. Ñieåm bieân ñöôïc xaùc ñònh (2) taêng leân ñeán caùc ñænh trong gradient
bieân ñoä aûnh. Sau ñoù thuaät toaùn tìm ñænh cuûa caùc ñænh naøy vaø
ñaët giaù trò 0 vaøo taát caû pixel khoâng thaät söï naèm treân ñænh vì vaäy
taïo ra moät ñöôøng moûng ôû ngoõ ra, moät quaù trình ñöôïc bieát laø söï
neùn laïi khoâng cöïc ñaïi. Caùc pixel ñænh ñöôïc ñaët ngöôõng duøng hai
ngöôõng, T1 vaø T2 . Caùc pixel ñænh lôùn hôn T2 ñöôïc goïi laø caùc
pixel bieân “maïnh”. Caùc pixel ñænh naèm giöõa T1 vaø T2 ñöôïc goïi laø
caùc pixel bieân “yeáu”.
4. Cuoái cuøng, thuaät toaùn thöïc hieän bieân keát noái baèng caùch keát hôïp
caùc pixel yeáu maø coù daïng keát noái-8 vôùi caùc pixel maïnh.

Cuù phaùp boä taùch bieân Canny laø:


[g , t ] = edge(f, ‘canny’, T, sigma)
Trong ñoù T laø moät vectô, T   T1 T2  laø 2 ngöôõng ñöôïc giaûi thích trong
böôùc 3 cuûa thuû tuïc tröôùc vaø sigma laø ñoä leäch chuaån cuûa boä loïc laøm
trôn. Neáu t goäp vaøo thoâng soá ngoõ ra, noù laø vectô 2 phaàn töû chöùa 2
giaù trò ngöôõng ñöôïc duøng bôûi thuaät toaùn. Cuù phaùp ñôn giaûn ñöôïc
giaûi thích nhö caùc phöông phaùp khaùc, bao goàm vieäc töï ñoäng tính toaùn T
neáu noù khoâng ñöôïc cung caáp. Giaù trò maëc ñònh cuûa sigma laø 1.

6
TAÙCH BIEÂN AÛNH MAØU

II.Cô sôû taùch bieân aûnh maøu

II.1. Ñaëc tính aûnh maøu trong Matlab

Coâng cuï xöû lí aûnh maøu trong Matlab thöïc hieän hai kieåu aûnh maøu hoaëc laø
indexed images hoaëc laø RGB images.

II.1.1 AÛnh RGB

AÛnh RGB laø moät maûng pixel maøu M x N x 3. Moãi pixel maøu laø söï keát hôïp
cuûa ba thaønh maøu red, green vaø blue cuûa aûnh maøu taïi moät vò trí khoâng gian
baát kì (xem hình 2).

Hình 2. Caùch maø nhöõng pixels cuûa moät aûnh RGB ñöôïc hình
thaønh töø caùc pixels cuûa ba aûnh thaønh phaàn

Moät aûnh RGB coù theå ñöôïc xem nhö laø söï saép xeáp cuûa ba aûnh möùc xaùm
maø khi cho vaøo caùc ngoõ vaøo red, green vaø blue cuûa moät maøn hình maøu seõ
taïo ra moät aûnh maøu treân maøn hình. Ba aûnh ñöôïc hình thaønh töø moät aûnh
maøu RGB laø caùc aûnh thaønh phaàn red, green vaø blue. Lôùp döõ lieäu cuûa caùc
aûnh thaønh phaàn xaùc ñònh mieàn giaù trò cuûa chuùng. Neáu moät aûnh RGB
thuoäc lôùp double thì mieàn giaù trò laø [0, 1]. Töông töï ta coù mieàn giaù trò laø [0,
255] hoaëc [0, 65535] töông öùng vôùi caùc aûnh maøu RGB thuoäc lôùp uint8 hoaëc
uint16. Soá löôïng bit ñöôïc söû duïng ñeå ñaïi dieän cho caùc giaù trò pixel cuûa
nhöõng aûnh thaønh phaàn xaùc ñònh chieàu saâu bit cuûa moät aûnh RGB. Ví duï
moãi aûnh thaønh phaàn laø moät aûnh 8 bit suy ra aûnh RGB töông öùng seõ laø 24
bit. Noùi chung soá bit trong caùc aûnh thaønh phaàn laø nhö nhau. Soá maøu coù theå
coù trong moät aûnh RGB laø (2b )3 , trong ñoù b laø soá bit trong moãi aûnh thaønh
phaàn. Ví duï tröôøng hôïp 8 bit thì soá maøu laø 16,777,216.

7
TAÙCH BIEÂN AÛNH MAØU

Giaû söû fR, fG vaø fB ñaïi dieän cho ba aûnh thaønh phaàn RGB. Moät aûnh RGB
ñöôïc hình thaønh töø nhöõng aûnh naøy baèng caùch söû duïng toaùn töû cat
(concatenate) ñeå saép xeáp caùc aûnh naøy:
rgb_image = cat(3, fR,fG,fB)
Khoâng gian maøu RGB thöôøng ñöôïc bieåu dieãn döôùi daïng hình hoïc nhö laø
moät khoái maøu RGB (noù ñöôïc moâ taû hình 2). Caùc maøu sô caáp (red, green,
vaø blue) vaø caùc maøu thöù caáp ( cyan, magenta, vaø yellow) ñöïôc boá trí taïi caùc
ñænh nhö hình 3.

Hình 3. Sô ñoà nguyeân lyù cuûa hình hoäp maøu RGB bieåu dieãn caùc
maøu sô caáp vaø thöù caáp taïi caùc ñænh. Caùc ñieåm doïc theo
ñöôøng cheùo chính coù giaù trò xaùm töø ñen taïi goác toïa ñoä
ñeán traéng taïi ñieåm (1,1,1)

II.1.2. AÛnh Index

AÛnh index coù hai thaønh phaàn : moät ma traän döõ lieäu soá nguyeân, X, vaø moät
ma traän baûn ñoà maøu, map. Ma traän map laø moät maûng m x 3 cuûa lôùp double
chöùa caùc giaù trò trong mieàn [0 1]. Chieàu daøi, m, cuûa map baèng vôùi soá maøu
maø noù ñònh coù. Moãi haøng cuûa map xaùc ñònh caùc thaønh phaàn red, green vaø
blue cuûa töøng maøu ñôn. Maøu cuûa moãi pixel ñöôïc xaùc ñònh baèng caùch söû
duïng giaù trò nguyeân töông öùng cuûa ma traän X chæ ñeán map (baûn ñoà maøu).
Neáu X thuoäc lôùp double thì taát caû nhöõng thaønh phaàn cuûa noù vôùi nhöõng
giaù trò nhoû hôn hoaëc baèng 1 seõ chæ ñeán haøng ñaàu cuûa map, taát caû nhöõng
thaønh phaàn vôùi giaù trò 2 chæ ñeán haøng thöù 2 vaø vaân vaân. Neáu X thuoäc
lôùp uint8 hoaëc uint16 thì taát caû nhöõng thaønh phaàn vôùi giaù trò 0 chæ ñeán

8
TAÙCH BIEÂN AÛNH MAØU

haøng ñaàu cuûa map, taát caû nhöõng thaønh phaàn vôùi giaù trò 1 chæ ñeán haøng 2
vaø vaân vaân. Nhöõng khaùi nieäm naøy ñöôïc moâ taû trong hình 4.

Hình 4. Caùc phaàn töû cuûa moät aûnh index. Chuù yù raèng giaù trò
cuûa moät phaàn töû cuûa maûng soá nguyeân X xaùc ñònh thöù töï
haøng trong baûn ñoà maøu. Moãi haøng chöùa moät boä ba RGB
vaø L laø toång soá haøng.

Ñeå hieån thò moät aûnh index ta coù theå vieát:


>> imshow(X,map)
hoaëc caùch khaùc:
>> image(X)
>> colormap(map)
Moät baûn ñoà maøu ñöôïc löu tröõ vôùi moät aûnh index vaø töï ñoäng ñöôïc load
vôùi aûnh khi haøm imread ñöôïc söû duïng ñeå load aûnh.

Ñoâi khi raát caàn thieát ñeå xaáp xæ moät aûnh index thaønh aûnh index vôùi ít soá
maøu hôn. Ñeå thöïc hieän noù ta coù theå duøng haøm imapprox:
[Y, newmap] = imapprox(X, map, n)
Haøm naøy traû veà maûng Y vôùi baûn ñoà maøu môùi newmap maø coù nhieàu
nhaát laø n maøu. Maûng ñaàu vaøo X coù theå thuoäc lôùp uint8, uint16, hoaëc
double. Ngoõ ra Y thuoäc lôùp uint8 neáu n nhoû hôn hoaëc baèng 256. Neáu n lôùn
hôn 256, Y thuoäc lôùp double.
Khi soá haøng trong baûn ñoà maøu nhoû hôn soá giaù trò nguyeân phaân bieät trong
X, nhieàu giaù trò khaùc nhau trong X seõ ñöôïc hieån thò vôùi cuøng maøu trong
baûn ñoà maøu. Moät aûnh lung tung cuõng seõ ñöôïc hieån thò neáu chieàu daøi cuûa
baûn ñoà maøu vöïôt quaù taàm cho pheùp cuûa nhöõng giaù trò cuûa caùc thaønh
phaàn cuûa X.

9
TAÙCH BIEÂN AÛNH MAØU

Coù vaøi caùch ñeå xaùc ñònh moät baûn ñoà maøu. Coù theå söû duïng leänh sau:
>> map(k , : ) = [r(k) g(k) b(k)]
trong ñoù, [r(k) g(k) b(k)] laø nhöõng giaù trò RGB taïi vò trí haøng thöù k cuûa baûn
ñoà maøu.
Baûng 2 cho nhöõng giaù trò RGB ñoái vôùi moät soá maøu cô baûn. Baát cöù ba
ñònh daïng naøo trong baûng ñeàu coù theå ñöôïc söû duïng ñeå xaùc ñònh maøu. Ví
duï, maøu neàn coù theå ñöôïc thay ñoåi thaønh xanh luïcbaèng caùch duøng moät
trong ba caâu leänh sau:
>> whitebg(‘g’)
>> whitebg(‘green’)
>> whitebg([0 1 0])
Caùc maøu theâm vaøo theå hieän trong baûng 2 lieân quan ñeán caùc giaù trò thaäp
phaân. Ví duï [0.5 0.5 0.5] laø maøu xaùm, [0.5 0 0] laø maøu ñoû toái, [0.49 1 0.83]
laø maøu ngoïc xanh bieån.
Matlab cung caáp moät soá baûng ñoà maøu ñöôïc ñònh nghóa tröôùc, truy caäp söû
duïng caâu leänh
>> colormap( map_name)
trong ñoù noù seõ ñaët baûn ñoà maøu thaønh ma traän map_name. Ví duï:
>> colormap(copper) trong ñoù copper laø moät trong soá baûn ñoà maøu
ñöôïc Matlab ñònh nghóa tröôùc. Maøu trong baûn ñoà naøy thay ñoåi raát mòn töø
ñen ñeán maøu ñoàng saùng. Neáu aûnh cuoái cuøng ñöôïc hieån thò laø moät aûnh
index, leänh naøy seõ thay ñoåi baûn ñoà maøu cuûa noù thaønh copper. Theo moät
löïa choïn aûnh coù theå hieån thò tröïc tieáp vôùi baûn ñoà maøu mong muoán:
>>imshow( X, copper)
Moät soá baûn ñoà maøu coù saün trong Matlab. Chieàu daøi (soá maøu) cuûa caùc
baûn ñoà naøy coù theå ñöôïc xaùc ñònh baèng caùch göûi keøm theo trong daáu
ngoaëc. Ví duï: gray(16) taïo moät baûn ñoà maøu vôùi 16 möùc xaùm.
Baûng 2. Caùc giaù trò RGB cuûa moät soá maøu cô baûn

Teân ñaày Teân vieát taét Giaù trò RGB


ñuû
Black k [0 0 0]
Blue b [0 0 1]
Green g [0 1 0]
Cyan c [0 1 1]
Red r [1 0 0]
Magenta m [1 0 1]
Yellow y [1 1 0]
White w [1 1 1]

II.2. Taùch bieân aûnh maøu duøng phöông phaùp Gradient

Phöông phaùp thöôøng duøng ñeå xaáp xæ caùc ñaïo haøm laø sai soá giöõa caùc
pixel trong caùclaân caän nhoû trong moät aûnh. Hình 1 bieåu dieãn moät laân caän

10
TAÙCH BIEÂN AÛNH MAØU

kích thöôùc 3 x3 trong ñoù z laø giaù trò pixel. Moät xaáp xæ cuûa ñaïo haøm rieâng
phaàn theo x (phöông doïc) taïi taâm ñieåm cuûa vuøng (z 5) ñöôïc cho bôûi ñoä
cheânh leäch:
Gx   z7  2 z8  z9    z1  2 z 2  z3 
Töông töï ñaïo haøm theo phöông y ñöôïc xaáp xæ bôûi ñoä cheânh leäch
G y   z3  2 z6  z9    z1  2 z 4  z7 
Caùc con soá naøy ñöôïc tính deã daøng taïi moïi ñieåm trong aûnh baèng pheùp
chaäp (söû duïng haøm imfilter) aûnh laàn löôït vôùi töøng maët naï trong hình 1. Sau
ñoù xaáp xæ cuûa ñaùp öùng gradient aûnh thu ñöôïc baèng caùch coäng hai trò tuyeät
ñoái cuûa hai aûnh ñöôïc chaäp. Caùc maët naï ñöôïc noùi tôùi laø caùc maët naï
Sobel, coù theå ñöôïc taïo ra duøng haøm fspecial.
Gradient ñöôïc tính toaùn theo caùch ñöôïc moâ taû laø moät trong nhöõng phöông
phaùp thöôøng duøng ñeå taùch bieân aûnh xaùm, ñaõ ñöôïc thaûo luaän trong phaàn
I. Quan taâm cuûa ta luùc naøy laø tính gradient trong khoâng gian maøu RGB. Tuy
nhieân phöông phaùp vöøa môùi ñöa ra coù theå öùng duïng ñöôïc trong khoâng gian
2D nhöng khoâng môû roäng ñöôïc cho khoâng gian coù chieàu lôùn hôn. Caùch duy
nhaát ñeå söû duïng noù ñoái vôùi caùc aûnh RGB laø tính gradient cuûa moãi thaønh
phaàn maøu roài sau ñoù keát hôïp caùc keát quaû. Khoâng may thay, theo phaàn sau,
ñieàu naøy khoâng gioáng nhö vieäc tính toaùn caùc khoâng gian vectô RGB moät
caùch tröïc tieáp.
Do ñoù vaán ñeà laø ñònh nghóa gradient ( bieân ñoä vaø höôùng) cuûa vectô c ñöôïc
ñònh nghóa:
 c R ( x, y )   R ( x, y ) 
c( x, y )  cG ( x, y )  G ( x, y )
   
c B ( x, y )   B( x, y ) 
Theo sau laø moät trong nhöõng caùch maø khaùi nieäm gradient ñöôïc môû roäng
vôùi caùc haøm vectô. Laïi noùi haøm voâ höôùng f(x,y) gradient laø moät vectô maø
noù chæ höôùng cuûa tæ leä thay ñoåi cöïc ñaïi taïi toïa ñoä (x,y).
Laáy r, g vaø b laø caùc vectô ñôn vò theo caùc truïc R, G vaø B cuûa khoâng gian
maøu RGB vaø ñònh nghóa caùc vectô :
R G B
u r g b
x x x
R G B
v r g b
y y y

11
TAÙCH BIEÂN AÛNH MAØU

Ñaët caùc soá g xx , g xy vaø g yy ñöôïc ñònh nghóa nhö sau:


2 2 2
R G B
g xx  u  u  u T u   
x x x
2 2 2
R G B
g yy  v  v  v T v   
y y y
R R G G B B
g xy  u  v  u T v   
x y x y x y
Nhôù raèng R, G vaø B vaø caùc giaù trò g laø caùc haøm cuûa x vaø y. Duøng chuù
yù naøy nhö ñöôïc theå hieän trong Di Zenzo [1986] noùi raèng höôùng cuûa tæ leä
thay ñoåi cöïc ñaïi cuûa c(x,y) laø moät haøm (x,y)
1  2 g xy 
  x, y   tan 1  
2   g xx  g yy  
vaø giaù trò cuûa tæ leä thay ñoåi (bieân ñoä cuûa gradient) theo caùc höôùng ñöôïc
cho bôûi caùc phaàn töû cuûa

Chuù yù raèng  ( x, y ) vaø F ( x, y ) laø caùc aûnh coù cuøng kích côõ vôùi aûnh
ñaàu vaøo. Caùc phaàn töû  ( x, y ) laø caùc goùc taïi moãi ñieåm gradient ñöôïc tính
va F ( x, y ) ølaø aûnh gradient .
1/ 2
 
F  x, y     g xx  g yy    g xx  g yy  cos 2  2 g xy sìn2 
1 
2 
Vì tan  tan(   ) neáu  0 laø moät nghieäm cuûa phöông trình tan-1 tröôùc, vì vaäy
 0   / 2 . Theâm vaøo ñoù F ( x, y )  F   ( x, y ) , vì theá F caàn ñöôïc tính chæ vôùi
caùc giaù trò cuûa  trong nöûa khoaûng [0,  ) . Söï thaät laø phöông trình tan -1 cho
hai giaù trò leäch nhau 900 nghóa laø phöông trình naøy nghieäm ñuùng vôùi moãi
caëp (x,y) coù höôùng vuoâng goùc nhau. Doïc theo moät trong nhöõng höôùng naøy
F laø cöïc ñaïi, vaø noù seõ laø cöïc tieåu neáu theo höôùng coøn laïi, vì vaäy keát
quaû nhaän ñöôïc baèng caùch choïn giaù trò lôùn nhaát taïi moãi ñieåm. Ñaïo haøm
cuûa caùc keát quaû naøy hôi daøi, vaø chuùng ta seõ ít ñaït ñöôïc muïc ñích cô baûn
cuûa thaûo luaän hieän taïi cuûa chuùng tabaèng caùch chi tieát noù ôû ñaây. Ñaïo
haøm rieâng phaàn coù theå ñöôïc tính toaùn baèng toaùn töû Sobel ñaõ thaûo luaän
tröôùc. Haøm theo sau seõ tính gradient cuûa aûnh RGB:
[VG, A, PPG] = colorgrad(f,T)
trong ñoù f laø aûnh RGB, T laø ngöôõng töï choïn naèm trong khoaûng [0 1] (Maëc
ñònh laø 0); VG laø moät vecto gradient RGB F ( x, y ) ; A laø aûnh goùc  ( x, y ) tính
baèng rad; vaø PPG laø gradient ñöôïc tính baèng caùc laáy toång caùc gradient 2D
cuûa caùc khoâng gian maøu rieâng bieät. Caùc gradient naøy la R  x, y  , G  x, y 
, B  x, y  trong ñoù toaùn töû  ñöôïc ñònh nghóa trong phaàn tröôùc. Taát caû
ñaïo haøm caàn ñeå thöïc hieän phöông trình treân ñöôïc thöïc hieän trong haøm
colorgrad söû duïng toaùn töû Sobel. Caùc ngoõ ra VG vaø PPG ñöôïc chuaån hoùa
trong khoaûng [0 1] bôûi colorgrad vaø chuùng ñöôïc ñaët ngöôõng ñeå VG(x,y) =0
ñoái vôùi nhöõng giaù trò nhoû hôn hoaëc baèng T vaø VG(x,y) = VG(x,y) ñoái vôùi
nhöõng tröôøng hôïp khaùc. Chuù thích töông töï ñoái vôùi PPG.

III. Thuaät toaùn taùch bieân aûnh maøu

12
TAÙCH BIEÂN AÛNH MAØU

AÛnh RGB

Tính caùc ñaïo haøm x vaø


y cuûa 3 thaønh phaàn aûnh
vôùi maët naï ñöôïc choïn

Tính caùc tham soá vector gradient


gxx, gyy, gxy ==>

Tính
vaø chuaån hoùa trong khoaûng [0,1]

So saùnh vôùi ngöôõng T


ta ñöôïc aûnh taùch bieân

13
TAÙCH BIEÂN AÛNH MAØU

IV. Chöông trình M_File

IV.1. Haøm colorgrad

function[VG,A,PPG]=colorgrad(f,dec,T)
%COLORGRAD TINH VECTO GRADIENT CUA MOT ANH MAU RGB.
%function[VG,A,PPG]=colorgrad(f,T) tinh vector gradient,VG, va mang goc
%tuong ung,VA, (don vi radians) cua anh RGB f. No cung tinh PPG, gradient
%ket hop tu cac vung mau ma co duoc bang cach cong cac gradient hai chieu
%cua cac vung mau don. Ngo vao T la muc nguong trong tam [0 1]. Neu no duoc
%xac dinh trong bien ngo vao thi gia tri cua VG va PPG duoc lay nguong bang
%cach tao ra VG(x,y)=0 khi gia tri <=T va VG(x,y) =VG(x,y)doi voi gia tri
%khac.Nhung lenh tuong tu cung duoc ung dung cho PPG. Neu T khong xac dinh
%trong doi so vao thi T duoc set = 0. Ca hai gradient ngo ra duoc xac dinh
%trong tam [0 1]
%dec la loai mat na

if (ndims(f)~=3)| (size(f,3)~=3)
error('Input image must be RGB');
end

%Tinh toan vi phan theo phuong x va y cua ba anh thanh phan su dung toan tu
%Mat na
sh=fspecial(dec);
sv=sh';
Rx=imfilter(double(f(:,:,1)),sh,'replicate');
Ry=imfilter(double(f(:,:,1)),sv,'replicate');
Gx=imfilter(double(f(:,:,2)),sh,'replicate');
Gy=imfilter(double(f(:,:,2)),sv,'replicate');
Bx=imfilter(double(f(:,:,3)),sh,'replicate');
By=imfilter(double(f(:,:,3)),sv,'replicate');

%Tinh cac thong so cua vec to gradient


gxx=Rx.^2+ Gx.^2+ Bx.^2;
gyy=Ry.^2+ Gy.^2+ By.^2;
gxy=Rx.*Ry+ Gx.*Gy+ Bx.*By;
A=0.5*(atan(2*gxy./(gxx-gyy+eps)));
G1=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*A)+2*gxy.*sin(2*A));

%Bay gio lap lai voi goc + pi/2. Sau do chon gia tri cuc dai tai moi diem.
A = A+pi/2;
G2=0.5*((gxx+gyy)+(gxx-gyy).*cos(2*A)+2*gxy.*sin(2*A));
G1=G1.^0.5;
G2=G2.^0.5;

14
TAÙCH BIEÂN AÛNH MAØU

%Tinh VG bang cach lay gia tri cuc dai tai moi diem (x,y)va sau do chuan hoa
% trong khoang [0 1]
VG=mat2gray(max(G1,G2));

%Tinh toan cac gradient tren tung vung mau


RG=sqrt(Rx.^2+Ry.^2);
GG=sqrt(Gx.^2+Gy.^2);
BG=sqrt(Bx.^2+By.^2);

%Thuc hien viec tong hop bang cach cong cac ket qua rieng biet va chuan hoa
%trong khoang [0 1]
PPG=mat2gray(RG+GG+BG);

%Tinh ket qua khi co nguong


if nargin==3
VG=(VG>T).*VG;
PPG=(PPG>T).*PPG;
end
%Ket thuc ham colorgrad

IV.2 Chöông trình taùch bieân aûnh maøu

%file thuc hien tach bien anh mau


clc;
close all;
clear all;
f=imread('lacda.jpg');
T=0.5;
figure(1);
subplot(3,1,1);
imshow(f);
str={['RGB image, threshold T=' num2str(T)]};
title(str);
[VG_S,A_S,PPG_S]=colorgrad(f,'sobel',T);
subplot(3,1,2);
imshow(VG_S);
title('Sobel mask');
hold on;

[VG_P,A_P,PPG_P]=colorgrad(f,'prewitt',T);
subplot(3,1,3);
imshow(VG_P);
title('Prewitt mask');
hold on;

15
TAÙCH BIEÂN AÛNH MAØU

V. Keát quaû

Hình 5. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0

Hình 6. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0.25

16
TAÙCH BIEÂN AÛNH MAØU

Hình 7. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0.5

Hình 8. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0.75

17
TAÙCH BIEÂN AÛNH MAØU

Hình 9. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 1

TAØI LIEÄU THAM KHAÛO

1. Rafael C. Gonzalez, Richard E. Woods, Steven L. Eddins – Digital Image


Processing using Matlab – NXB Prentice Hall 2004.

2. Nguyeãn Kim Saùch - Xöû lyù aûnh vaø Video soá – NXBKHKT 1997.

3. Image Processing Toolbox cuûa Matlab Version 6.5

18

You might also like