Tách biên ảnh màu

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 21/2  2 21/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:

pdf19 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2411 | Lượt tải: 0download
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:

  • pdfTách biên ảnh màu.pdf
Tài liệu liên quan