Giáo trình xử lý ảnh

Giáo trình xử lý ảnh Một ảnh chỉ số bao gồm một ma trận dữ liệu X và ma trận bản đồ màu map . Ma trận dữ liệu có thể có kiểu thuộc lớp uint8,uint16 hoặc kiểu double . Ma trận bản đồ màu là một mảng mx3 kiểu double bao gồm các giá trị dấu phẩy động nằm giữa 0 và 1 . Mỗi hàng của bản đồ chỉ ra các giá trị mà : red , green và blue của một màu đơn . Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của pixel ảnh tới giá trị trong bản đồ màu . Màu sắc của mỗi pixel ảnh được tính toán bằng cách sử dụng giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map . Giá trị 1 chỉ ra hàng đầu tiên , giá trị 2 chỉ ra hàng thứ hai trong bản đồ màu

pdf275 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2577 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Giáo trình xử lý ảnh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
M c l cụ ụ 1 . Các ki u nh , các thao tác nh c b n trong Toolboxể ả ả ơ ả ------------- Trang 1 2. Phép x lý trên vùng ch n ------------------------------------------------- Trang 16ử ọ 3. X lý nh m --------------------------------------------------------------ử ả ờ ----Trang 23 4. Màu s c------------------------------------------------------------------------- Trang 38ắ 5. Bi n đ i nh ------------------------------------------------------------------- Trang 52ế ổ ả 6. Bi n đ i không gian nh ---------------------------------------------------- Trang 78ế ổ ả 7. Phân tích và làm giàu nh -------------------------------------------------- Trang 98ả 8. Các bi n đ i hình thái nh ------------------------------------------------- Trang 129ế ổ ả I – Các kiểu ảnh , các thao tác ảnh cơ bản trong Toolbox 1 . nh đ c đ nh ch s ( Indexed Images )Ả ượ ị ỉ ố - M t nh ch s bao g m m t ma tr n d li u X và ma tr n b n đ màu map . Maộ ả ỉ ố ồ ộ ậ ữ ệ ậ ả ồ tr n d li u có th có ki u thu c l p uint8,uint16 ho c ki u double . Ma tr n b n đậ ữ ệ ể ể ộ ớ ặ ể ậ ả ồ màu là m t m ng mx3 ki u double bao g m các giá tr d u ph y đ ng n m gi a 0 và 1ộ ả ể ồ ị ấ ẩ ộ ằ ữ . M i hàng c a b n đ ch ra các giá tr mà : red , green và blue c a m t màu đ n . M tỗ ủ ả ồ ỉ ị ủ ộ ơ ộ nh ch s s d ng ánh x tr c ti p gi a giá tr c a pixel nh t i giá tr trong b n đả ỉ ố ử ụ ạ ự ế ữ ị ủ ả ớ ị ả ồ màu . Màu s c c a m i pixel nh đ c tính toán b ng cách s d ng giá tr t ng ngắ ủ ỗ ả ượ ằ ử ụ ị ươ ứ c a X ánh x t i m t giá tr ch s c a map . Giá tr 1 ch ra hàng đ u tiên , giá tr 2 chủ ạ ớ ộ ị ỉ ố ủ ị ỉ ầ ị ỉ ra hàng th hai trong b n đ màu …ứ ả ồ - M t b n đ màu th ng đ c ch a cùng v i nh ch s và đ c t đ ng n p cùngộ ả ồ ườ ượ ứ ớ ả ỉ ố ượ ự ộ ạ v i nh khi s d ng hàm ớ ả ử ụ imread đ đ c nh .Tuy nhiên , ta không b gi i h n khiể ọ ả ị ớ ạ s d ng b n đ màu m c đ nh , ta có th s d ng m t kì b n đ màu nào . Hình sauử ụ ả ồ ặ ị ể ử ụ ấ ả ồ đây minh ho c u trúc c a m t nh ch s . Các pixel trong nh đ c đ i di n b iạ ấ ủ ộ ả ỉ ố ả ượ ạ ệ ở m t s nguyên ánh x t i m t giá tr t ng ng trong b n đ màu . ộ ố ạ ớ ộ ị ươ ứ ả ồ ( NH )Ả L p và đ l ch c a b n đ màu ( Colormap Offsets )ớ ộ ệ ủ ả ồ - Quan h gi a giá tr trong ma tr n nh và giá tr trong b n đ màu ph thu c vàoệ ữ ị ậ ả ị ả ồ ụ ộ ki u giá tr c a các ph n t ma tr n nh . N u các ph n t ma tr n nh thu c ki uể ị ủ ầ ử ậ ả ế ầ ử ậ ả ộ ể double , giá tr 1 s t ng ng v i giá tr trong hàng th nh t c a b n đ màu , giá tr 2ị ẽ ươ ứ ớ ị ứ ấ ủ ả ồ ị 1 s t ng ng v i giá tr trong hàng th 2 c a b n đ màu … N u các ph n t c a maẽ ươ ứ ớ ị ứ ủ ả ồ ế ầ ử ủ tr n nh thu c ki u uint8 hay uint16 s có m t đ l ch (offset ) – giá tr 0 trong maậ ả ộ ể ẽ ộ ộ ệ ị tr n nh s t ng ng v i giá tr trong hàng đ u tiên c a b n đ màu , giá tr 1 sậ ả ẽ ươ ứ ớ ị ầ ủ ả ồ ị ẽ t ng ng v i giá tr trong hàng th 2 c a b n đ màu ….ươ ứ ớ ị ứ ủ ả ồ - Đ l ch cũng đ c s d ng trong vi c đ nh d ng file nh đ ho đ tăng t i đa sộ ệ ượ ử ụ ệ ị ạ ả ồ ạ ể ố ố l ng màu s c có th đ c tr giúp . ượ ắ ể ượ ợ Gi i h n trong vi c tr giúp nh thu c l p unit16ớ ạ ệ ợ ả ộ ớ - Toolbox x lý nh c a Matlab tr giúp có gi i h n nh ch s thu c l p uint16 . Taử ả ủ ợ ớ ạ ả ỉ ố ộ ớ có th đ c nh ng nh đó và hi n th chúng trong Matlab nh ng tr c khi x lý chúng ,ể ọ ữ ả ể ị ư ướ ử ta ph i chuy n đ i chúng sang ki u uint8 ho c double . ả ể ổ ể ặ Đ chuy n đ i ( convert ) t iể ể ổ ớ ki u double ta dùng hàm ể im2double . Đ gi m s l ng màu c a nh xu ng 256 màuể ả ố ượ ủ ả ố (uint8 ) s d ng hàm ử ụ imapprox . 2. nh c ng đ ( Intensity Images )Ả ườ ộ - M t nh c ng đ là m t ma tr n d li u nh I mà giá tr c a nó đ i di n choộ ả ườ ộ ộ ậ ữ ệ ả ị ủ ạ ệ c ng đ trong m t s vùng nào đó c a nh . Matlab ch a m t nh c ng đ nhườ ộ ộ ố ủ ả ứ ộ ả ườ ộ ư m t ma tr n d n , v i m i ph n t c a ma tr n t ng ng v i m t pixel c a nh . Maộ ậ ơ ớ ỗ ầ ử ủ ậ ươ ứ ớ ộ ủ ả tr n có th thu c l p double , uint8 hay uint16 . Trong khi nh c ng đ hi m khiậ ể ộ ớ ả ườ ộ ế đ c l u v i b n đ màu , Matlab s d ng b n đ màu đ hi n th chúng .ượ ư ớ ả ồ ử ụ ả ồ ể ể ị - Nh ng ph n t trong ma tr n c ng đ đ i di n cho các c ng đ khác nhau ho cữ ầ ử ậ ườ ộ ạ ệ ườ ộ ặ đ xám . Nh ng đi m có c ng đ b ng 0 th ng đ c đ i di n b ng màu đen vàộ ữ ể ườ ộ ằ ườ ượ ạ ệ ằ c ng đ 1,255 ho c 65535 th ng đ i di n cho c ng đ cao nh t hay màu tr ng . ườ ộ ặ ườ ạ ệ ườ ộ ấ ắ 3. nh nh phân (Binary Images )Ả ị -Trong m t nh nh phân , m i pixel ch có th ch a m t trong hai giá tr nh phân 0ộ ả ị ỗ ỉ ể ứ ộ ị ị ho c 1 . Hai giá tr này t ng ng v i b t ho t t ( on ho c off ) . M t nh nh phânặ ị ươ ứ ớ ậ ặ ắ ặ ộ ả ị đ c l u tr nh m t m ng lôgíc c a 0 và 1 . ượ ư ữ ư ộ ả ủ 4. nh RGB ( RGB Images )Ả - M t nh RGB - th ng đ c g i là ộ ả ườ ượ ọ true-color , đ c l u tr trong Matlab d i d ngượ ư ữ ướ ạ m t m ng d li u có kích th c 3 chi u mxnx3 đ nh nghĩa các giá tr màu red, green vàộ ả ữ ệ ướ ề ị ị blue cho m i pixel riêng bi t . nh RGB không s d ng palette . Màu c a m i pixelỗ ệ Ả ử ụ ủ ỗ đ c quy t đ nh b i s k t h p gi a các giá tr R,G,B ( Red, Green , Blue ) đ c l uượ ế ị ở ự ế ợ ữ ị ượ ư tr trong m t m t ph ng màu t i v trí c a pixel . Đ nh d ng file đ ho l u tr nhữ ộ ặ ẳ ạ ị ủ ị ạ ồ ạ ư ữ ả 2 RGB gi ng nh m t nh 24 bít trong đó R,G,B chi m t ng ng 8 bít m t . Đi u nàyố ư ộ ả ế ươ ứ ộ ề cho phép nh n đ c 16 tri u màu khác nhau . ậ ượ ệ - M t m ng RGB có th thu c l p double , uint8 ho c uint16 . Trong m t m ng RGBộ ả ể ộ ớ ặ ộ ả thu c l p double , m i thành ph n màu có giá tr gi a 0 và 1 . M t pixel mà thành ph nộ ớ ỗ ầ ị ữ ộ ầ màu c a nó là (0,0,0) đ c hi n th v i màu đen và m t pixel mà thành ph n màu làủ ượ ể ị ớ ộ ầ (1,1,1 ) đ c hi n th v i màu tr ng . Ba thành ph n màu c a m i pixel đ c l u trượ ể ị ớ ắ ầ ủ ỗ ượ ư ữ cùng v i chi u th 3 c a m ng d li u . Ch ng h n , giá tr màu R,G,B c a pixelớ ề ứ ủ ả ữ ệ ẳ ạ ị ủ (10,5) đ c l u tr trong RGB(10,5,1) , RGB(10,5,2) và RGB(10,5,3) t ng ng . ượ ư ữ ươ ứ - Đ tính toán màu s c c a pixel t i hàng 2 và c t 3 ch ng h n , ta nhìn vào b ba giáể ắ ủ ạ ộ ẳ ạ ộ tr đ c l u tr trong (2,3,1:3) . Gi s (2,3,1) ch a giá tr 0.5176 ; (2,3,2) ch a giá trị ượ ư ữ ả ử ứ ị ứ ị 0.1608 và (2,3,3) ch a giá tr 0.0627 thì màu s c c a pixel t i (2,3 ) s là ứ ị ắ ủ ạ ẽ (0.5176,0.1608,0.0627) - Đ minh ho xa h n khái ni m ba m t ph ng màu riêng bi t đ c s d ng trongể ạ ơ ệ ặ ẳ ệ ượ ử ụ m t nh RGB , đo n mã sau đây t o m t nh RGB đ n gi n ch a các vùng liên t cộ ả ạ ạ ộ ả ơ ả ứ ụ c a R,G,B và sau đó t o m t nh cho m i m t ph ng riêng c a nó ( R,G,B ) . Nó hi nủ ạ ộ ả ỗ ặ ẳ ủ ể th m i m t ph ng màu riêng r và cũng hi n th nh g c .ị ỗ ặ ẳ ẽ ể ị ả ố RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]); R=RGB(:,:,1); G=RGB(:,:,2); B=RGB(:,:,3); imshow(R) figure, imshow(G) figure, imshow(B) figure, imshow(RGB) Các m t ph ng màu riêng r c a m t nh RGBặ ẳ ẽ ủ ộ ả - Chú ý r ng m i m t ph ng màu riêng r ch a m t kho ng tr ng . Kho ng tr ngằ ỗ ặ ẳ ẽ ứ ộ ẳ ắ ả ắ t ng ng v i giá tr cao nh t c a m i màu riêng r . Ch ng h n trong nh m t ph ngươ ứ ớ ị ấ ủ ỗ ẽ ẳ ạ ả ặ ẳ R , vùng tr ng đ i di n cho s t p trung cao nh t c a màu đ thu n khi t . N u Rắ ạ ệ ự ậ ấ ủ ỏ ầ ế ế đ c tr n v i G ho c B ta s có màu xám . Vùng màu đen trong nh ch ra giá tr c aượ ộ ớ ặ ẽ ả ỉ ị ủ pixel mà không ch a màu đ R=0. T ng t cho các m t ph ng màu G và B .ứ ỏ ươ ự ặ ẳ 3 5. M ng nh nhi u khung hình ( Multiframe Image Arrays )ả ả ề - V i m t vài ng d ng , ta có th c n làm vi c v i m t t p h p các nh quan h v iớ ộ ứ ụ ể ầ ệ ớ ộ ậ ợ ả ệ ớ th i gian ho c khung nhìn nh MRI hay khung hình phim .ờ ặ ư - Toolbox x lý nh trong Matlab cung c p s tr giúp cho vi c l u tr nhi u nhử ả ấ ự ợ ệ ư ữ ề ả trong cùng m t m ng . M i nh đ c g i là m t khung hình ( Frame ) . N u m tộ ả ỗ ả ượ ọ ộ ế ộ m ng gi nhi u frame , chúng đ c n i theo 4 chi u . Ch ng h n , m t m ng v i nămả ữ ề ượ ố ề ẳ ạ ộ ả ớ nh có kích th c 400x300 s là m t m ng có kích th c 400x300x3x5 . M t nh chả ướ ẽ ộ ả ướ ộ ả ỉ s ho c nh c ng đ nhi u khung t ng t s là 400x300x1x5 . ố ặ ả ườ ộ ề ươ ự ẽ - S d ng l nh ử ụ ệ cat đ ch a các nh riêng r trong m t m ng nhi u khung hình .ể ứ ả ẽ ộ ả ề Ch ng h n , n u ta có m t nhóm các nh A1,A2,A3,A4 và A5 , ta có th ch a chúngẳ ạ ế ộ ả ể ứ trong m t m ng duy nh t s d ng ộ ả ấ ử ụ A=cat(4,A1,A2,A3,A4,A5 ) - Ta cũng có th trích các khung hình t m t nh nhi u khung hình . Ch ng h n , n uể ừ ộ ả ề ẳ ạ ế ta có m t nh nhi u khung hình MULTI , l nh sau đây s trích ra khung hình th 3 ộ ả ề ệ ẽ ứ FRM3=MULTI( : , : , : , 3 ) - Ghi nh r ng , trong m t m ng nh nhi u khung hình , m i nh ph i có cùng kíchớ ằ ộ ả ả ề ỗ ả ả th c và có cùng s m t ph ng . Trong m t nh ch s nhi u khung , m i nh ph i sướ ố ặ ẳ ộ ả ỉ ố ề ỗ ả ả ử d ng cùng m t b n đ màu ụ ộ ả ồ S tr giúp gi i h n v i nh nhi u khungự ợ ớ ạ ớ ả ề - Nhi u hàm trong toolbox ho t đ ng ch trên 2 ho c 3 chi u đ u tiên . Ta có th sề ạ ộ ỉ ặ ề ầ ể ử d ng chi u th 4 v i nh ng hàm này nh ng ta ph i x lý m i khung hình m t cáchụ ề ứ ớ ữ ư ả ử ỗ ộ đ c l p . Ch ng h n , l i g i hàm sau s hi n th khung hình th 7 trong m t m ngộ ậ ẳ ạ ờ ọ ẽ ể ị ứ ộ ả MULTI imshow(MULTI(: , : , : , 7 )) - N u ta truy n m t m ng vào hàm và m ng có nhi u chi u h n s chi u mà hàm đãế ề ộ ả ả ề ề ơ ố ề đ c thi t k đ ho t đ ng , k t qu có th không đoán tr c đ c . Trong m t sượ ế ế ể ạ ộ ế ả ể ướ ượ ộ ố tr ng h p , hàm đ n gi n ch x lý khung hình đ u tiên nh ng trong các tr ng h pườ ợ ơ ả ỉ ử ầ ư ườ ợ khác , s ho t đ ng không t o ra k t qu nào có ý nghĩa . ự ạ ộ ạ ế ả ả- Các hàm chuy n đ i ki u nh ể ổ ể ả - V i các thao tác nh t đ nh , s th t h u ích khi có th chuy n đ i nh t d ng nàyớ ấ ị ẽ ậ ữ ể ể ổ ả ừ ạ sang d ng khác . Ch ng h n , n u ta mu n l c m t màu nh đ c l u tr d i d ngạ ẳ ạ ế ố ọ ộ ả ượ ư ữ ướ ạ nh ch s , đ u tiên , ta nên chuy n đ i nó thành d ng nh RGB . Khi ta áp d ng phépả ỉ ố ầ ể ổ ạ ả ụ 4 l c t i nh RGB , Matlab s l c giá tr c ng đ trong nh t ng ng . N u ta cọ ớ ả ẽ ọ ị ườ ộ ả ươ ứ ế ố g ng l c nh ch s , Matlab đ n gi n ch áp đ t phép l c t i ma tr n nh ch s vàắ ọ ả ỉ ố ơ ả ỉ ặ ọ ớ ậ ả ỉ ố k t qu s không có ý nghĩa ế ả ẽ Chú ý : Khi convert m t nh t d ng này sang d ng khác , nh k t qu có th khácộ ả ừ ạ ạ ả ế ả ể nh ban đ u . Ch ng h n , n u ta convert m t nh màu ch s sang m t nh c ng đả ầ ẳ ạ ế ộ ả ỉ ố ộ ả ườ ộ , k t qu ta s thu đ c m t nh đen tr ng .ế ả ẽ ượ ộ ả ắ - Danh sách sau đây s li t kê các hàm đ c s d ng trong vi c convert nh :ẽ ệ ượ ử ụ ệ ả + dither : T o m t nh nh phân t m t nh c ng đ đen tr ng b ng cách tr n , t oạ ộ ả ị ừ ộ ả ườ ộ ắ ằ ộ ạ m t nh ch s t m t nh RGB b ng cách tr ng (dither )ộ ả ỉ ố ừ ộ ả ằ ộ + gray2id : T o m t nh ch s t m t nh c ng đ đen tr ng .ạ ộ ả ỉ ố ừ ộ ả ườ ộ ắ + grayslice : T o m t nh ch s t m t nh c ng đ đen tr ng b ng cách đ tạ ộ ả ỉ ố ừ ộ ả ườ ộ ắ ằ ặ ng ng ưỡ + im2bw : T o m t nh nh phân t m t nh c ng đ , nh ch s hay nh RGBạ ộ ả ị ừ ộ ả ườ ộ ả ỉ ố ả trên c s c a ng ng ánh sáng .ơ ở ủ ưỡ + ind2gray : T o m t nh c ng đ đen tr ng t m t nh ch s ạ ộ ả ườ ộ ắ ừ ộ ả ỉ ố + ind2rgb : T o m t nh RGB t m t nh ch s ạ ộ ả ừ ộ ả ỉ ố + mat2gray : T o m t nh c ng đ đen tr ng t d li u trong m t ma tr n b ngạ ộ ả ườ ộ ắ ừ ữ ệ ộ ậ ằ cách l y t l gi li u ấ ỉ ệ ữ ệ + rgb2gray : T o m t nh c ng đ đen tr ng t m t nh RGBạ ộ ả ườ ộ ắ ừ ộ ả + rgb2ind : T o m t nh ch s t m t nh RGBạ ộ ả ỉ ố ừ ộ ả - Ta cũng có th th c hi n các phép chuy n đ i ki u ch s d ng cú pháp c a Matlab .ể ự ệ ể ổ ể ỉ ử ụ ủ Ch ng h n , ta có th convert m t nh c ng đ sang nh RGB b ng cách ghép n i 3ẳ ạ ể ộ ả ườ ộ ả ằ ố ph n copy c a ma tr n nh g c gi a 3 chi u :ầ ủ ậ ả ố ữ ề RGB=cat(3,I,I,I ); - nh RGB thu đ c có các ma tr n đ ng nh t cho các m t ph ng R,G,B vì v y nhẢ ượ ậ ồ ấ ặ ẳ ậ ả hi n th gi ng nh bóng xám .ể ị ố ư - Thêm vào nh ng công c chuy n đ i chu n đã nói trên , cũng có m t s hàm màữ ụ ể ổ ẩ ở ộ ố tr l i ki u nh khác nh m t ph n trong thao tác mà chúng th c hi n . Xem thêmả ạ ể ả ư ộ ầ ự ệ Help Online Chuy n đ i không gian màu ể ổ - Toolbox x lý nh bi u di n màu s c nh các giá tr RGB ( tr c ti p trong nh RGBử ả ể ễ ắ ư ị ự ế ả ho c gián ti p trong nh ch s ) . Tuy nhiên , có các ph ng pháp khác cho vi c bi uặ ế ả ỉ ố ươ ệ ể 5 di n màu s c . Ch ng h n , m t màu có th đ c đ i di n b i các giá tr ễ ắ ẳ ạ ộ ể ượ ạ ệ ở ị hue , saturation và các giá tr thành ph n (HSV ) . Các ph ng pháp khác cho vi c bi u di nị ầ ươ ệ ể ễ màu đ c g i là không gian màu .ượ ọ - Toolbox cung c p m t t p các th t c đ chuy n đ i gi a các không gian màu . Cácấ ộ ậ ủ ụ ể ể ổ ữ hàm x lý nh t chúng coi d li u màu s c d i d ng RGB tuy nhiên , ta có th x lýử ả ự ữ ệ ắ ướ ạ ể ử m t nh mà s d ng các không gian màu khác nhau b ng cách chuy n đ i nó sangộ ả ử ụ ằ ể ổ RGB sau đó chuy n đ i nh đã đ c x lý tr l i không gian màu ban đ u . ể ổ ả ượ ử ở ạ ầ ầ- Đ c và ghi d li u nh ọ ữ ệ ả - Ph n này s gi i thi u cách đ c và ghi d li u nh ầ ẽ ớ ệ ọ ữ ệ ả 1. Đ c m t nh đ ho ọ ộ ả ồ ạ - Hàm imread đ c m t nh t b t kì đ nh d ng nào đ c tr giúp trong b t kì chi uọ ộ ả ừ ấ ị ạ ượ ợ ấ ề sâu bit nào đ c tr giúp . H u h t các file nh s d ng 8 bít đ ch a giá tr c aượ ợ ầ ế ả ử ụ ể ứ ị ủ pixel . Khi chúng đ c đ c vào b nh , Matlab ch a chúng d i d ng uint8 . V i cácượ ọ ộ ớ ứ ướ ạ ớ file tr giúp 16 bít d li u , PNG và TIFF , Matlab ch a chúng d i d ng uint16ợ ữ ệ ứ ướ ạ Chú ý : V i nh ch s , imread luôn luôn đ c b n đ màu vào trong m t chu i thu cớ ả ỉ ố ọ ả ồ ộ ỗ ộ l p double , th m chí m ng nh t nó thu c l p uint8 hay uint16ớ ậ ả ả ự ộ ớ - Ch ng h n , đo n mã sau s đ c m t nh RGB vào không gian làm vi c c a Matlabẳ ạ ạ ẽ ọ ộ ả ệ ủ l u trong bi n RGBư ế RGB=imread(‘football.jpg’); - Trong ví d này , imread s nh n ra đ nh d ng file đ s d ng t tên file . Ta cũng cóụ ẽ ậ ị ạ ể ử ụ ừ th ch ra đ nh d ng file nh m t tham s trong hàm imread . Matlab tr giúp r t nhi uể ỉ ị ạ ư ộ ố ợ ấ ề đ nh d ng đ ho thông d ng ch ng h n : BMP , GIF , JPEG , PNG , TIFF … Đ bi tị ạ ồ ạ ụ ẳ ạ ể ế thêm các ki u g i hàm và tham s truy n vào , xem tr giúp online c a Matlab .ể ọ ố ề ợ ủ Đ c nhi u nh t m t file đ ho ọ ề ả ừ ộ ồ ạ - Matlab tr giúp m t s đ nh d ng file đ ho ch ng h n nh : HDF và TIFF , chúngợ ộ ố ị ạ ồ ạ ẳ ạ ư ch a nhi u nh . Theo m c đ nh , imread ch tr giúp nh đ u tiên trong file . Đ nh pứ ề ả ặ ị ỉ ợ ả ầ ể ậ thêm các nh t file , s d ng cú pháp đ c tr giúp b i đ nh d ng file . Ch ng h n ,ả ừ ử ụ ượ ợ ở ị ạ ẳ ạ khi đ c s d ng v i TIFF , ta có th s d ng m t giá tr ch s v i imread đ ch raượ ử ụ ớ ể ử ụ ộ ị ỉ ố ớ ể ỉ nh mà ta mu n nh p vào . Ví d sau đây đ c m t chu i 27 nh t m t file TIFF vàả ố ậ ụ ọ ộ ố ả ừ ộ l u nh ng nh anỳ trong m t m ng 4 chi u . Ta có th s d ng hàm ư ữ ả ộ ả ề ể ử ụ iminfo đ xemể bao nhiêu nh đã đ c l u tr trong file :ả ượ ư ữ mri = uint8(zeros(128,128,1,27)); % preallocate 4-D array 6 for frame=1:27 [mri(:,:,:,frame),map] = imread('mri.tif',frame); end - Khi file ch a nhi u nh theo m t s ki u nh t đ nh ch ng h n theo th t th i gian ,ứ ề ả ộ ố ể ấ ị ẳ ạ ứ ự ờ ta có th l u nh trong Matlab d i d ng m ng 4 chi u . T t c các nh ph i có cùngể ư ả ướ ạ ả ề ấ ả ả ả kích th c . ướ 2. Ghi m t nh đ ho ộ ả ồ ạ - Hàm imwrite s ghi m t nh t i m t file đ ho d i m t trong các đ nh d ng đ cẽ ộ ả ớ ộ ồ ạ ướ ộ ị ạ ượ tr giúp . C u trúc c b n nh t c a imwrite s yêu c u m t bi n nh và tên file . N uợ ấ ơ ả ấ ủ ẽ ầ ộ ế ả ế ta g p m t ph n m r ng trong tên file , Matlab s nh n ra đ nh d ng mong mu n tộ ộ ầ ở ộ ẽ ậ ị ạ ố ừ nó . Ví d sau t i m t nh ch s X t m t file Mat v i b n đ màu k t h p v i nóụ ả ộ ả ỉ ố ừ ộ ớ ả ồ ế ợ ớ map sau đó ghi nh xu ng m t file bitmap .ả ố ộ load clown whos Name Size Bytes Class X 200x320 512000 double array caption 2x1 4 char array map 81x3 1944 double array Grand total is 64245 elements using 513948 bytes imwrite(X,map,'clown.bmp') Ch ra đ nh d ng ph - Tham s đ c bi t ỉ ị ạ ụ ố ặ ệ - Khi s d ng imwrite v i m t s đ nh d ng đ ho , ta có th ch ra các tham s ph .ử ụ ớ ộ ố ị ạ ồ ạ ể ỉ ố ụ Ch ng h n , v i đ nh d ng PNG ta có th ch ra đ sâu bít nh m t tham s ph . Víẳ ạ ớ ị ạ ể ỉ ộ ư ộ ố ụ d sau s chi m t nh c ng đ I v i m t file nh 4 bít PNG ụ ẽ ộ ả ườ ộ ớ ộ ả imwrite(I,'clown.png','BitDepth',4 ); - Đ bi t thêm các c u trúc khác c a hàm xem ph n tr giúp tr c tuy n c a Matlab .ể ế ấ ủ ầ ợ ự ế ủ Đ c và ghi nh nh phân theo đ nh d ng 1 bítọ ả ị ị ạ 7 - Trong m t s đ nh d ng file , m t nh nh phân có th đ c l u trong m t đ nh d ngộ ố ị ạ ộ ả ị ể ượ ư ộ ị ạ 1 bít . N u đ nh d ng file tr giúp nó ,Matlab ghi nh nh phân nh nh 1 bít theo m cế ị ạ ợ ả ị ư ả ặ đ nh . Khi ta đ c m t nh nh phân v i đ nh d ng 1 bít , Matlab đ i di n nó trongị ọ ộ ả ị ớ ị ạ ạ ệ không gian làm vi c nh m t m ng lôgíc .ệ ư ộ ả - Ví d sau đ c m t nh nh phân và ghi nó d i d ng file TIFF . B i vì đ nh d ngụ ọ ộ ả ị ướ ạ ở ị ạ TIFF tr giúp nh 1 bít , file đ c ghi lên đĩa theo đ nh d ng 1 bít :ợ ả ượ ị ạ BW = imread('text.png'); imwrite(BW,'test.tif'); Đ ki m tra chi u sâu bít c a file test.tif , g i hàm iminfo và ki m tra tr ng BitDepthể ể ề ủ ọ ể ườ c a nó :ủ info = imfinfo('test.tif'); info.BitDepth ans = 1 Chú ý : Khi gi file nh phân , Matlab thi t l p tr ng ColorType thành ‘grayscale’ị ế ậ ườ Xem l p l u tr c a file ớ ư ữ ủ - Hàm imwrite s d ng lu t sau đây đ quy t đ nh l p l u tr đ c s d ng trong nhử ụ ậ ể ế ị ớ ư ữ ượ ử ụ ả k t qu :ế ả + logical : N u đ nh d ng nh ra ( Output Image ) đ c ch rõ là tr giúp nh 1 bít ,ế ị ạ ả ượ ỉ ợ ả hàm imwrite t o m t file nh 1 bít . N u đ nh d ng nh ra đ c ch rõ là không trạ ộ ả ế ị ạ ả ượ ỉ ợ giúp nh 1 bít ( nh JPEG ) , hàm imwrite chuy n nh t i m t nh thu c l p uint8ả ư ể ả ớ ộ ả ộ ớ + uint8 : N u đ nh d ng nh ra đ c ch rõ là tr giúp nh 8 bít , hàm imwrite t o m tế ị ạ ả ượ ỉ ợ ả ạ ộ nh 8 bít ả +uint16 : N u đ nh d ng nh ra đ c ch rõ tr giúp nh 16 bít ( PNG ho c TIFF ) ,ế ị ạ ả ượ ỉ ợ ả ặ hàm imwrite t o m t nh 16 bít . N u đ nh d ng nh ra không tr giúp nh 16 bít ,ạ ộ ả ế ị ạ ả ợ ả hàm chuy n đ i d li u nh t i l p uint8 và t o m t nh 8 bít .ể ổ ữ ệ ả ớ ớ ạ ộ ả +double : Matlab chuy n d li u nh t i d ng uint8 và t o m t nh 8 bít b i vì h uể ữ ệ ả ớ ạ ạ ộ ả ở ầ h t các file nh s d ng đ nh d ng 8 bít . ế ả ử ụ ị ạ 2. Truy v n m t file đ ho ấ ộ ồ ạ 8 - Hàm iminfo cho phép ta có th nh n đ c thông tin v m t file nh đ c tr giúpể ậ ượ ề ộ ả ượ ợ b i toolbox . Thông tin mà ta nh n đ c ph thu c vào ki u c a file nh ng nó luônở ậ ượ ụ ộ ể ủ ư bao g m nh ng thông tin sau :ồ ữ + Tên c a file nh ủ ả + Đ nh d ng file nhị ạ ả + S version c a đ nh d ng fileố ủ ị ạ + Ngày s a đ i file g n nh t ử ổ ầ ấ + Kích th c file tính theo byteướ + Chi u r ng nh tính theo pixelề ộ ả + Chi u cao nh tính theo pixelề ả + S l ng bít trên m t pixelố ượ ộ + Ki u nh : RGB, ch s …ể ả ỉ ố ố- Chuy n đ i đ nh d ng các file nh ể ổ ị ạ ả - Đ thay đ i đ nh d ng đ ho c a m t nh , s d ng hàm imread đ đ c m t nh vàể ổ ị ạ ồ ạ ủ ộ ả ử ụ ể ọ ộ ả sau đó l u nó v i hàm imwrite đ ng th i ch ra đ nh d ng t ng ng .ư ớ ồ ờ ỉ ị ạ ươ ứ - Đ minh ho , ví d sau đây s d ng hàm imread đ đ c m t file BMP vào khôngể ạ ụ ử ụ ể ọ ộ gian làm vi c .Sau đó , hàm imwrite l u nh này d i đ nh d ng PNG ệ ư ả ướ ị ạ bitmap = imread('mybitmap.bmp','bmp'); imwrite(bitmap,'mybitmap.png','png'); i - Đ c và ghi nh DICOMọ ả - Toolbox x lý nh bao g m tr giúp cho vi c thao tác v i nh s ( Digital Imaging )ử ả ồ ợ ệ ớ ả ố và nh y h c (Communication in Medicine ) .ả ọ 1. Đ c d li u nh t m t file DICOMọ ữ ệ ả ừ ộ - Đ đ c m t d li u nh t m t file DICOM , s d ng hàm đicomread . Hàm nàyể ọ ộ ữ ệ ả ừ ộ ử ụ đ c các file tuân theo đ c tr ng DICOM nh ng có th đ c đ c các file không theoọ ặ ư ư ể ọ ượ chu n chung nào ẩ - Ví d sau đây đ c m t nh t m t file DICOM m u đi kèm v i toolbox .ụ ọ ộ ả ừ ộ ẫ ớ I = dicomread('CT-MONO2-16-ankle.dcm'); Đ xem d li u nh , s d ng hàm hi n th c a toolbox – imshow ho c imview ( Doể ữ ệ ả ử ụ ể ị ủ ặ d li u nh là s 16 bít có d u , ta ph i s d ng c u trúc t chuy n đ i v i m i hàmữ ệ ả ố ấ ả ử ụ ấ ự ể ổ ớ ỗ hi n th )ể ị imview(I,[]) 9 2. Đ c Metadata t m t file DICOMọ ừ ộ - Các file DICOM bao g m các thông tin đ c g i là Metadata . Nh ng thông tin nàyồ ượ ọ ữ mô t t c tính c a d li u nh nó n m gi nh : kích th c , chi u , chi u sâu bít .ả ặ ủ ữ ệ ả ắ ữ ư ướ ề ề Thêm vào đó , đ c tr ng DICOM đ nh nghĩa nhi u các tr ng metadata khác đ mô tặ ư ị ề ườ ể ả các đ c tính khác c a d li u nh : cách th c đ c s d ng đ t o d li u , thi t l pặ ủ ữ ệ ư ứ ượ ử ụ ể ạ ữ ệ ế ậ thi t b dùng đ ch p nh , thông tin v vi c nghiên c u …Hàm dicomread có th xế ị ể ụ ả ề ệ ứ ể ử lý h u h t t t c các tr ng metadata đ c đ nh nghĩa b i đ c tr ng DICOM ( hayầ ế ấ ả ườ ượ ị ở ặ ư chu n DICOM ) ẩ - Đ đ c metadata t m t file DICOM , s d ng hàm dicominfo . Hàm này tr v m tể ọ ừ ộ ử ụ ả ề ộ c u trúc metadata mà m i tr ng trong c u trúc là m t ph n đ c tr ng c a metadataấ ọ ườ ấ ộ ầ ặ ư ủ trong file DICOM đó . info = dicominfo('CT-MONO2-16-ankle.dcm'); info = Filename: [1x47 char] FileModDate: '24-Dec-2000 19:54:47' FileSize: 525436 Format: 'DICOM' FormatVersion: 3 Width: 512 Height: 512 BitDepth: 16 ColorType: 'grayscale' SelectedFrames: [] FileStruct: [1x1 struct] StartOfPixelData: 1140 MetaElementGroupLength: 192 FileMetaInformationVersion: [2x1 double] MediaStorageSOPClassUID: '1.2.840.10008.5.1.4.1.1.7' MediaStorageSOPInstanceUID: [1x50 char] TransferSyntaxUID: '1.2.840.10008.1.2' 10 ImplementationClassUID: '1.2.840.113619.6.5' . . . Ta có th s d ng c u trúc metadata đ c tr l i b i hàm dicominfo đ ch đ nh fileể ử ụ ấ ượ ả ạ ở ể ỉ ị DICOM ta mu n đ c s d ng hàm dicomread . Ch ng h n , ta có th s d ng đo nố ọ ử ụ ẳ ạ ể ử ụ ạ mã sau đây đ đ c metadata t m t file DICOM m u và sau đó truy n metadata đó t iể ọ ừ ộ ẫ ề ớ hàm dicomread đ đ c nh t file :ể ọ ả ừ info = dicominfo('CT-MONO2-16-ankle.dcm'); I = dicomread(info); 3. Ghi d li u lên m t file DICOMữ ệ ộ - Đ ghi d li u lên m t file DICOM , s d ng hàm dicomwrite . Ví d sau ghi m tể ữ ệ ộ ử ụ ụ ộ nh I t i file DICOM ankle.dcmả ớ dicomwrite(I,'h:\matlab\tmp\ankle.dcm') Ghi metadata lên m t file DICOMộ Khi ta ghi d li u nh lên m t file DICOM , hàm dicomwrite bao g m m t t p h pữ ệ ả ộ ồ ộ ậ ợ nh nh t c a các tr ng trong metadata đ c yêu c u b i ki u c a đ i t ng thôngỏ ấ ủ ườ ượ ầ ở ể ủ ố ượ tin DICOM ( IOD ) mà ta đang t o . dicomwrite tr giúp 3 ki u DICOM IOD :ạ ợ ể + Secondary capture ( m c đ nh )ặ ị + Magnetic resonance + Computed tomography - Ta có th ch rõ matadata nào ta mu n ghi lên file b ng cách truy n t i hàmể ỉ ố ằ ề ớ dicomwrite m t c u trúc metadata nh n đ c t hàm dicominfo ộ ấ ậ ượ ừ info = dicominfo('CT-MONO2-16-ankle.dcm'); I = dicomread(info); dicomwrite(I,'h:\matlab\tmp\ankle.dcm',info) - Trong tr ng h p này , hàm dicomwrite ghi thông tin trong c u trúc metadata info lênườ ợ ấ m t file DICOM m i . Khi ghi d li u t i file , có m t s tr ng mà dicomwrite ph iộ ớ ữ ệ ớ ộ ố ườ ả c p nh t . Ch ng h n , dicomwrite ph i c p nh t ngày tháng s a đ i c a file m i . Đậ ậ ẳ ạ ả ậ ậ ử ổ ủ ớ ể minh ho , so sánh ngày s a đ i c a metadata g c v i ngày s a đ i file trong file m i :ạ ử ổ ủ ố ớ ử ổ ớ info.FileModDate 11 ans = 24-Dec-2000 19:54:47 S d ng dicominfo , đ c metadata t m t file m i đ c ghi , ki m tra ngày s a đ iử ụ ọ ừ ộ ớ ượ ể ử ổ file : info2 = dicominfo('h:\matlab\tmp\ankle.dcm'); info2.FileModDate ans = 16-Mar-2003 15:32:43 1- S h c nh ố ọ ả - S h c nh s ng d ng c a các phép toán s h c chu n nh : c ng , tr , nhân ,ố ọ ả ự ứ ụ ủ ố ọ ẩ ư ộ ừ chia lên nh . S h c nh đ c s d ng nhi u trong x lý nh trong c các b c banả ố ọ ả ượ ử ụ ề ử ả ả ướ đ u l n các thao tác ph c t p h n . Ch ng h n , tr nh có th đ c s d ng đ phátầ ẫ ứ ạ ơ ẳ ạ ừ ả ể ượ ử ụ ể hi n s khác nhau gi a hai ho c nhi u nh c a cùng m t c nh ho c m t v t .ệ ự ữ ặ ề ả ủ ộ ả ặ ộ ậ - Ta có th th c hi n s h c nh s d ng các toán t s h c c a Matlab . Toolbox xể ự ệ ố ọ ả ử ụ ử ố ọ ủ ử lý nh bao g m m t t p h p các hàm ng d ng các phép toán s h c trên t t c cácả ồ ộ ậ ợ ứ ụ ố ọ ấ ả con s không l p đ y . Hàm s h c c a toolbox ch p nh n b t kì ki u d li u s nàoố ấ ầ ố ọ ủ ấ ậ ấ ể ữ ệ ố bao g m uint8 , uint16 hay double và tr l i nh k t qu trong cùng đ nh d ng . Cácồ ả ạ ả ế ả ị ạ hàm th c hi n các phép toán v i đ chính xác kép trên t ng ph n t nh ng khôngự ệ ớ ộ ừ ầ ử ư chuy n đ i nh t i giá tr chính xác kép trong không gian làm vi c c a Matlab . S trànể ổ ả ớ ị ệ ủ ự s đ c đi u khi n t đ ng . Hàm s c t b giá tr tr v đ v a v i ki u d li u . ố ượ ề ể ự ộ ẽ ắ ỏ ị ả ề ể ừ ớ ể ữ ệ 1 . Lu t c t b trong s h c nh ậ ắ ỏ ố ọ ả - K t qu c a s h c nguyên có th d dàng tràn s dùng cho l u tr . Ch ng h n , giáế ả ủ ố ọ ể ễ ố ư ữ ẳ ạ tr c c đ i ta có th l u tr trong uint8 là 255 . Các phép toán s h c có th tr v giáị ự ạ ể ư ữ ố ọ ể ả ề tr phân s - không đ c bi u di n b i m t chu i s nguyên .ị ố ượ ể ễ ở ộ ỗ ố - Các hàm s h c nh s d ng nh ng lu t này cho s h c nguyên :ố ọ ả ử ụ ữ ậ ố ọ + Giá tr v t quá kho ng c a ki u s nguyên b c t b t i kho ng đó ị ượ ả ủ ể ố ị ắ ỏ ớ ả + Giá tr phân s đ c làm trònị ố ượ 12 Ch ng h n , n u d li u có ki u uint8 , k t qu tr v n u l n h n 255 ( bao g mẳ ạ ế ữ ệ ể ế ả ả ề ế ớ ơ ồ Inf ) thì đ c gán là 255 . ượ 2. L i g i l ng nhau t i hàm s h c nh ờ ọ ồ ớ ố ọ ả - Ta có th s d ng các hàm s h c nh k t h p đ th c hi n m t chu i các phép toánể ử ụ ố ọ ả ế ợ ể ự ệ ộ ỗ . Ch ng h n đ tính giá tr trung bình c a hai nẳ ạ ể ị ủ ả h : C=(A+B) /2 Ta có th nh p vào nh sau :ể ậ ư I = imread('rice.png'); I2 = imread('cameraman.tif'); K = imdivide(imadd(I,I2), 2); % not recommended - Khi đ c s d ng v i ki u uint8 hay uint16 , m i hàm s h c c t k t qu c a nóượ ử ụ ớ ể ỗ ố ọ ắ ế ả ủ tr c khi truy n nó cho hàm thi p theo . S c t b này có th gi m đáng k l ngướ ề ế ự ắ ỏ ể ả ể ượ thông tin trong nh cu i cùng . M t cách làm t t h n đ th c hi n m t chu i các tínhả ố ộ ố ơ ể ự ệ ộ ỗ toán là s d ng hàm ử ụ imlincomb . Hàm này thi hành t t c các phép toán s h c trongấ ả ố ọ s k t h p tuy n tính c a đ chính xác kép và ch c t b k t qu cu i cùng :ự ế ợ ế ủ ộ ỉ ắ ỏ ế ả ố K = imlincomb(.5,I,.5,I2); % recommended K- H th ng to đệ ố ạ ộ - V trí trong m t nh có th đ c bi u di n trong các h th ng to đ khác nhau phị ộ ả ể ượ ể ễ ệ ố ạ ộ ụ thu c vào ng c nh . Có hai h th ng to đ trong Matlab là : h th ng to đ pixelộ ữ ả ệ ố ạ ộ ệ ố ạ ộ và h th ng to đ không gian .ệ ố ạ ộ 1. To đ pixel ạ ộ - Nhìn chung , ph ng pháp thu n ti n nh t cho vi c bi u di n v trí trong m t nh làươ ậ ệ ấ ệ ể ễ ị ộ ả s d ng to đ pixel . Trong h to đ này , nh đ c x lý nh m t l i c a cácử ụ ạ ộ ệ ạ ộ ả ượ ử ư ộ ướ ủ ph n t riêng bi t đ c đánh th t t đ nh t i đáy và t trái sang ph i .ầ ử ệ ượ ứ ự ừ ỉ ớ ừ ả - V i to đ pixel , thành ph n đ u tiên r ( hàng ) đ c tăng t khi đi t trên xu ngớ ạ ộ ầ ầ ượ ừ ừ ố d i trong khi c ( c t ) đ c tăng khi đi t trái sang ph i . H to đ pixel là giá trướ ộ ượ ừ ả ệ ạ ộ ị nguyên và kho ng gi a 1 và chi u dài c a hàng hay c t ả ữ ề ủ ộ - Có m t t ng ng 1-1 gi a to đ pixel và to đ Matlab s d ng đ mô t maộ ươ ứ ữ ạ ộ ạ ộ ử ụ ể ả tr n . S t ng ng này t o m t quan h g a ma tr n d li u nh và cách nh đ cậ ự ươ ứ ạ ộ ệ ữ ậ ữ ệ ả ả ượ hi n th . Ch ng h n , d li u cho pixel trên hàng th 5 , c t th 2 đ c l u tr t iể ị ẳ ạ ữ ệ ứ ộ ứ ượ ư ữ ạ ph n t (5,2) c a ma tr n .ầ ừ ủ ậ 2. To đ không gian ạ ộ 13 - Trong h to đ pixel , m t pixel đ c x lý nh m t đ n v riêng r đ c phân bi tệ ạ ộ ộ ượ ử ư ộ ơ ị ẽ ượ ệ duy nh t b i m t c p to đ ch ng h n (5,2 ) . T quan đi m này , m t v trí ch ngấ ở ộ ặ ạ ộ ẳ ạ ừ ể ộ ị ẳ h n (5,2) không có ý nghĩa . Tuy nhiên , s h u ích khi nghĩ đ n m t pixel nh m tạ ẽ ữ ế ộ ư ộ mi ng vá hình vuông . T quan đi m này , m t v trí ch ng h n (5.3,2.2) là có nghĩa vàế ừ ể ộ ị ẳ ạ đ c phân bi t v i (5,2) . Trong to đ không gian này , v trí trong m t nh đ cượ ệ ớ ạ ộ ị ộ ả ượ đ nh v trên m t m t ph ng và chúng đ c mô t b ng m t c p x và y ( không ph i rị ị ộ ặ ẳ ượ ả ằ ộ ặ ả và c nh to đ pixel ) . ư ạ ộ - H to đ không gian này g n t ng ng v i h to đ pixel trong m t ch ng m cệ ạ ộ ầ ươ ứ ớ ệ ạ ộ ộ ừ ự nào đó . Ch ng h n , to đ không gian c a đi m g a c a b t kì pixel nào đ c phânẳ ạ ạ ộ ủ ể ữ ủ ấ ượ bi t v i to đ pixel c a pixel đó . Cũng có m t vài khác bi t , tuy nhiên , trong toệ ớ ạ ộ ủ ộ ệ ạ đ pixel , góc trên trái c a m t nh là (1,1 ) trong khi trong to đ không gian , v tríộ ủ ộ ả ạ ộ ị này m c đ nh là (0.5,0.5 ) . S khác nhau này là do h to đ pixel là r i r c trong khiặ ị ự ệ ạ ộ ờ ạ to đ không gian là liên t c . Cũng v y , góc trên trái luôn là (1,1 ) trong h pixel ,ạ ộ ụ ậ ệ nh ng ta có th ch ra m t đi m g c không chính quy cho h to đ không gian . M tư ể ỉ ộ ể ố ệ ạ ộ ộ s khác bi t d gây nh m l n n a là quy c : th t c a các thành ph n n m ngangự ệ ễ ầ ẫ ữ ướ ứ ự ủ ầ ằ và th ng đ ng đ c ph c v cho kí hi u c a hai h th ng . Nh đã đ c p tr c đây ,ẳ ứ ượ ụ ụ ệ ủ ệ ố ư ề ậ ướ to đ pixel đ c đ i di n b i m t c p (r,c ) trong khi to đ không gian đ c bi uạ ộ ượ ạ ệ ở ộ ặ ạ ộ ượ ể di n b i (x,y) . Khi cú pháp cho m t hàm s d ng r và c , nó tham chi u đ n h to đễ ở ộ ử ụ ế ế ệ ạ ộ pixel . Khi cú pháp s d ng x, y nó đang ng m đ nh s d ng h to đ không gian . ử ụ ầ ị ử ụ ệ ạ ộ S d ng h to đ không gian không chính quy ử ụ ệ ạ ộ - Theo m c đ nh , to đ không gian c a m t nh t ng ng v i to đ pixel . Ch ngặ ị ạ ộ ủ ộ ả ươ ứ ớ ạ ộ ẳ h n , đi m gi a c a pixel t i (5,3) có m t to đ không gian là x=3, y=5 ( nh r ngạ ể ữ ủ ạ ộ ạ ộ ớ ằ th t c a to đ b đ o ng c ) . S t ng ng này làm đ n gi n nhi u hàm trongứ ự ủ ạ ộ ị ả ượ ự ươ ứ ơ ả ề toolbox . M t vài hàm ban đ u làm vi c v i to đ không gian h n là to đ pixelộ ầ ệ ớ ạ ộ ơ ạ ộ nh ng khi ta đang s d ng to đ không gian theo m c đ nh , ta có th ch ra v tríư ử ụ ạ ộ ặ ị ể ỉ ị trong to đ pixel ạ ộ - Trong m t s tình hu ng , tuy nhiên , ta có th mu n s d ng to đ không gianộ ố ố ể ố ử ụ ạ ộ không chính quy ( không m c đ nh ) . Ch ng h n , ta có th ch ra góc trên trái c a m tặ ị ẳ ạ ể ỉ ủ ộ nh t i đi m (19.0,7.5 ) thay cho (0.5,0,5 ) . N u ta g i m t hàm mà tr v to đ choả ạ ể ế ọ ộ ả ề ạ ộ nh này , to đ đ c tr l i s là giá tr trong h to đ không chính quy .ả ạ ộ ượ ả ạ ẽ ị ệ ạ ộ - Đ thành l p to đ không chính quy , ta có th ch ra Xdata và Ydata c a m t nhể ậ ạ ộ ể ỉ ủ ộ ả khi hi n th nó . Nh ng thu c tính này là véc t 2 ph n t đ đi u khi n kho ng c aể ị ữ ộ ơ ầ ử ể ề ể ả ủ 14 góc quay c a m t nh . Theo m c đ nh , m t nh A , Xdata là [1 size(A,2)] , và Ydataủ ộ ả ặ ị ộ ả là [1 size(A,1)] . Ch ng h n , n u A là 100 hàng x 200 c t , giá tr Xdata m c đ nh là [1ẳ ạ ế ộ ị ặ ị 200] và Ydata là [1 100] . Nh ng giá tr trong nh ng véc t này th c là to đ c aữ ị ữ ơ ự ạ ộ ủ đi m gi a c a pixel đ u tiên và cu i cùng vì v y , kho ng to đ th c đ c quay làể ữ ủ ầ ố ậ ả ạ ộ ự ượ l n h n , ch ng h n , n u Xdata là [ 1 200] thì kho ng c a x là [0.5 200.5] . Nh ngớ ơ ẳ ạ ế ả ủ ữ l nh sau hi n th m t nh s d ng các giá tr không m c đ nh Xdata và Ydata :ệ ể ị ộ ả ử ụ ị ặ ị A = magic(5); x = [19.5 23.5]; y = [8.0 12.0]; image(A,'XData',x,'YData',y), axis image, colormap(jet(25)) i - Hi n th nhể ị ả 1. Dùng hàm imview - Đ hi n th m t nh s d ng hàm imview , dùng hàm imview , ch rõ nh mà ta mu nể ể ị ộ ả ử ụ ỉ ả ố hi n th . Ta có th s d ng imview đ hi n th m t nh mà đã đ c nh p vào trongể ị ể ử ụ ể ể ị ộ ả ượ ậ không gian làm vi c c a Matlab ệ ủ moonfig = imread('moon.tif'); imview(moonfig); Ta cũng có th ch đ nh tên c a file nh nh trong ví d sau :ể ỉ ị ủ ả ư ụ imview('moon.tif'); - File nh ph i có m t trong th m c hi n t i ho c trong đ ng d n c a Matlab . C uả ả ặ ư ụ ệ ạ ặ ườ ẫ ủ ấ trúc này có th h u ích cho vi c quét qua nhi u nh . Tuy nhiên , l u ý , khi s d ngể ữ ệ ề ả ư ử ụ c u trúc này , d li u nh không đ c l u trong không gian làm vi c c a Matlab . ấ ữ ệ ả ượ ư ệ ủ - N u ta g i hàm imview mà không ch ra m t kì tham s nào , nó s hi n th m t h pế ọ ỉ ấ ố ẽ ể ị ộ ộ ch n file cho phép ta ch ra tên file mu n hi n th .ọ ỉ ố ể ị Xem nhi u nh ề ả - N u ta ch ra m t file mà ch a nhi u nh , hàm imview ch hi n th nh đ u tiênế ỉ ộ ứ ề ả ỉ ể ị ả ầ trong file đó . Đ xem t t c các nh trong file , s d ng hàm imread đ nh p m i nhể ấ ả ả ử ụ ể ậ ỗ ả vào trong không gian làm vi c c a Matlab sau đó g i hàm imview nhi u l n đ hi nệ ủ ọ ề ầ ể ể th m i nh riêng bi tị ỗ ả ệ 2. Dùng hàm imshow - Đ xem nh , ta có th s d ng hàm imshow thay cho imview . Ta s d ng imshowể ả ể ử ụ ử ụ đ hi n th m t nh đã đ c nh p vào trong không gian làm vi c nh ví d sau :ể ể ị ộ ả ượ ậ ệ ư ụ 15 moon = imread('moon.tif'); imshow(moon); Ta cũng có th ch ra tên c a file nh nh m t tham s truy n vào cho hàm nh ví dể ỉ ủ ả ư ộ ố ề ư ụ sau : imshow('moon.tif'); Khi s d ng c u trúc này thì d li u nh không đ c nh p vào trong không gian làmử ụ ấ ữ ệ ả ượ ậ vi c . Tuy nhiên ,ta có th mang nh vào trong không gian làm vi c b ng cách s d ngệ ể ả ệ ằ ử ụ hàm getimage . Hàm này s nh n d li u nh t handle c a m t đ i t ng nh hi nẽ ậ ữ ệ ả ừ ủ ộ ố ượ ả ệ t i . Ch ng h n :ạ ẳ ạ moon = getimage; S gán d li u nh t moon.tif vào bi n moon . ẽ ữ ệ ả ừ ế II . Xử lý trên cơ sở vùng chọn ( Region – Based Processing ) - Trong ph n này , ta s xem xét nh ng khía c nh sau :ầ ẽ ữ ạ + B ng thu ng : Cung c p các thu t ng đ c s d ng trong các phép x lýả ậ ữ ấ ậ ữ ượ ử ụ ử + Ch đ nh rõ m t vùng ta quan tâm : Mô t làm sao đ ch ra m t vùng quan tâm sỉ ị ộ ả ể ỉ ộ ử d ng hàm ụ roipoly + L c m t vùng : Di n t làm sao đ áp đ t m t phép l c lên m g vùng nh t đ nh c aọ ộ ễ ả ể ặ ộ ọ ộ ấ ị ủ nh s d ng hàm ả ử ụ roifilt2 + Tô đ y m t vùng : S d ng hàm roifill đ tô đ y m t vùng đã ch n ầ ộ ử ụ ể ầ ộ ọ 1. B ng các thu t ng :ả ậ ữ Tên thu t ngậ ữ Di n tễ ả Binary mask nh nh phân v i cùng kích th c nhẢ ị ớ ướ ư nh ta mu n x lý . M t n ch a giá tr 1ả ố ử ặ ạ ứ ị cho t t c các pixel thu c trong vùng taấ ả ộ quan tâm và ch a giá tr 0 cho các vùngứ ị khác Filling a region Là quá trình x lý đi n đ y ( hay tô màu )ử ề ầ m t vùng nh t đ nh b ng cách n i suy giáộ ấ ị ằ ộ tr pixel t vi n c a vùng . Quá trình x lýị ừ ề ủ ử 16 này có th đ c s d ng đ t o m t đ iể ượ ử ụ ể ạ ộ ố t ng trong m t nh d ng nh bi nượ ộ ả ườ ư ế m t khi chúng đ c thay th v i giá trấ ượ ế ớ ị đ c tr n v i vùng n n ượ ộ ớ ề Filtering a region Áp đ t m t phép l c lên m t vùng nh tặ ộ ọ ộ ấ đ nh . Ch ng h n , ta có th áp đ t m t sị ẳ ạ ể ặ ộ ự phép l c đi u ch nh c ng đ lên m tọ ề ỉ ườ ộ ộ vùng c a nhủ ả N i suyộ Ph ng pháp đ c s d ng đ cươ ượ ử ụ ể ướ l ng m t giá tr nh m t v trí nh tượ ộ ị ả ở ộ ị ấ đ nh gi a các pixel c a nhị ữ ủ ả Masked filtering Thao tác ch áp đ t m t phép l c lên m tỉ ặ ộ ọ ộ vùng quan tâm trong m t nh đ c phânộ ả ượ bi t b ng m t n nh phân . Giá tr đ cệ ằ ặ ạ ị ị ượ l c đ c tr l i cho các pixel mà m t nọ ượ ả ạ ặ ạ nh phân ch a giá tr 1 , giá tr không đ cị ứ ị ị ượ l c đ c tr v cho các pixel mà m t nọ ượ ả ề ặ ạ nh phân ch a giá tr 0ị ứ ị 2. Ch đ nh m t vùng quan tâm trên nh ỉ ị ộ ả - M t vùng quan tâm là m t ph n c a nh mà ta mu n l c ho c thi hành các thao tácộ ộ ầ ủ ả ố ọ ặ khác trên nó . Ta đ nh nghĩa m t vùng quan tâm b ng cách t o ra m t m t n nh phân ,ị ộ ằ ạ ộ ặ ạ ị đó là m t nh nh phân có cùng kích th c v i nh ta mu n x lý . M t n ch a giá trộ ả ị ướ ớ ả ố ử ặ ạ ứ ị 1 cho t t c các pixel n m trong vùng quan tâm và ch a giá tr 0 cho các pixel nh ngấ ả ằ ứ ị ở ữ vùng khác . a - Ch n m t hình đa giácọ ộ - Ta có th s d ng hàm ể ử ụ roipoly đ ch ra m t vùng hình đa giác quan tâm . N u ta g iể ỉ ộ ế ọ hàm roipoly không có tham s , con tr thay đ i thành hình ch th p khi nó đi qua nhố ỏ ổ ữ ậ ả đang đ c hi n th trên tr c hi n t i . Sau đó , ta có th ch ra đ nh c a đa giác b ngượ ể ị ụ ệ ạ ể ỉ ỉ ủ ằ cách kích tr chu t trên nh . Khi th c hi n xong vi c ch n các đ nh , nh n phím Enterỏ ộ ả ự ệ ệ ọ ỉ ấ đ k t thúc . hàm roipoly tr v m t nh nh phân có cùng kích th c v i nh g cể ế ả ề ộ ả ị ứơ ớ ả ố ch a giá tr 1 trong vùng đ c ch n và 0 ph n còn l i .ứ ị ượ ọ ở ầ ạ 17 I = imread('pout.tif'); imshow(I) BW = roipoly; - Ta cũng có th s d ng hàm roipoly mà không t ng tác . Cú pháp c a hàm này nhể ử ụ ươ ủ ư sau : BW = roipoly(I,c,r) BW = roipoly(I) BW = roipoly(x,y,I,xi,yi) [BW,xi,yi] = roipoly(...) [x,y,BW,xi,yi] = roipoly(...) Di n gi iễ ả + BW=roipoly(I,c,r) tr l i m t vùng quan tâm đ c l a ch n b i hình đa giác đ cả ạ ộ ượ ự ọ ở ượ mô t b i véc t c và r . BW là m t nh nh phân có cùng kích th c v i nh ban đ u .ả ở ơ ộ ả ị ướ ớ ả ầ + BW=roipoly(I) : Hi n th nh I trên màn hình và đ ta ch ra vùng ch n v i trể ị ả ể ỉ ọ ớ ỏ chu t . N u b qua I , roipoly ho t đ ng trên nh tr c hi n t i . S d ng click chu tộ ế ỏ ạ ộ ả ở ụ ệ ạ ử ụ ộ đ thêm các đ nh t i đa giác . B ng cách nh n Backspace ho c Delete đ xoá các đ nhể ỉ ớ ằ ấ ặ ể ỉ đã ch n tr c đó . Khi ch n xong , nh n Enter đ k t thúc vi c ch n ọ ướ ọ ấ ể ế ệ ọ +BW=roipoly(x,y,I,xi,yi) : S d ng véc t x và y đ t o l p h to đ không gianử ụ ơ ể ạ ậ ệ ạ ộ không m c đ nh . xi ,yi là véc t có cùng chi u dài ch ra các đ nh c a đa giác nh cácặ ị ơ ề ỉ ỉ ủ ư v trí trong h to đ này .ị ệ ạ ộ + [BW , xi,yi] = roipoly(…) tr l i to đ c a đa giác trong xi , yi . Chú ý r ng roipolyả ạ ạ ộ ủ ằ luôn luôn t o ra m t đa giác kín . ạ ộ + [x,y,BW,xi,yi]=roipoly(…) tr l i XData và Ydata trong x và y , m t n nh trongả ạ ặ ạ ả BW và đ nh c a đa giác trong xi và yi ỉ ủ - N u roipoly đ c g i không có tham s ra , nh k t qu s đ c hi n th trên m tế ượ ọ ố ả ế ả ẽ ượ ể ị ộ hình m i .ớ L p tr giúpớ ợ - nh đ u vào I có th thu c l p uint8 , uint16 ho c double . Ả ầ ể ộ ớ ặ nh ra BW thu c l pẢ ộ ớ logical . T t c các đ u vào và ra khác thu c l p double ấ ả ầ ộ ớ Ví d ụ I = imread('eight.tif'); c = [222 272 300 270 221 194]; 18 r = [21 21 75 121 121 75]; BW = roipoly(I,c,r); imshow(I) figure, imshow(BW) b – Các ph ng pháp l a ch n khácươ ự ọ - Hàm roipoly cung c p m t cách d dàng đ t o m t m t n nh phân . Tuy nhiên , taấ ộ ễ ể ạ ộ ặ ạ ị có th s d ng b t c nh nh phân nào làm m t n mi n là nh đó có cùng kíchể ử ụ ấ ứ ả ị ặ ạ ễ ả th c v i nh đang đ c l c . Ch ng h n , gi s ta mu n l c nh c ng đ I , chướ ớ ả ượ ọ ẳ ạ ả ử ố ọ ả ườ ộ ỉ l c nh ng pixel mà giá tr c a nó l n h n 0.5 . Ta có th t o m t m t n t ng ngọ ữ ị ủ ớ ơ ể ạ ộ ặ ạ ươ ứ v i l nh :ớ ệ BW = (I > 0.5); - Ta cũng có th s d ng hàm poly2mask đ t o m t m t n nh phân . Không gi ngể ử ụ ể ạ ộ ặ ạ ị ố hàm roipoly , poly2mask không yêu c u m t nh vào . Ngoài ra , ta còn có th s d ngầ ộ ả ể ử ụ hàm roicolor đ đ nh nghĩa m t vùng quan tâm trên c s m t màu ho c m t vùngể ị ộ ơ ở ộ ặ ộ c ng đ nào đó . Cú pháp c a hàm này nh sau :ườ ộ ủ ư BW = roicolor(A,low,high) BW = roicolor(A,v) Di n gi i ễ ả - Hàm roicolor l a ch n m t vùng quan tâm trong m t nh ch s ho c nh c ng đự ọ ộ ộ ả ỉ ố ặ ả ườ ộ và tr v m t nh nh phân ả ề ộ ả ị + BW=roicolor(A,low,high) : tr v m t vùng quan tâm đ c l a ch n v i nh ng pixelả ề ộ ượ ự ọ ớ ữ n m trong kho ng gi a low và high trong b n đ màu s c ằ ả ữ ả ồ ắ BW = (A >= low) & (A <= high) BW là m t nh nh phân ộ ả ị +BW = roicolor(A,v): Tr v m t vùng quan tâm đ c l a ch n v i nh ng pixel trongả ề ộ ượ ự ọ ớ ữ A mà h p v i các giá tr trong véc t v . BW là m t nh nh phân .ợ ớ ị ơ ộ ả ị L p tr giúpớ ợ - nh vào A ph i thu c l p numeric . nh ra BW thu c l p logical Ả ả ộ ớ Ả ộ ớ Ví d ụ I = imread('rice.png'); BW = roicolor(I,128,255); imshow(I); 19 figure, imshow(BW) 2. L c m t vùngọ ộ - Ta có th s d ng hàm roifilt2 đ x lý m t vùng quan tâm . Khi ta g i hàm roifilt2 ,ể ử ụ ể ử ộ ọ ta ch ra m t nh c ng đ , m t m t n nh phân và m t b l c . Hàm roifilt2 l c nhỉ ộ ả ườ ộ ộ ặ ạ ị ộ ộ ọ ọ ả vào và tr v m t nh mà ch a các giá tr đã đ c l c cho các pixel mà m t n nhả ề ộ ả ứ ị ượ ọ ặ ạ ị phân ch a 1 và các giá tr cho các pixel mà m t n nh phân ch a 0 . Ki u l c này đ cứ ị ặ ạ ị ứ ể ọ ượ g i là l c có m t n . Cú pháp c a hàm roifilt2 nh sau :ọ ọ ặ ạ ủ ư J = roifilt2(h,I,BW) J = roifilt2(I,BW,fun) J = roifilt2(I,BW,fun,P1,P2,...) Di n gi i ễ ả + J=roifilt2(h,I,BW ) : L c d li u trong I v i b l c tuy n tính hai chi u h . BW làọ ữ ệ ớ ộ ọ ế ề m t nh nh phân có cùng kích th c v i nh g c và đ c s d ng nh m t m t nộ ả ị ướ ớ ả ố ượ ử ụ ư ộ ặ ạ cho vi c l c . Hàm roifilt2 tr v m t nh ch a các giá tr đ c l c trong vùng ch nệ ọ ả ề ộ ả ứ ị ượ ọ ở ọ ( hay các pixel mà BW có giá tr 1 ) ị + J=roifilt2(I,BW,fun) : X lý d li u trong I s d ng hàm fun . K t qu , J ch a cácử ữ ệ ử ụ ế ả ứ giá tr đã đ c tính toán cho các pixel mà t i đó BW ch a 1 và giá tr th c trong I choị ượ ạ ứ ị ự các pixel mà t i đó BW ch a giá tr 0 .ạ ứ ị + J=roifilt2(I,BW,fun,P1,P2…) Truy n thêm các tham s P1,P2 cho hàm funề ố L p tr giúpớ ợ - V i c u trúc mà có ch a b l c h , nh vào I có th thu c l p uint ,uint16 ho cớ ấ ứ ộ ọ ả ể ộ ơ ặ double và nh ra J có cùng l p v i nh vào . ả ớ ớ ả Ví d ụ I = imread('eight.tif'); c = [222 272 300 270 221 194]; r = [21 21 75 121 121 75]; BW = roipoly(I,c,r); h = fspecial('unsharp'); J = roifilt2(h,I,BW); imshow(J), figure, imshow(J) Đ hi u rõ h n v áp d ng b l c cho m t vùng , ta hãy xem xét c th m t ví dể ể ơ ề ụ ộ ọ ộ ụ ể ộ ụ sau : 20 1. Đ c m t nh :ọ ộ ả I = imread('pout.tif'); 2. T o m t n : S d ng chu t đ t o vùng ch n và l y m t n tr v qua BWạ ặ ạ ử ụ ộ ể ạ ọ ấ ặ ạ ả ề 3. T o b l c ạ ộ ọ h = fspecial('unsharp'); 4. G i hàm roifilt2 , ch ra nh c n l c , m t n và b l c ọ ỉ ả ầ ọ ặ ạ ộ ọ I2 = roifilt2(h,I,BW); imshow(I) figure, imshow(I2) Ch đ nh thao tác l cỉ ị ọ - Hàm roifilt2 cũng cho phép ta ch đ nh m t hàm riêng đ tao tác trên vùng quan tâm .ỉ ị ộ ể Ví d sau s d ng hàm imadjust đ làm sáng m t ph n c a nhụ ử ụ ể ộ ầ ủ ả 1. Đ c m t nh ọ ộ ả I = imread('cameraman.tif'); 2. T o m t n : Trong ví d này , m t n là m t nh nh phân ch a ch . nh m t nạ ặ ạ ụ ặ ạ ộ ả ị ứ ữ Ả ặ ạ ph i đ c c t đ có cùng kích th c v i nh đ c l c ả ượ ắ ể ướ ớ ả ượ ọ BW = imread('text.png'); mask = BW(1:256,1:256); 3. T o b l cạ ộ ọ f = inline('imadjust(x,[],[],0.3)'); 4. G i hàm roifilt2 , ch ra nh đ c l c , m t n và b l c . nh k t qu I2 có chọ ỉ ả ượ ọ ặ ạ ộ ọ Ả ế ả ữ nh b kh c trên nó ư ị ắ I2 = roifilt2(I,mask,f); imshow(I2) 3. Đi n đ y m t vùngề ầ ộ - Ta có th s d ng hàm roifill đ đi n đ y m t vùng quan tâm , tuy n tính hóa t biênể ử ụ ể ề ầ ộ ế ừ c a vùng . Hàm này s h u ích cho vi c ch nh s a nh , bao g m xoá các chi ti t ngoàiủ ẽ ữ ệ ỉ ử ả ồ ế ho c gi t oặ ả ạ - Hàm roifill th c thi vi c đi n đ y s d ng m t ph ng pháp tuy n tính hoá trên cự ệ ề ầ ử ụ ộ ươ ế ơ s c a ph ng trình Laplace . Ph ng pháp này d n đ n vùng đ c đi n m t nh tở ủ ươ ươ ẫ ế ượ ề ượ ấ có th .ể 21 - V i roifill , ta l a ch n m t vùng quan tâm b ng tr chu t . Khi l a ch n xong , hàmớ ự ọ ộ ằ ỏ ộ ự ọ roifill tr l i m t nh v i vùng đ c ch n đã b đi n đ y ả ạ ộ ả ớ ượ ọ ị ề ầ - Ví d sau s d ng hàm roifill đ s a nh . Đ ng vi n c a vùng đ c ch n đ cụ ử ụ ể ử ả ườ ề ủ ượ ọ ượ hi n th là màu đ trên nh g c ể ị ỏ ả ố load trees I = ind2gray(X,map); imshow(I) I2 = roifill; imshow(I2) Cú pháp c a hàm roifillủ J = roifill(I,c,r) J = roifill(I) J = roifill(I,BW) [J,BW] = roifill(...) J = roifill(x,y,I,xi,yi) [x,y,J,BW,xi,yi] = roifill(...) Di n gi iễ ả - Hàm roifill đi n đ y trong m t vùng đa giác trong m t nh c ng đ . Nó tuy n tínhề ầ ộ ộ ả ườ ộ ế m t cách m t mà các giá tr pixel t phía vi n c a đa giác vào phía trong đa giác b ngộ ượ ị ừ ề ủ ằ cách gi i ph ng trình Laplace . Hàm roifill có th đ c s d ng , ch ng h n đ xoáả ươ ể ượ ử ụ ẳ ạ ể m t đ i t ng nh trong m t nh ộ ố ượ ỏ ộ ả + J=roifill(I,c,r) : Đi n đ y m t đa giác đ c ch ra b i các véc t có cùng chi u dài cề ầ ộ ượ ỉ ở ơ ề và r . Chúng ch a to đ hàng - c t c a các pixel trên các đ nh c a đa giác . ứ ạ ộ ộ ủ ỉ ủ + J=roifill(I) : Hi n th nh I trên màn hình và đ ta l a ch n vùng đa giác b ng trể ị ả ể ự ọ ằ ỏ chu t . N u b qua I , hàm thao tác trên nh đang ch n . S d ng phím Backspaceộ ế ỏ ả ọ ử ụ ho c Delete đ xoá các đ nh tr c đó đã ch n . Khi ch n xong , dùng phím Enter đặ ể ỉ ướ ọ ọ ể k t thúc ch n ế ọ + J=roifill(I,BW) : S d ng BW ( m t nh nh phân cùng kích th c v i I ) nh m tử ụ ộ ả ị ướ ớ ư ộ m t n . Hàm roifill s đi n đ y vùng trong I t ng ng v i các pixel khác 0 trong BWặ ạ ẽ ề ầ ươ ứ ớ . N u có nhi u vùng , roifill thi hành tuy n tính hoá trên m i vùng đ c l p ế ề ế ỗ ộ ậ 22 +[J , BW ]=roifill(…) : tr v m t n nh phân đ c s d ng đ tính toán pixel nào Iả ề ặ ạ ị ượ ử ụ ể s đi n đ y . BW là m t nh nh phân có cùng kích th c v i I ẽ ề ầ ộ ả ị ướ ớ + J=roifill(x,y,I,xi,yi) : S d ng véc t x và y đ thành l p m t h to đ không gianử ụ ơ ể ậ ộ ệ ạ ộ không m c đ nh . xi , yi có cùng đ dài ch ra đ nh c a đa giác ặ ị ộ ỉ ỉ ủ + [x,y,J,BW,xi,yi]=roifill(…) : tr l i Xdata và Ydata trong x và y , nh ra J , m t nả ạ ả ặ ạ nh BW và đ nh đa giác trong hai véc t xi , yi .ả ỉ ơ L p tr giúpớ ợ - nh vào I – uint8 , uint16 ho c double . BW có th là b t c ki u s ho c logical . Ả ặ ể ấ ứ ể ố ặ Ví d ụ I = imread('eight.tif'); c = [222 272 300 270 221 194]; r = [21 21 75 121 121 75]; J = roifill(I,c,r); imshow(I) figure, imshow(J) III – Xử lý ảnh mờ 1. B ng thu t ngả ậ ữ Tên thu t ngậ ữ Di n gi iễ ả deconvolution X lý ng c l i v i hi u ng xoáy , cu nử ượ ạ ớ ệ ứ ố Distortion operator Toán t mô t m t quá trình nh nh nử ả ộ ả ậ đ c khác v i nh ban đ u . Distortionượ ớ ả ầ đ c gây ra b i m t hàm PSF ch là m tượ ở ộ ỉ ộ trong nh ng ki u distortionữ ể Optical transfer function(OTF) Trong vùng t n s , OTF mô t đáp ngầ ố ả ứ c a m t h th ng tuy n tính , v trí khôngủ ộ ệ ố ế ị bi n đ i v i m t xung vào . ế ổ ớ ộ OTF là m tộ bi n đ i Fourier c a hàm PSFế ổ ủ Point spread function ( PSF) Trong mi n không gian , PSF di n t c pề ễ ả ấ b c mà m t h th ng quang h c làm mậ ộ ệ ố ọ ờ m t đi m sáng . ộ ể PSF là bi n đ i Fourierế ổ ng c c a OTFượ ủ 23 2. Th nào là làm m ?ế ờ a - Nguyên nhân c a s m ủ ự ờ - S làm m hay s phai nh t c a m t nh có th gây ra b i nhi u tác nhân :ự ờ ự ạ ủ ộ ả ể ở ề + Chuy n đ ng trong khi capture nh - b i camera ho c khi th i gian l sáng nhi uể ộ ả ở ặ ờ ộ ề đ c s d ng - b i v tượ ử ụ ở ậ + Ngoài vùng tiêu c c a ng kính , s d ng m t ng kính có góc m r ng , s h nự ủ ố ử ụ ộ ố ở ộ ự ỗ lo n c a môi tr ng , th i gian l sáng ng n … s làm gi m s l ng phôtôn đ cạ ủ ườ ờ ộ ắ ẽ ả ố ượ ượ b t gi (captured) ắ ữ b - Các ch đ ch ng m nhế ộ ố ờ ả - M t nh b m hay b phai nh t có th đ c mô t v n t t b i ph ng trình g=Hf+nộ ả ị ờ ị ạ ể ượ ả ắ ắ ở ươ trong đó + g : nh b m Ả ị ờ + H : Tác nhân làm méo cũng đ c g i là PSF .ượ ọ + f : nh g c Ả ố + n : Nhi u ph , đ c t o ra trong quá trình nh n nh , nó làm h ng nh ễ ụ ượ ạ ậ ả ỏ ả Chú ý : nh f th c t không t n t i . nh này đ i di n cho b c nh mà ta có n u tìnhẢ ự ế ồ ạ Ả ạ ệ ứ ả ế tr ng thu nh n nh là hoàn h o ạ ậ ả ả T m quan tr ng c a PSFầ ọ ủ - D a trên ch đ này , tác v chính c a vi c ch ng làm m là ự ế ộ ụ ủ ệ ố ờ Deconvolve nh b mả ị ờ v i PSF . Đ minh ho , ví d này s l y 3 nh không b m và c ý làm m chúngớ ể ạ ụ ẽ ấ ả ị ờ ố ờ b ng cách ằ convolve nó v i PSF . Ví d s d ng hàm fspecial đ t o m t PSF môớ ụ ử ụ ể ạ ộ ph ng m t chuy n đ ng m , ch ra chi u dài c a m tính b ng pixel ( LEN=31 ) vàỏ ộ ể ộ ờ ỉ ề ủ ờ ằ góc m tính theo đ ( THETA=11) . M t khi PSF đ c t o , ví d s d ng hàmờ ộ ộ ượ ạ ụ ử ụ imfilter đ ể convolve PSF v i nh g c I đ t o nh b làm m Blurred .ớ ả ố ể ạ ả ị ờ I = imread('peppers.png'); I = I(60+[1:256],222+[1:256],:); % crop the image figure; imshow(I); title('Original Image'); LEN = 31; THETA = 11; PSF = fspecial('motion',LEN,THETA); % create PSF Blurred = imfilter(I,PSF,'circular','conv'); 24 figure; imshow(Blurred); title('Blurred Image'); 3. S d ng các hàm khôi ph c nh m ử ụ ụ ả ờ - Toolbox x lý nh c a Matlab g m có 4 hàm khôi ph c nh m bao g m :ử ả ủ ồ ụ ả ờ ồ +deconvwnr : S d ng b l c Wienerủ ụ ộ ọ + deconvreg : S d ng b l c đ c quy t c hoá ử ụ ộ ọ ượ ắ + deconvlucy : S d ng gi i thu t Lucy-Richardsonử ụ ả ậ + đeconvblind : S d ng gi i thu t ử ụ ả ậ blind deconvolution - T t c nh ng hàm này ch p nh n m t PSF và m t nh b m nh là các tham sấ ả ữ ấ ậ ộ ộ ả ị ờ ư ố chính c a nó .V i hai hàm đ u tiên , ta cung c p m t s thông tin v nhi u đ gi m sủ ớ ầ ấ ộ ố ề ễ ể ả ự khu ch đ i nhi u đ n m c có th trong quá trình khôi ph c .ế ạ ễ ế ứ ể ụ - Hàm deconvlucy thi hành m t cách nhanh chóng gi i thu t Lucy-Richardson . Hàmộ ả ậ này th c hi n nhi u vòng l p , s d ng kĩ thu t t i u và th ng kê Poisson . V i hàmự ệ ề ặ ử ụ ậ ố ư ố ớ này , ta không c n ph i cung c p thông tin v nhi u ph trong nh b “b n”ầ ả ấ ề ễ ụ ả ị ẩ - Hàm deconvblind thi hành gi i thu t blind deconvolution mà không c n nh n ra PSF .ả ậ ầ ậ Khi ta g i hàm deconvblind , ta truy n m t tham s nh là gía tr đoán bi t ban đ u ọ ề ộ ố ư ị ế ầ ở PSF . Hàm deconvblind tr l i m t PSF đã đ c khôi ph c đ khôi ph c nh . S thiả ạ ộ ượ ụ ể ụ ả ự hành s d ng cùng ch đ suy gi m và l p nh hàm deconvlucy .ử ụ ế ộ ả ặ ư Chú ý : Ta có th c n ph i thi hành nhi u quá trình kh m l p đi l p l i , m i l nể ầ ả ề ử ờ ặ ặ ạ ỗ ầ thay đ i tham s truy n vào hàm kh m cho t i khi thu đ c m t nh g n x p x v iổ ố ề ử ờ ớ ượ ộ ả ầ ấ ỉ ớ nh g c .ả ố - Đ tránh b rung đ ng trong nh đ c kh nhi u , ta có th s d ng hàm edgetaperể ị ộ ả ượ ử ễ ể ử ụ đ ti n x lý nh tr c khi truy n nó cho hàm kh m .ể ề ử ả ướ ề ử ờ a - Kh m v i b l c Wienerử ờ ớ ộ ọ - S d ng hàm deconvwnr đ kh m m t nh s d ng b l c Wiener . B l c này cóử ụ ể ử ờ ộ ả ử ụ ộ ọ ộ ọ th đ c s d ng r t hi u qu khi đ c tính t n s c a nh và nhi u ph là đã bi t ítể ượ ử ụ ấ ệ ả ặ ầ ố ủ ả ễ ụ ế nh t là vài b c . Trong tr ng h p không có nhi u , b l c Wiener gi m t i b l cấ ậ ườ ợ ễ ộ ọ ả ớ ộ ọ đ o lý t ng .ả ưở - Ví d sau kh nhi u trong m t nh b m đ c t o tr c đây , ch ra cùng m t hàmụ ử ễ ộ ả ị ờ ượ ạ ướ ỉ ộ PSF đ c s d ng đ t o m . Ví d này cũng minh ho t m quan tr ng c a vi c bi tượ ử ụ ể ạ ờ ụ ạ ầ ọ ủ ệ ế v PSF – hàm gây ra m . Khi chúng ta bi t chính xác v PSF , k t qu c a

Các file đính kèm theo tài liệu này:

  • pdfGiáo trình xử lý ảnh.pdf
Tài liệu liên quan