TÁCH BIÊN ẢNH MÀU
I. Cơ sở lý thuyết tách biên
Tách biên là phương pháp thông dụng nhất để tách theo nghĩa gián đoạn trong các
giá trị cường độ. Sự gián đoạn được tách sử dụng đạo hàm bậc nhất và bậc hai.
Đạo hàm bậc nhất lựa chọn trong xử lý ảnh là gradient (độ dốc). Gradient của hàm
2-D f(x,y)được định nghĩa dưới dạng vectơ
f
G
x x
f
G f
y
y
Biên độ của vectơ này:
2 21/2 2 21/2
f mag(f) G Gx y f /x f /y
Để tính toán đơn giản, con số này được xấp xỉ bằng cách sử dụng giá trị tuyệt đối
f G Gx y
Xấp xỉ này vẫn còn dưới dạng các đạo hàm: đó là, chúng bằng 0 trong các vùng có
cường độ không đổi, và giá trị chúng tỷ lệ với bậc của sự thay đổi cường độ trong
vùng có các giá trị pixel biến thiên. Nó được xem là biên độ của gradient hoặc xấp
xỉ đơn giản của nó dưới dạng “gradient”.
Đặc tính cơ bản của vectơ gradient là các điểm của nó là hướng có tỷ lệ thay đổi
hàm f tại tọa độ (x,y) lớn nhất. Góc xảy ra tỷ lệ thay đổi lớn nhất là:
G
1 y
(x,y) tan
G
x
Một trong những phương pháp then chốt đưa ra là ước đoán đạo hàm Gx và Gy
theo phương pháp số. Các phương pháp khác nhau được dùng bởi hàm edge được
thảo luận sau trong phần này.
Đạo hàm bậc hai trong xử lý ảnh được tính sử dụng toán tử Laplace. Toán tử
Laplace của hàm 2-D f(x,y)được cho dưới dạng vi phân bậc hai như sau:
2 f(x,y) f(x,y)2 2
f(x,y)
x2 y2
Toán tử Laplace ít khi được dùng để tách biên vì, vi phân bậc hai, dễ bị ảnh hưởng
bởi nhiễu, biên độ của nó sinh ra các biên kép, và không thể tách hướng biên. Tuy
nhiên , toán tử Laplace có thể là phần bổ sung mạnh khi sử dụng kết hợp với kỹ
thuật tách biên khác. Ví dụ, mặc dù các biên kép không thích hợp để tách biên trực
tiếp, đặc tính này có thể dùng để định vị biên.
Ý tưởng cơ bản đằng sau tách biên là tìm các nơi trong ảnh có cường độ thay đổi
nhanh, sử dụng một trong hai tiêu chuẩn tổng quát sau:
19 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2386 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Tách biên ảnh màu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
TAÙCH BIEÂN AÛNH MAØU
1
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 ),( yxf ñöôïc ñònh nghóa döôùi daïng vectô
y
f
x
f
G
G
f
y
x
Bieân ñoä cuûa vectô naøy:
2/1222/122 //)( yfxfGGfmagf yx
Ñ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
yx GGf
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ä ),( yx lôùn nhaát. Goùc xaûy ra tyû leä thay ñoåi lôùn nhaát laø:
x
y
G
G
yx 1tan),(
Moät trong nhöõng phöông phaùp then choát ñöa ra laø öôùc ñoaùn ñaïo haøm xG vaø yG
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 ),( yxf ñöôïc cho döôùi daïng vi phaân baäc hai nhö sau:
2
2
2
2
2 ),(),(),(
y
yxf
x
yxfyxf
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:
TAÙCH BIEÂN AÛNH MAØU
2
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
Gaussian (LoG)
Tìm bieân baèng caùch tìm ñieåm cheùo 0 sau khi loïc 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 ),( yxf . 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öï.
TAÙCH BIEÂN AÛNH MAØU
3
I.1.Boä taùch bieân Sobel
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
xG vaø yG . 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:
2/1274196323219872/122 })]2()2[()]2()2{[( zzzzzzzzzzzzGGg yx
Khi ñoù, ta noùi raèng vò trí (x,y) laø pixel bieân neáu Tg taïi vò trí ñoù, trong ñoù T laø
moät ngöôõng ñöôïc chæ ñònh.
z1
z4
z7
z2 z3
z6
z9z8
z5
Image neighborhood
-1 2 -1
0 0 0
111
-1 0 1
-2 0 2
10-1
Sobel
)2()2( 321987 zzzzzzGx )2()2( 741963 zzzzzzGy
-1 -1
0 0 0
111
-1 0 1
-1 0 1
10-1
-1
Prewitt
)()( 321987 zzzzzzGx )()( 741963 zzzzzzGy
0
0
-1
1
0
01
-1
Roberts
59 zzGx 68 zzGy
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
TAÙCH BIEÂN AÛNH MAØU
4
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 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 xG vaø yG . 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 xG vaø yG . 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
TAÙCH BIEÂN AÛNH MAØU
5
bieân laø thöøa soá cuûa 450). 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
2
2
2)(
r
erh
Trong ñoù 222 yxr 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):
2
2
2
4
22
2 )(
r
errh
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 rh 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 rh 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
TAÙCH BIEÂN AÛNH MAØU
6
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
2. Gradient cuïc boä, 2/122),( yx GGyxg vaø höôùng bieân
)(tan),( 1
x
y
G
G
yx , ñöôïc tính toaùn taïi moãi ñieåm. Moät trong 3 kyõ thuaät
ñaàu trong baûng 10.1 ñeå tính xG vaø yG . 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, 1T vaø 2T . Caùc pixel ñænh lôùn hôn 2T ñöôïc goïi
laø caùc pixel bieân “maïnh”. Caùc pixel ñænh naèm giöõa 1T vaø 2T ñöôï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ô, 21 TTT 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.
TAÙCH BIEÂN AÛNH MAØU
7
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ø
TAÙCH BIEÂN AÛNH MAØU
8
3)2( b , 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.
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
TAÙCH BIEÂN AÛNH MAØU
9
uint8 hoaëc uint16 thì taát caû nhöõng thaønh phaàn vôùi giaù trò 0 chæ ñeán 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
TAÙCH BIEÂN AÛNH MAØU
10
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.
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 ñuû Teân vieát taét Giaù trò RGB
Black
Blue
Green
Cyan
Red
Magenta
Yellow
White
k
b
g
c
r
m
y
w
[0 0 0]
[0 0 1]
[0 1 0]
[0 1 1]
[1 0 0]
[1 0 1]
[1 1 0]
[1 1 1]
TAÙCH BIEÂN AÛNH MAØU
11
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 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 (z5) ñöôïc cho bôûi ñoä cheânh leäch:
321987 22 zzzzzzGx
Töông töï ñaïo haøm theo phöông y ñöôïc xaáp xæ bôûi ñoä cheânh leäch
741963 22 zzzzzzGy
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:
),(
),(
),(
),(
),(
),(
),(
yxB
yxG
yxR
yxc
yxc
yxc
yxc
B
G
R
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ô :
b
x
Bg
x
Gr
x
Ru
b
y
Bg
y
Gr
y
Rv
TAÙCH BIEÂN AÛNH MAØU
12
Ñaët caùc soá xxg , xyg vaø yyg ñöôïc ñònh nghóa nhö sau:
222
x
B
x
G
x
Ruuuug Txx
222
y
B
y
G
y
Rvvvvg Tyy
y
B
x
B
y
G
x
G
y
R
x
Rvuvug Txy
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)
yyxx
xy
gg
g
yx
2
tan
2
1, 1
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 ),( yx vaø ),( yxF laø caùc aûnh coù cuøng kích côõ vôùi aûnh ñaàu vaøo. Caùc
phaàn töû ),( yx laø caùc goùc taïi moãi ñieåm gradient ñöôïc tính va ),( yxF ølaø aûnh
gradient .
2/1
222cos
2
1,
sìngggggyxF xyyyxxyyxx
Vì )tan(tan neáu 0 laø moät nghieäm cuûa phöông trình tan
-1 tröôùc, vì vaäy
2/0 . Theâm vaøo ñoù ),(),( yxFyxF , 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 ),( yxF ; A laø aûnh goùc ),( yx 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 yxR , , yxG , , yxB , 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
TAÙCH BIEÂN AÛNH MAØU
13
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
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 ==> 21,
Tính ),(),,(max),(
21
yxFyxFyxF
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
AÛnh RGB
TAÙCH BIEÂN AÛNH MAØU
14
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));
TAÙCH BIEÂN AÛNH MAØU
15
%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;
%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);
TAÙCH BIEÂN AÛNH MAØU
16
[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;
V. Keát quaû
Hình 5. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0
TAÙCH BIEÂN AÛNH MAØU
17
Hình 6. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0.25
Hình 7. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0.5
TAÙCH BIEÂN AÛNH MAØU
18
Hình 8. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 0.75
Hình 9. Hai maët naï Sobel vaø Prewitt vôùi ngöôõng T = 1
TAÙCH BIEÂN AÛNH MAØU
19
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
Các file đính kèm theo tài liệu này:
- Tách biên ảnh màu.pdf