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 vi c khề ờ ế ề ế ả ủ ệ ử
m có th khá hi u qu .ờ ể ệ ả
25