I – Các kiểu ảnh , các thao tác ảnh cơ bản trong Toolbox



M?C L?C TOC \o "1-3" \h \z \u I – Các ki?u ?nh , các thao tác ?nh c? b?n trong Toolbox PAGEREF _Toc477599146 \h 2II - X? l? trên c? s? vùng ch?n ( Region – Based Processing ) PAGEREF _Toc477599147 \h 17III – X? l? ?nh m? PAGEREF _Toc477599148 \h 24IV – Màu s?c PAGEREF _Toc477599149 \h 37I – Các ki?u ?nh , các thao tác ?nh c? b?n trong Toolbox1 . ?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 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 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 .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 MULTIimshow(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 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 OnlineChuy?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 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 uint16Chú ? : 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 RGBRGB=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 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 clownwhos Name Size Bytes Class X 200x320 512000 double array caption 2x1 4 char array map 81x3 1944 double arrayGrand total is 64245 elements using 513948 bytesimwrite(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- 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.BitDepthans =1Chú ? : 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? - 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');- ??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,[])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' 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.dcmdicomwrite(I,'h:\matlab\tmp\ankle.dcm')Ghi metadata lên m?t file DICOMKhi 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.FileModDateans =24-Dec-2000 19:54:47S? 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.FileModDateans =16-Mar-2003 15:32:43- 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ònCh?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 ?nh :C=(A+B) /2Ta 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- 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 - 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 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))- Hi?n th? ?nh1. 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?t2. 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 :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ácFilling a regionLà 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? 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 ?nhN?i suyPh??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 ?nhMasked filteringThao 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? 02. 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 .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];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);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 funL?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 :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 BW3. 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 ?nh1. ??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?cf = 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? .- 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 treesI = ind2gray(X,map);imshow(I)I2 = roifill;imshow(I2)Cú pháp c?a hàm roifillJ = 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 +[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?ideconvolutionX? l? ng??c l?i v?i hi?u ?ng xoáy , cu?nDistortion operatorToá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 distortionOptical 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 PSFPoint 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 OTF2. 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 imagefigure; imshow(I); title('Original Image');LEN = 31;THETA = 11;PSF = fspecial('motion',LEN,THETA); % create PSFBlurred = imfilter(I,PSF,'circular','conv');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? .1. ??c m?t ?nh vào kh?ng gian làm vi?c ( ?? t?ng t?c quá trình kh? m? , ví d? này c?ng c?t ?nh ) I = imread('peppers.png');I = I(10+[1:256],222+[1:256],:);figure;imshow(I);title('Original Image');1600200228600002. T?o hàm PSF LEN = 31;THETA = 11;PSF = fspecial('motion',LEN,THETA);3. T?o s? m? gi? trên ?nhBlurred = imfilter(I,PSF,'circular','conv');figure; imshow(Blurred);title('Blurred Image');center190500004. Kh? m? cho ?nh wnr1 = deconvwnr(Blurred,PSF);figure;imshow(wnr1);title('Restored, True PSF');148590015240000Tinh ch? k?t qu? - Ta có th? tác ??ng lên k?t qu? b?ng cách cung c?p các giá tr? cho các tham s? tu? ch?n ???c tr? giúp b?i hàm deconvwnr .b - Kh? m? v?i b? l?c ???c quy t?c hoá - S? d?ng hàm deconvreg ?? kh? m? m?t ?nh s? d?ng b? l?c ???c quy t?c hoá . M?t b? l?c ki?u này có th? ???c s? d?ng hi?u qu? khi th?ng tin v? nhi?u ph? ???c bi?t m?t cách h?n ch? - ?? minh ho? , ví d? này m? ph?ng vi?c làm m? m?t ?nh s? d?ng m?t hàm PSF l?c Gaussian v?i m?t ?nh ( s? d?ng imfilter ) . Nhi?u ph? trong ?nh ???c m? ph?ng b?ng cách thêm vào m?t nhi?u Gaussian c?a bi?n V vào ?nh b? m? ( s? d?ng hàm imnoise ) 1. ??c m?t ?nh vào trong kh?ng gian làm vi?c . Ví d? này s? c?t ?nh ?? gi?m kích th??c c?a ?nh .I = imread('tissue.png');I = I(125+[1:256],1:256,:);figure; imshow(I); title('Original Image');1760220119380002. T?o hàm PSF ?? làm m? ?nh PSF = fspecial('gaussian',11,5);3. Làm m? ?nh và thêm nhi?u vào ?nh Blurred = imfilter(I,PSF,'conv');V = .02;BlurredNoisy = imnoise(Blurred,'gaussian',0,V);figure;imshow(BlurredNoisy);title('Blurred and Noisy Image');17602202011680004. S? d?ng hàm deconvreg ?? kh? m? ?nh , ch? ra hàm PSF ???c s? d?ng ?? làm m? ?nh và nhi?u NP NP = V*prod(size(I)); [reg1 LAGRA] = deconvreg(BlurredNoisy,PSF,NP);figure,imshow(reg1),title('Restored Image');176022010477500C - Kh? m? v?i gi?i thu?t Lucy- Richardson - S? d?ng hàm deconvlucy ?? kh? m? m?t ?nh b?ng cách s? d?ng gi?i thu?t Lucy-Richardson . Hàm này có th? ???c s? d?ng hi?u qu? khi bi?t ???c hàm PSF nh?ng bi?t ít v? nhi?u tác ??ng ph? lên ?nh - Hàm deconvlucy thi hành vài s? ?i?u h?p t?i gi?i thu?t Lucy-Richardson . S? d?ng nh?ng ?i?u h?p này ta có th? :+ Gi?m tác ??ng c?a s? m? r?ng nhi?u trên m?t ?nh kh?i ph?c + Gi?i thích ???c tính kh?ng ??ng nh?t c?a ch?t l??ng ?nh + ?i?u khi?n camera ??c h?t nhi?u n?n + C?i thi?n ?? ph?n gi?i c?a ?nh ph?c h?i b?ng cách l?y m?u ph?Gi?m tác ??ng c?a s? m? r?ng nhi?u- S? m? r?ng nhi?u là m?t v?n ?? th??ng g?p c?a ph??ng pháp gi?ng c?c ??i ( maximum likelihood ) c? g?ng l?p ??y d? li?u g?n nh?t có th? . Sau m?t s? vòng l?p , ?nh ???c kh?i ph?c có th? có hình l?m ??m , ??c bi?t v?i m?t ??i t??ng ph?ng ???c quan sát t?i t? s? tín hi?u / nhi?u nh? . Nh?ng ??m này kh?ng ??i di?n cho b?t kì m?t c?u trúc nào trong ?nh th?c nh?ng là gi? t?o c?a vi?c làm kh?p nhi?u trong ?nh quá g?n .- ?? ?i?u khi?n s? m? r?ng nhi?u , hàm deconvlucy s? d?ng m?t tham s? g?i là DAMPAR . Tham s? này ch? ra m?c ng??ng cho ?? l?ch c?a ?nh k?t qu? so v?i ?nh g?c . V?i các pixel mà l?ch kh?i vùng l?n c?n c?a các giá tr? g?c c?a chúng , vòng l?p b? treo .- Damping c?ng ???c s? d?ng ?? gi?m rung ( ringing ) – hình d?ng c?a c?u trúc t?n s? cao trong ?nh kh?i ph?c . Ringing kh?ng c?n thi?t ??n k?t qu? c?a m? r?ng nhi?u . Tính kh?ng ??ng nh?t c?a ch?t l??ng ?nh- B?t kì s? bi?n th? nào c?a ?nh kh?i ph?c th?c là do d? li?u có th? ch?a nh?ng pixel h?ng ho?c ch?t l??ng c?a pixel nh?n ???c bi?n ??i theo th?i gian và v? trí . B?ng cách ch? ra tham s? m?ng WEIGHT v?i hàm deconvlucy , ta có th? ch? ra r?ng nh?ng pixel nào ?ó trong ?nh b? b? qua . ?? b? qua m?t pixel , gán m?t tr?ng l??ng 0 t?i m?t ph?n t? trong m?ng WEIGHT t??ng ?ng v?i pixel trong ?nh .- Gi?i thu?t h?i t? trên các giá tr? ?? ?oán bi?t ???c v?i các pixel h?ng trên c? s? c?a th?ng tin t? các pixel l?n c?n . S? bi?n ??i trong ?áp ?ng phát hi?n t? pixel t?i pixel có th? ???c ?i?u ti?t b?i m?ng WEIGHT . Thay cho vi?c gán m?t giá tr? tr?ng l??ng 1 t?i các pixel t?t , ta có th? ch? ra các giá tr? và tr?ng l??ng mà các pixel tu? thu?c vào l??ng các flat-field correction?i?u khi?n camera ??c h?t nhi?u- Nhi?u trong thi?t b? CCD có hai thành ph?n chính :+ Ph?ton k? ??n nhi?u v?i m?t ph?n b? Poisson+ ??c toàn b? nhi?u v?i ph?n b? Gauss- Vòng l?p Lucy-Richardson th?c ch?t nh?n ra ki?u nhi?u ??u tiên . Ta ph?i nh?n ra ki?u nhi?u th? hai , n?u kh?ng nó có th? là nguyên nh?n các pixel v?i các ph?ton t?i ? m?c th?p s? nh?n giá tr? ?m .- Hàm deconvlucy s? d?ng tham s? vào READOUT ?? ?i?u khi?n camera ??c toàn b? nhi?u . Giá tr? c?a tham s? này ?i?n hình là t?ng c?a nhi?u t?ng c?ng và nhi?u n?n . Giá tr? c?a tham s? READOUT ch? ra m?t ?? l?ch ??m b?o r?ng t?t c? các giá tr? ??u d??ng .Ví d? : S? d?ng hàm deconvlucy ?? kh? m? m?t ?nh- ?? minh ho? , ví d? này s? d?ng hàm deconvlucy , nó m? ph?ng m?t ?nh b? m? và nhi?u b?ng cách convolve m?t b? l?c Gauss v?i m?t ?nh ( s? d?ng hàm imfilter ) và sau ?ó thêm nhi?u Gauss ( s? d?ng hàm imnoise ) .1. ??c m?t ?nh vào kh?ng gian làm vi?c .I = imread('board.tif');I = I(50+[1:256],2+[1:256],:);figure;imshow(I);title('Original Image');1417320246380002. T?o hàm PSF ?? làm m? ?nh PSF = fspecial('gaussian',5,5);3. T?o m? ?nh và thêm nhi?u vào ?nh Blurred = imfilter(I,PSF,'symmetric','conv');V = .002;BlurredNoisy = imnoise(Blurred,'gaussian',0,V);figure;imshow(BlurredNoisy);title('Blurred and Noisy Image');1531620182880004. S? d?ng hàm devconlucy ?? kh?i ph?c ?nh g?c , ch? ra hàm PSF ???c s? d?ng ?? t?o m? và gi?i h?n s? vòng l?p t?i 5 ( m?c ??nh là 10 )luc1 = deconvlucy(BlurredNoisy,PSF,5);160020019050000figure; imshow(luc1);title('Restored Image');d - S? d?ng gi?i thu?t tr?n deconvolution - S? d?ng hàm deconvblind ?? kh? m? m?t ?nh . Gi?i thu?t này có th? ???c s? d?ng hi?u qu? khi kh?ng có th?ng tin v? m? ho?c nhi?u ???c bi?t . Hàm deconvblind kh?i ph?c ?nh và PSF ??ng th?i , s? d?ng m?t quá trình l?p t??ng t? nh? gi?i thu?t Lucy-Richardson - Hàm deconvblind ch? gi?ng nh? hàm deconvlucy , thi hành m?t vài s? ?i?u h?p t?i gi?i thu?t Lucy-Richardson .Ví d? sau ??y minh ho? vi?c s? d?ng hàm deconvblind . Nó s? t?o m?t ?nh gi? m? và sau ?ó dùng hàm này ?? kh? m? . 1. ??c m?t ?nh vào kh?ng gian làm vi?c I = imread('cameraman.tif');figure; imshow(I); title('Original Image');1600200406400002. T?o hàm PSF ?? làm m? ?nh PSF = fspecial('motion',13,45);figure; imshow(PSF,[],'notruesize'); title('Original PSF');1600200368300003. T?o m? trên ?nh Blurred = imfilter(I,PSF,'circ','conv');figure; imshow(Blurred); title('Blurred Image');1600200279400004. Kh? m? ?nh , t?o m?t s? ??c l??ng ban ??u cho kích th??c c?a PSF - ?? quy?t ??nh kích th??c c?a PSF , ki?m tra ?nh m? và ?o chi?u r?ng c?a m? ( theo pixel ) xung quanh m?t v?t có hình d?ng nh?t ??nh . Trong ?nh m? m?u , ta có th? ?o m? g?n v?i ???ng vi?n tà áo c?a ng??i ?àn ?ng . B?i vì kích th??c c?a PSF là quan tr?ng h?n giá tr? c?a nó , ta có th? ch? ra m?t m?ng toàn s? 1 nh? là PSF ban ??u .- Hình sau ??y ch? ra m?t s? kh?i ph?c mà s? ph?ng ?oán ban ??u v? kích th??c c?a PSF là gi?ng v?i kích th??c c?a PSF ?? g?y ra m? . Trong ?ng d?ng th?c , ta có th? c?n ch?y l?i hàm deconvblind , ki?m tra PSF v?i các kích th??c khác nhau cho t?i khi nh?n ???c m?t k?t qu? ?n ??nh . PSF ???c kh?i ph?c tr? l?i b?i m?i l?n deconvolution có th? cung c?p m?t ch? d?n có giá tr? cho kích th??c t?i ?u c?a PSF . INITPSF = ones(size(PSF));[J P]= deconvblind(Blurred,INITPSF,30);figure; imshow(J); title('Restored Image');figure; imshow(P,[],'notruesize');title('Restored PSF');30861002921000011430029210000- M?c dù hàm deconvblind có th? kh? nhi?u ?nh t?i m?t kho?ng r?t r?ng , hi?n t??ng rung xung quanh vùng t??ng ph?n c??ng ?? trong ?nh ph?c h?i là kh?ng ?n ??nh . B??c ti?p theo trong ví d? l?p l?i quá trình kh? m? , c? g?ng ??t t?i m?t k?t qu? t?t h?n b?ng cách :+ Tránh vùng t??ng ph?n cao t? s? x? l?+ Ch? ra m?t giá tr? PSF t?t h?n 5. T?o m?t m?ng WEIGHT ?? lo?i tr? vùng t??ng ph?n cao t? thao tác kh? m? . ?i?u này có th? làm gi?m rung do t??ng ph?n nh? trong k?t qu? .?? lo?i tr? m?t pixel t? s? x? l? , ta t?o m?t m?ng có cùng kích th??c v?i ?nh g?c và gán giá tr? 0 cho các pixel trong m?ng t??ng ?ng v?i pixel trong ?nh g?c mà ta mu?n lo?i b? . ?? t?o m?t m?ng WEIGHT , ví d? s? d?ng m?t s? k?t h?p c?a vi?c phát hi?n c?nh và x? l? hình thái h?c ?? phát hi?n vùng có ?? t??ng ph?n cao trong ?nh . Do m? trong ?nh là tuy?n tính , ví d? m? r?ng ?nh ra 2 l?n . ?? lo?i tr? các pixel thu?c vùng biên c?a ?nh ( m?t vùng có ?? t??ng ph?n cao ) t? quá trình x? l? , ví d? này s? d?ng padarray ?? gán giá tr? 0 t?i t?t c? các pixel trên biên ?nh :WEIGHT = edge(I,'sobel',.28);se1 = strel('disk',1);se2 = strel('line',13,45);WEIGHT = ~imdilate(WEIGHT,[se1 se2]);171450074930000WEIGHT = padarray(WEIGHT(2:end-1,2:end-1),[2 2]);figure; imshow(WEIGHT); title('Weight Array');6. Tinh ch? giá tr? ?? ??c l??ng cho PSF . PSF ???c x?y d?ng l?i p ???c tr? v? t? l?n truy?n ??u tiên mà k?t qu? ??t ???c m?t ?? tuy?n tính khá t?t . V?i l?n truy?n th? hai , ví d? này s? d?ng m?t giá tr? PSF m?i p1 gi?ng nh? p nh?ng v?i biên ?? nh? pixel thi?t l?p b?ng 0P1 = P;P1(find(P1 < 0.01))=0;7. Tr? l?i deconvolution , ch? ra m?ng WEIGHT và s?a giá tr? PSF . Chú ? , ?nh ph?c h?i có ít rung xung quanh vùng có c??ng ?? t??ng ph?n l?n h?n k?t qu? tr??c ??y :[J2 P2] = deconvblind(Blurred,P1,50,[],WEIGHT);figure; imshow(J2);title('Newly Deblurred Image');figure; imshow(P2,[],'notruesize');title('Newly Reconstructed PSF');285750027940000027940000 IV – Màu s?c1. B?ng thu?t ng? Tên thu?t ng?Di?n gi?iApproximationPh??ng pháp nh? ?ó ph?n m?m l?a ch?n s? thay th? màu s?c trong m?t s? ki?n mà tr?c ti?p thích h?p kh?ng th? tìm th?y .Ph??ng pháp x?p x? ???c th?o lu?n ? ??y là ánh x? b?n ?? màu , l??ng t? hoá ??ng nh?t và l??ng t? hoá v?i bi?n ??ng nh? nh?t Indexed image?nh mà các giá tr? pixel c?a nó ???c ?ánh s? tr?c ti?p trong m?t b?n ?? màu . Trong Matlab , m?t ?nh ch? s? ???c ??i di?n b?i m?t m?ng thu?c l?p uint8 , uint16 ho?c double . B?n ?? màu lu?n là m?t m?ng mx3 thu?c l?p double . Intensity image?nh bao g?m các giá tr? c??ng ?? . Trong Matlab , ?nh c??ng ?? ???c ??i di?n b?i m?t m?ng thu?c l?p uint8 ,uint16 ho?c double . Trong khi ?nh c??ng ?? kh?ng ???c l?u tr? v?i b?n ?? màu , Matlab s? d?ng b?n ?? màu h? th?ng ?? hi?n th? chúng .RGB image?nh mà trong ?ó m?i pixel ???c ch? ??nh r? 3 màu R,G,B . Trong Matlab , m?t ?nh RGB ???c ??i di?n b?i m?t ma tr?n mxnx3 thu?c l?p uint8 , uint16 ho?c double .Screen bit depthS? l??ng bít trên m?t pixel màn hìnhScreen color resolutionS? l??ng các màu riêng bi?t có th? ???c t?o ra b?i màn hình2. Làm vi?c v?i các chi?u s?u bít màn hình khác nhau- H?u h?t các màn hình máy tính s? d?ng 8,16,24 bít trên m?t pixel màn hình . S? l??ng bít trên m?t pixel màn hình quy?t ??nh ?? s?u bít màn hình . ?? s?u bít màn hình quy?t ??nh ??n ?? ph?n gi?i màu s?c c?a màn hình ?ó là bao nhiêu màu s?c riêng bi?t màn hình có th? t?o ra .- B?t ch?p s? l??ng màu s?c h? th?ng có th? hi?n th? , Matlab có th? l?u tr? và x? l? các ?nh v?i ?? s?u bít r?t cao . Nh?ng ?nh này ???c hi?n th? t?t nh?t trên h? th?ng 24 bít màu nh?ng th??ng khá t?t trên h? th?ng 16 bít màu . a – Tính ?? sau bít màn hình- ?? tính ?? s?u bít c?a màn hình , s? d?ng l?nh sau ??y :get(0,'ScreenDepth');Giá tr? nguyên tr? v? chính là s? bít trên m?t pixel màn hình+ 8 : 8 bít hi?n th? tr? giúp 256 màu . M?t màn hình 8 bít có th? s?n sinh ra b?t kì màu s?c nào có trên màn hình 24 bít nh?ng ch? 256 màu có th? xu?t hi?n cùng lúc .+ 16 :Ch? ?? hi?n th? 16 bít th??ng s? d?ng 5 bít cho m?i thành ph?n màu d?n ??n 32 m?c cho m?i màu R,G,B . Do ?ó , nó tr? giúp 32768 màu riêng bi?t . M?t vài h? th?ng s? d?ng các bít ph? ?? t?ng s? l??ng m?c c?a màu G . Trong tr??ng h?p này , s? l??ng màu khác nhau ???c tr? giúp là 64536 .+ 24 : Ch? ?? hi?n th? 24 bít s? d?ng 8 bít cho m?i màu R, G,B d?n ??n 256 m?c cho m?i màu này , do ?ó , nó tr? giúp 16777216 màu khác nhau .+ 32 : S? d?ng 24 bít ?? l?u th?ng tin màu và s? d?ng 8 bít còn l?i ?? l?u d? li?u trong su?t ( kênh anpha ) b - Ch?n ?? s?u bít màn hình- Ph? thu?c vào h? th?ng , ta có th? ch?n ?? s?u bít màn hình ta mu?n . Nhìn chung , ch? ?? hi?n th? 24 bít t?o ra k?t qu? t?t nh?t . N?u ta mu?n s? d?ng m?t ?? s?u th?p h?n 16 bít th??ng ???c s? d?ng h?n là 8 bít . Tuy nhiên , hi?n th? 16 bít có m?t s? gi?i h?n ( Xem thêm help online ) 3. Gi?m s? l??ng màu trong m?t ?nh- Ta s? xem xét làm cách nào ?? gi?m s? l??ng màu trong m?t ?nh ch? s? ho?c ?nh RGB . Ta c?ng xem xét ??n k? thu?t tr?n ( dithering ) . Dithering ???c s? d?ng ?? t?ng s? l??ng màu c?a m?t ?nh- Toolbox cung c?p cho ta m?t s? hàm sau ??y ?? gi?m màu :+ imapprox : Gi?m s? l??ng màu ???c s? d?ng b?i ?nh ch? s? , cho phép ta ch? ra s? l??ng màu trong b?n ?? màu m?i .+ rgb2ind : Convert m?t ?nh RGB thành m?t ?nh ch? s? , cho phép ta ch? ra s? l??ng màu ch?a trong b?n ?? màu m?i .- Tên các h? th?ng v?i hi?n th? 24 bít màu , ?nh RGB ( true-color ) có th? hi?n th? t?i 16777216 màu khác nhau . Trên các h? th?ng v?i ?? s?u bít màn hình th?p h?n , ?nh RGB v?n ???c hi?n th? khá t?t b?i vì Matlab t? ??ng s? d?ng ph?i tr?n và x?p x? màu n?u th?y c?n thi?t .- ?nh ch? s? tuy nhiên , có th? g?y ra v?n ?? n?u chúng có m?t s? l??ng màu l?n . Nhìn chung , ta nên gi?i h?n ?nh ch? s? t?i 256 màu vì các l? do sau ??y :+ Trên h? th?ng v?i ch? ?? hi?n th? 8 bít , ?nh ch? s? v?i nhi?u h?n 256 màu s? c?n ???c ph?i tr?n ( dithered ) ho?c ánh x? ( mapped ) và do ?ó có th? kh?ng hi?n th? t?t .+ Trên m?t s? h? ?i?u hành ( platform ) , b?n ?? màu kh?ng th? v??t quá 256 màu + N?u m?t ?nh ch? s? có nhi?u h?n 256 màu , Matlab kh?ng th? l?u d? li?u ?nh trong m?t m?ng thu?c l?p uint8 tuy nhiên , nhìn chung s? d?ng m?t m?ng thu?c l?p double thay th? làm cho kích th??c c?a ?nh l?n h?n .+ H?u h?t các ??nh d?ng file ?nh gi?i h?n ?nh ch? s? t?i 256 màu . N?u ta vi?t m?t ?nh ch? s? v?i nhi?u h?n 256 màu ( s? d?ng hàm imwrite ) t?i m?t ??nh d?ng kh?ng tr? giúp nhi?u h?n 256 màu , ta s? nh?n ???c m?t th?ng báo l?iHàm imapprox- Cú pháp c?a nó nh? sau :[Y,newmap] = imapprox(X,map,n)[Y,newmap] = imapprox(X,map,tol)Y = imapprox(X,map,newmap)[...] = imapprox(...,dither_option)Di?n gi?i+ [Y,newmap]=imapprox(X,map,n) : X?p x? các màu trong m?t ?nh ch? s? X ???c k?t h?p v?i b?n ?? màu map b?ng cách s? d?ng l??ng t? bi?n ??i nh? nh?t ( minumum variance quantization ) . Hàm imapprox tr? v? ?nh ch? s? Y v?i b?n ?? màu newmap có nhi?u nh?t n màu .+ [Y,newmap ]=imapprox(X,map,tol ) : X?p x? các màu trong X và map th?ng qua l??ng t? ??u ( uniform quantization ) . newmap ch?a nhi?u nh?t ( floor ( 1/tol)+1)^3 màu . tol ph?i n?m gi?a 0 và 1+ Y=imapprox(X,map,newmap ) : X?p x? màu trong map b?ng cách s? d?ng ánh x? b?n ?? màu ?? tìm các màu trong newmap t??ng h?p t?t nh?t v?i các màu trong map .+ Y=imapprox(…,dither_option ) : cho phép ho?c c?m tr?n . dither_option là m?t chu?i có m?t ho?c nhi?u giá tr? . Giá tr? m?c ??nh ???c ??t trong d?u ({}). N?u dither_option là {‘dither’} - s? tr?n n?u c?n thi?t ?? thu ???c m?t ?? ph?n gi?i màu t?t h?n . N?u dither_option là (‘nodither’) – ánh x? m?i màu trong ?nh g?c t?i màu g?n nh?t trong b?n ?? màu m?i . Kh?ng có phép tr?n nào ???c th?c hi?n .Gi?i thu?t - Hàm imapprox s? d?ng hàm rgb2ind ?? t?o m?t b?n ?? màu m?i s? d?ng ít màu h?nVí d?- X?p x? ?nh ch? s? trees.tif b?ng m?t ?nh ch? s? khác ch? ch?a 16 màu [X, map] = imread('trees.tif');[Y, newmap] = imapprox(X, map, 16);imview(Y, newmap)Hàm rgb2ind- Hàm này dùng ?? convert m?t ?nh RGB thành m?t ?nh ch? s? . Cú pháp c?a nó nh? sau :[X,map] = rgb2ind(RGB,tol)[X,map] = rgb2ind(RGB,n)X = rgb2ind(RGB,map)[...] = rgb2ind(...,dither_option)Di?n gi?i - Hàm rgb2ind convert ?nh RGB thành ?nh ch? s? s? d?ng m?t trong 3 cách khác nhau : l??ng t? ??u , l??ng t? bi?n ??i c?c ti?u và ánh x? b?n ?? màu . V?i t?t c? các ph??ng pháp này , rgb2ind c?ng tr?n ?nh tr? khi ta ch? ra nodither trong dither_option .+ [X,map]=rgb2ind(RGB,tol) : Convert ?nh RGB thành m?t ?nh ch? s? X s? d?ng l??ng t? ??u . map ch?a nhi?u nh?t (floor(1/tol)+1)^3 màu . tol có giá tr? t? 0 ??n 1 + [X,map]=rgb2ind(RGB,n) : Convert ?nh RGB thành ?nh ch? s? X s? d?ng l??ng t? bi?n ??i c?c ti?u , map ch?a nhi?u nh?t n màu , n ph?i nh? h?n ho?c b?ng 65536+ X=rgb2ind(RGB,map ) : Convert ?nh RGB thành ?nh ch? s? X v?i b?n ?? màu map b?ng cách h?p các màu trong RGB v?i các màu g?n nh?t trong b?n ?? màu map , size(map,1) ph?i nh? h?n ho?c b?ng 65536+[…]=rgb2ind(…,dither_option ) : Cho phép ho?c c?m tr?n , dither_option là m?t chu?i . Các giá tr? c?a dither_option gi?ng nh? trong hàm imapprox .Chú ? : N?u ta ch? ra tol , hàm rgb2ind s? d?ng l??ng t? ??u ?? convert ?nh . Ph??ng pháp này bao g?m vi?c c?t hình l?p ph??ng màu RGB thành các hình l?p ph??ng nh? h?n có chi?u dài tol . Ch?ng h?n , n?u tol=0.1 , c?nh c?a các hình l?p ph??ng m?i s? là 1/10 c?nh c?a hình l?p ph??ng RGB . T?ng s? hình l?p ph??ng nh? s? là :n=(floor(1/tol)+1)^3)M?i hình l?p ph??ng ??i di?n cho m?t màu ??n trong ?nh k?t qu? . Vì v?y , chi?u dài c?c ??i c?a b?n ?? màu là n . Hàm rgb2ind b? ?i b?t kì màu nào kh?ng xu?t hi?n trong ?nh vào vì v?y b?n ?? màu th?c có th? nh? h?n n .- N?u ta ch? ra n , hàm rgb2ind s? d?ng l??ng t? bi?n ??i c?c ti?u . Ph??ng pháp này bao g?m vi?c c?t hình l?p ph??ng RGB thành các hình h?p nh? h?n ( kh?ng c?n hình l?p ph??ng ) v?i các kích th??c khác nhau ph? thu?c vào màu s?c ???c ph?n ph? nh? th? nào trong ?nh . N?u ?nh vào s? d?ng ít màu h?n s? l??ng màu ta ch? ra ( n) , b?n ?? màu ra s? nh? h?n .- N?u ta ch? ra map , hàm rgb2ind s? d?ng ph??ng pháp ánh x? b?n ?? màu , nó s? tìm nh?ng màu trong map thích h?p t?t nh?t v?i các màu trong ?nh RGBVí d? RGB = imread('peppers.png');[X,map] = rgb2ind(RGB,128);imshow(X,map)center215900004. Dithering- Khi s? d?ng hàm rgb2ind ho?c imapprox ?? gi?m s? l??ng màu trong m?t ?nh , ?nh k?t qu? tr?ng x?u h?n ?nh g?c b?i vì m?t s? màu b? m?t . Hàm rgb2ind và imapprox c? hai ??u th?c hi?n dithering ?? t?ng s? l??ng màu trong ?nh k?t qu? . Dithering thay ??i màu s?c c?a các pixel ? m?t vùng l?n c?n vì v?y , màu s?c trung bình c?a m?i vùng x?p x? màu g?c .- Ch?ng h?n m?t ví d? ?? xem dithering làm vi?c ra sao , xem xét m?t ?nh ch?a m?t s? pixel màu cam t?i mà kh?ng có m?t s? t??ng h?p chính xác trong b?n ?? màu . ?? t?o ra s?c thái cam này , toolbox l?a ch?n s? k?t h?p màu t? b?n ?? màu . Nó s? tr?n 6 pixel l?i v?i nhau thành m?t nhóm , x?p x? s?c thái h?ng . T? m?t khía c?nh nào ?ó , các pixel xu?t hi?n nh? nh?ng s?c thái chính xác nh?ng n?u ta nhìn g?n ?nh , ta có th? th?y s? ph?i tr?n c?a các s?c thái . Ví d? này n?p m?t ?nh 24 bít sau ?ó , s? d?ng hàm rgb2ind ?? t?o ra hai ?nh ch? s? ch? v?i 8 màu cho m?i ?nh :1. ??c m?t ?nh và hi?n th? nó :rgb=imread('onion.png'); imshow(rgb);182880025400002. T?o m?t ?nh ch? s? v?i 8 màu mà kh?ng tr?n [X_no_dither,map]=rgb2ind(rgb,8,'nodither');figure, imshow(X_no_dither,map);center0003. T?o m?t ?nh ch? s? 8 màu có tr?n [X_dither,map]=rgb2ind(rgb,8,'dither');figure, imshow(X_dither,map);182880012700000?? ? r?ng ?nh ???c dithering có s? l??ng màu nhi?u h?n nh?ng tr?ng có v? h?i nh?t . ?nh kh?ng ???c dithering có ít màu h?n nh?ng t?ng ?? ph?n gi?i kh?ng gian so v?i ?nh dithering . M?t s? nguy hi?m khi gi?m màu mà kh?ng dither là ?nh m?i có th? ch?a các ???ng vi?n sai .5. Chuy?n ??i màu s?c gi?a các kh?ng gian màu - Toolbox bi?u di?n màu s?c nh? là các giá tr? RGB tr?c ti?p ( trong ?nh RGB) ho?c gián ti?p ( trong ?nh ch? s? - b?n ?? màu ???c l?u theo ??nh d?ng RGB ) . Tuy nhiên , có nh?ng ch? ?? khác bên c?nh RGB ?? bi?u di?n màu . Các ch? ?? khác nhau ???c xem nh? là các kh?ng gian màu ( color spaces ) b?i vì h?u h?t chúng có th? ???c ánh x? t?i m?t h? to? ?? 2D, 3D ho?c 4D . Vì v?y , m?t ??c tr?ng màu ???c t?o thành t? m?t to? ?? 2D, 3D ho?c 4D .- Các kh?ng gian màu khác nhau t?n t?i b?i vì chúng ??i di?n cho th?ng tin v? màu s?c theo các cách ?? t?o ra s? tính toán thu?n ti?n h?n ho?c b?i vì chúng cung c?p m?t cách ?? ph?n bi?t các màu hi?u qu? h?n . Ch?ng h?n , kh?ng gian màu RGB ??nh ngh?a m?t màu nh? là t? h?p c?a 3 màu R,G,B . Các ch? ?? màu khác m? t? màu s?c b?i các giá tr? hue ( green ) , saturation ( dark green ) và ánh sáng hay c??ng ?? . - Toolbox tr? giúp nh?ng kh?ng gian màu này b?ng cách cung c?p m?t cách cho vi?c chuy?n ??i d? li?u màu t? kh?ng gian màu này ??n kh?ng gian màu khác th?ng qua các phép bi?n ??i toán h?c .- Trong ph?n này ta s? :+ Ch? ra làm cách nào ?? chuy?n d? li?u màu gi?a các kh?ng gian màu + Xem xét cách th?c ?? chuy?n ??i kh?ng gian màu s? d?ng profile ICC+ Xem xét m?t s? hàm cho vi?c chuy?n ??i gi?a kh?ng gian màu RGB và 3 kh?ng gian màu th?ng d?ng khác là : YIQ , HSV và YCbCr .a - Chuy?n ??i gi?a các kh?ng gian màu ??c l?p thi?t b? - Các thu?t ng? chu?n ???c dùng ?? m? t? màu s?c nh? : hue , ?? sáng và c??ng ?? sáng là ch? quan và làm cho s? so sánh tr? nên khó kh?n .- N?m 1931 , u? ban qu?c t? v? ?? r?i CIE ?? nghiên c?u s? ti?p nh?n màu s?c c?a con ng??i và ?? phát tri?n m?t chu?n ???c g?i là chu?n CIE XYZ . Chu?n này ??nh ngh?a 1 kh?ng gian 3 chi?u v?i 3 giá tr? ???c g?i là 3 giá tr? tác nh?n ( trisimulus values ) ?? ??nh ngh?a m?t màu s?c . Chu?n này v?n còn ???c s? d?ng r?ng r?i cho ??n ngày nay .- Trong nh?ng th?p k? c?a ??c tr?ng ??u tiên ?ó , CIE ?? phát tri?n m?t vài ??c tr?ng kh?ng gian màu ph? ?? c? g?ng cung c?p m?t bi?u di?n màu t??ng t? nh?ng thích h?p t?t h?n so v?i m?t s? m?c ?ích c?a XYZ . Ch?ng h?n , n?m 1976 , m?t n? l?c ?? có ???c m?t kh?ng gian màu ??ng nh?t có th? t??ng quan v?i th? hi?n tr?c quan c?a màu s?c – CIE ?? t?o ra kh?ng gian màu L*a*b .- Toolbox cung c?p tr? giúp cho vi?c chuy?n ??i gi?a các kh?ng gian màu kh?ng ph? thu?c thi?t b? trong s? các chu?n c?a CIE . Thêm vào ?ó , toolbox c?ng tr? giúp chuy?n ??i gi?a các kh?ng gian màu CIE và kh?ng gian màu RGB . Kh?ng gian màu này ???c ??nh ngh?a b?i m?t nhóm các nhà c?ng nghiêp ?? m? t? ??c tính c?a m?t màn hình PC tiêu bi?u .Nh?ng chuy?n ??i ???c tr? giúpKh?ng gian màuDi?n gi?iChuy?n ??i ???c tr? giúpXYZChu?n g?c ???c CIE ??nh ngh?a n?m 1931xyY , uvl , u’v’L và L*a*bxyY??c tr?ng CIE cung c?p các giá tr? màu ???c tiêu chu?n hoá . Giá tr? Y ??i di?n cho ?? sáng và gi?ng nh? trong XYZXYZuvL??c tr?ng CIE mà c? g?ng t?o ra m?t m?t ph?ng màu ??ng nh?t h?n . l là ánh sángXYZu’v’L??c tr?ng CIE trong ?ó u và v ???c ??nh l?i t? l? ?? c?i thi?n tính ??ng nh?tXYZL*a*b??c tr?ng CIE nh?m c? g?ng t?o ra s? ??nh t? l? màu s?c ??ng nh?t h?n . L* là t? l? kh?ng tuy?n tính c?a L ???c tiêu chu?n hoá t?i m?t ?i?m tham chi?u tr?ng XYZL*ch??c tr?ng CIE trong ?ó c là chroma và h là hue . Nh?ng giá tr? này là k?t qu? c?a s? chuy?n ??i to? ?? c?c c?a a* và b* trong L*a*bL*a*bsRGBChu?n ???c ban hành b?i các nhà s?n xu?t l?n ?? ??c tính hoá mà hình PCXYZ và L*a*bVí d? : Th?c hi?n s? chuy?n ??i gi?a các kh?ng gian màu - ?? minh ho? m?t s? chuy?n ??i gi?a các kh?ng gian màu ??c l?p thi?t b? , ví d? này ??c m?t ?nh RGB vào kh?ng gian làm vi?c và chuy?n ??i d? li?u màu sang kh?ng gian màu XYZ :1. Nh?p d? li?u kh?ng gian màu . Ví d? s? ??c m?t ?nh RGB vào kh?ng gian làm vi?c I_rgb = imread('peppers.png');2. T?o m?t c?u trúc chuy?n ??i màu . M?t c?u trúc chuy?n ??i màu ??nh ngh?a s? chuy?n ??i gi?a hai kh?ng gian màu . Ta s? d?ng hàm makecform ?? t?o c?u trúc , ch? ra m?t chu?i ki?u c?u trúc làm tham s? :C = makecform('srgb2xyz'); - T?o m?t c?u trúc chuy?n ??i màu ??nh ngh?a s? chuy?n ??i t? RGB sang XYZ3. Th?c hi?n chuy?n ??i . Ta s? d?ng hàm applycform ?? thi hành chuy?n ??i , ch? ra d? li?u màu ta mu?n chuy?n ??i và c?u trúc chuy?n ??i màu ??nh ngh?a s? chuy?n ??i ?ó . Hàm applycform tr? v? d? li?u ?? ???c chuy?n ??i :I_xyz = applycform(I_rgb,C);whos Name Size Bytes Class C 1x1 7744 struct array I_xyz 384x512x3 1179648 uint16 array I_rgb 384x512x3 589824 uint8 arrayb- Chuy?n ??i gi?a các kh?ng gian màu ph? thu?c thi?t b? - Toolbox bao g?m các hàm ta có th? s? d?ng ?? chuy?n ??i d? li?u ?nh RGB sang m?t s? kh?ng gian màu ph? thu?c thi?t b? và ng??c l?i :+ YIQ + YCbCr+ Hue , saturation , value ( HSV )Kh?ng gian màu YIQ- U? ban h? th?ng truy?n hình qu?c gia M? ( NTSC ) ??nh ngh?a m?t kh?ng gian màu g?i là YIQ . Kh?ng gian màu này ???c s? d?ng trong các máy thu hình ? M? . M?t trong nh?ng ?u ?i?m chính c?a ??nh d?ng này là th?ng tin gam màu xám ( grayscale ) ???c tách ra kh?i d? li?u màu vì v?y cùng m?t tín hi?u có th? ???c s? d?ng cho c? tivi ?en tr?ng và tivi màu .- Trong kh?ng gian màu NTSC , d? li?u ?nh bao g?m 3 thành ph?n là : ánh sáng ( Y ) , hue ( I ) và saturation ( Q ) . Thành ph?n ??u tiên , ánh sáng ??i di?n cho th?ng tin gam màu xám , trong khi hai thành ph?n cu?i cùng ??i di?n cho th?ng tin v? màu s?c .- Hàm rgb2ntsc convert b?n ?? màu ho?c ?nh RGB thành kh?ng gian màu NTSC . Hàm ntcs2rgb chuy?n ??i ng??c l?i .- Ch?ng h?n , nh?ng l?nh sau ??y chuy?n ??i m?t ?nh RGB sang ?nh NTSC .RGB = imread('peppers.png');YIQ = rgb2ntsc(RGB);- Do ánh sáng là m?t thành ph?n c?a ??nh d?ng NTSC , s? chuy?n ??i t? RGB sang NTSC là h?u ích cho vi?c cách ly th?ng tin ?? xám trong m?t ?nh . Trong th?c t? , các hàm rgb2gray và ind2gray s? d?ng hàm rgb2ntsc ?? tách th?ng tin gam màu xám t? m?t ?nh màu .Ch?ng h?n , nh?ng l?nh sau ??y là t??ng ???ng v?i vi?c g?i hàm rgb2gray :YIQ = rgb2ntsc(RGB);I = YIQ(:,:,1);Kh?ng gian màu YCbCr- Kh?ng gian màu YCbCr ???c s? d?ng r?ng r?i trong video s? . Trong ??nh d?ng này , th?ng tin v? ánh sáng ???c l?u tr? trong m?t thành ph?n riêng Y và th?ng tin màu s?c ???c l?u tr? nh? hai thành ph?n màu ??c l?p (Cb và Cr ) . Cb ??i di?n cho s? khác nhau gi?a giá tr? blue và m?t giá tr? tham chi?u trong khi ?ó Cr ??i di?n cho s? khác nhau gi?a thành ph?n ?? và m?t giá tr? tham chi?u .- D? li?u YCbCr có th? là d?ng chính xác kép nh?ng kh?ng gian màu th??ng thích h?p t?t nh?t v?i d? li?u d?ng uint8 . V?i các ?nh uint8 , vùng d? li?u mà Y có th? nh?n là [16,255] và vùng cho Cb , Cr là [16,240] . Hàm rgb2ycbcr convert b?n ?? màu ho?c ?nh RGB sang kh?ng gian màu YCbCr , hàm ycbcr2rgb chuy?n ??i ng??c l?i .Ch?ng h?n , nh?ng l?nh sau s? chuy?n ??i m?t ?nh RGB sang ??nh d?ng YCbCr .RGB = imread('peppers.png');YCBCR = rgb2ycbcr(RGB);Kh?ng gian màu HSV- Kh?ng gian màu HSV ( Hue , Saturation , Value ) th??ng ???c s? d?ng b?i nh?ng ng??i c?n ph?i l?a ch?n màu s?c ( ch?ng h?n ?? in ho?c v? ) t? m?t ??a màu do nó t??ng ?ng t?t h?n v?i kinh nghi?m màu s?c c?a nh?ng ng??i này h?n là kh?ng gian màu RGB ?em l?i . Hàm rgb2hsv và hsv2rgb chuy?n ??i ?nh gi?a các kh?ng gian màu RGB và HSV .- Khi giá tr? Hue n?m trong kho?ng 0 và 1 thì màu t??ng ?ng s? bi?n ??i t? red , yellow , green , cyan , blue , magenta và black sang red . Vì v?y , giá tr? th?c c?a red là t? 0 ??n 1 . C?ng v?y , khi saturation bi?n thiên t? 0 ??n 1 , màu t??ng ?ng ( hues ) bi?n ??i t? ch?a b?o hoà ??n hoàn toàn b?o hoà ( unsaturated to fully saturated ) . Cu?i cùng , n?u value ( hay ?? sáng ) bi?n ??i t? 0 ??n 1 , màu t??ng ?ng s? càng sáng h?n .- Hình sau ??y minh ho? kh?ng gian màu HSV571500-34290000- Hàm rgb2hsv chuy?n ??i b?n ?? màu ho?c ?nh RGB sang kh?ng gian màu HSV . Hàm hsv2rgb thi hành thao tác ng??c l?i . Nh?ng l?nh sau ??y s? convert m?t ?nh RGB sang kh?ng gian màu HSV .RGB = imread('peppers.png');HSV = rgb2hsv(RGB);- ?? xem xét g?n h?n kh?ng gian màu HSV , kh?i l?nh sau ??y s? chia m?t ph?ng màu ( hue , saturation và value ) c?a m?t ?nh HSV :RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]);HSV=rgb2hsv(RGB);H=HSV(:,:,1);S=HSV(:,:,2);V=HSV(:,:,3);imshow(H)figure, imshow(S);figure, imshow(V);figure, imshow(RGB);114300000 ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download