3.2.1.Ch cănĕng
Image Acquisition Toolbox là t p h p các hàm c a MATLAB có ch cănĕng thu th p hình nh s từ các thi t b thu hình. C th là:
51
- Thu th p hình nh từ các thi t b thu hình khác nhau, từ lo i chuyên d ng đ n lo i rẻ ti nănh ăWebcamă(giaoăti p USB).
- Trình chi u (preview) lu ng d li u video từ thi t b thu hình. - Trích hình nh từ lu ng d li u video.
- Thi t l p các callback cho các s ki n khác nhau.
- Chuy n d li u hình nh vào không gian workspace c aăMATLABăđ x lý nh ti p theo.
3.2.2.Cácăb c thu th p hình nhăc b n
B c 1: G n thi t b thuăhìnhăvƠoămáyătínhăvƠăcƠiăđặtădriverăđi u khi n. - G n thi t b thu hình vào máy tính.
- CƠiăđặtădriveră(trìnhăđi u khi n) cho thi t b (đ c cho b i nhà s n xu t). - Xem th hình nh video hi n trên máy tính thông qua ph n m m c a nhà s n
xu t.
- Kh iăđ ng MATLAB
B c 2: Ch đnh thông tin ph n c ng:
Ta c n ch đnh cho MATLAB bi t ph n c ngănƠoădùngăđ l y d li u (vì có th có nhi u camera k t n i v i PC).
Gõ l nh imaqhwinfođ bi t tên các lo i thi t b có th dùng.
>> imaqhwinfo ans =
InstalledAdaptors: {'gentl' 'gige' 'matrox' 'winvideo'}
MATLABVersion: '8.1 (R2013a)'
ToolboxName: 'Image Acquisition Toolbox' ToolboxVersion: '4.5 (R2013a)'
Trongă đó ‘winvideo’ ch các thi t b dùng chu n Windows Driver Model (WDM) hoặc Video for Windows (VFW). Bao g m các lo i USB WEBCAM và camera IEEE 1394.
52
Ch đnh thi t b : Tuỳ vào lo i thi t b (adaptor name), m i thi t b cùng lo i g năvƠoăPCăđ căđánhăs ID, thi t b th nh t có deviceID = 1, thi t b th hai có deviceIDă=ă2,ầ
Đ li t kê xem lo i winvideo có bao nhiêu thi t b g năvƠoămáy,ătaăcũngădùngă l nh imaqhwinfor v iăđ i s là winvideo.
>> imaqhwinfo('winvideo') ans = AdaptorDllName: [1x81 char] AdaptorDllVersion: '4.5 (R2013a)' AdaptorName: 'winvideo' DeviceIDs: {[1]} DeviceInfo: [1x1 struct]
Có m t thi t b v i DeviceID là 1. Ta có th tìm hi u thêm thông tin v thi t b này bằng cú pháp: >> imaqhwinfo('winvideo',1) ans = DefaultFormat: 'YUY2_160x120' DeviceFileSupported: 0 DeviceName: 'HP Webcam' DeviceID: 1 VideoInputConstructor: 'videoinput('winvideo', 1)' VideoDeviceConstructor: 'imaq.VideoDevice('winvideo', 1)' SupportedFormats: {1x5 cell}
ĐơyălƠăwebcam mặcăđ nh c a laptop.
B c 3: T oăđ iăt ngăđ i di n cho lu ng d li u hình nh.
Đ t o lu ng d li u hình nh ta dùng l nh videoinput hoặc l nh
imaq.VideoDevice
53
>> vid = videoinput('winvideo',1)
Summary of Video Input Object Using 'HP Webcam'. Acquisition Source(s): input1 is available.
Acquisition Parameters: 'input1' is the current selected source.
10 frames per trigger using the selected source.
'YUY2_160x120' video data to be logged upon START.
Grabbing first of every 1 frame(s).
Log data to 'memory' on trigger. Trigger Parameters: 1 'immediate' trigger(s) on START. Status: Waiting for START.
0 frames acquired since starting. 0 frames available for GETDATA.
B c 4: Hi n th lu ng video lên mƠnăhìnhăđ xem th
Đ xemătr c lu ng d li u video ta dùng l nh preview. Ví d : preview(vid)
Màn hình lúc này hi n lên c a sổ video c aăđ iăt ng vid. Đ k t thúc xem ta dùng l nh stoppreview hoặcă đ đóngă c a sổ preview ta dùng l nh
closepreview(vid).
B c 5: L y m t khung nhăvƠăl uăthƠnhăfileăđ ho .
Đ l y m t nh vào x lý ta dùng l nh getsnapshot.
Đ l uă nhăthƠnhăfileăđ ho ta dùng l nh imwrite.
B c 6: Làm s ch b nh
Sau khi l y d li u hình nh ta có th gi i phóng b t b nh bằng các l nh sau:
delete(vid) clear
54
close(gcf)
3.3. Computer Vision System Toolbox
ĐơyălƠăb công c đ c s d ng chính trongăđ tài.
3.3.1.Ch cănĕng
Computer Vision Toolbox là b công c cung c p các gi i thu t, hàm và các ng d ng cho vi c mô phỏng th giác máy và x lí nh. M t s ng d ng chính :
- Phát hi n và nh n d ngăđ iăt ng. - Theoădõiăđ iăt ng.
- Hi u ch nh camera.
- X lí video,ăchúăthíchăđ iăt ng trong video, xu t nh p video, hi n th video.
3.3.2.Các hàm x lí video
3.3.2.1. Hàm vision.VideoFileReader
Hàm này có ch cănĕngăđ c các hình nh và âm thanh từ các file video hoặc các file nh.
Cú pháp:
videoFReader=vision.VideoFileReader(FILENAME) hoặc
videoFReader=vision.VideoFileReader(Filename, Name, Value)
Đnh d ng t p tin mà hàm có th th c hi n ph thu c vào h đi u hành mà b công c đ căcƠiăđặt. Tuy nhiên v i t pătinăcóăđuôiălƠă.aviăthìăhƠmăcóăth th c thi trên t t c các h đi u hành. V i h đi u hành windows, các hàm ch th c thi các filenameăcóăđuôiălƠ:ă.jpg,ă.bmp,ă.mpeg,ă.mp2,ă.mpg,ă.mp4,ăm4v,ă.mj2,ă.wmv,ă.asf,ă .asx, .wav, .aif, .aiff, .aifc, .mp3.
3.3.2.2. Hàm vision.VideoPlayer HƠmănƠyădùngăđ m m t video hoặc hi n th hình nh. Cú pháp videoPlayer = vision.VideoPlayer videoPlayer = vision.VideoPlayer(Name,Value) Đ hi n th m t video frames c n th c hi n:
55
o G i l nh step. Theo cú pháp step(videoPlayer,I),ătrongăđóăIă lƠăđ iăt ng c n hi n th trong video player.
Ví d :
% Doc mot hinh anh tu file video va tao doi tuong mo file.
videoFReader =
vision.VideoFileReader('videothucte_0002.avi'); videoPlayer = vision.VideoPlayer;
% Mo file. Moi lenh goi step se doc mot khung hinh. while ~isDone(videoFReader)
frame = step(videoFReader); step(videoPlayer,frame); end
% Dong doi tuong.
release(videoFReader); release(videoPlayer);
K t qu :
56
Đ chènăđ iăt ng vào video player, Computer Vision System Toolbox hổ tr các hàm:
insertText Chèn text.
insertShape Chèn hình d ng.
insertMaker Chènăđánhăd u vào trong nh hoặc video.
insertObjectAnnotation ChènăchúăthíchăđúngămƠuăvƠoădòngă
video.
3.3.2.3. Hàm vision.ImageFilter
Th c hi n l c ma tr n đ u vào dùng b l c 2D FIR. C u trúc:
H = vision.ImageFilter hàm này tr v đ iăt ng h th ng H.
H = vision.ImageFilter(Name,Value)
3.3.2.4. Hàm vision.Autotheresholder
ĐơyălƠăhƠmăchuy năđổi nhăc ngăđ sang nh nh phân, s d ngăph ngă pháp Otsu.ăXácăđ nhăng ỡng bằng cáchăchiaătáchăhoƠnhăđ c a nhăđ uăvƠoăđ gi m thi u sai s .
C u trúc l nh
H = vision.Autothresholder
H = vision.Autothresholder(Name,Value)
Ví d : img = im2single(rgb2gray(imread('peppers.png'))); imshow(img); hautoth = vision.Autothresholder; bin = step(hautoth,img); pause(2); figure;imshow(bin); K t qu :
57
Hình 3.11:̉nh cường độ
Hình 3.12:̉nh nhị phân
3.3.2.5. Hàm vision.LocalMaximaFinder
Hàm tìm c căđ iăđ aăph ngătrongămaătr n. Sau khi thi t l p các thu c tính c a ma tr nă đ u vào, s d ng cú pháp IDX = step(H,I) hoặc [...] = step(H,I,THRESH)ă trongă đóă THRESHă lƠă ng ỡng,ă đ tìm v trí có giá tr c că đ i trong ma tr n.
C u trúc l nh
H = vision.LocalMaximaFinder(Name,Value)
H = vision.LocalMaximaFinder(Name,Value)
58 Ví d : >> I = [0 0 0 0 0 0 0 0 0 0 0 0; ... 0 0 0 1 1 2 3 2 1 1 0 0; ... 0 0 0 1 2 3 4 3 2 1 0 0; ... 0 0 0 1 3 5 7 5 3 1 0 0; ... 0 0 0 1 2 3 4 3 2 1 0 0; ... 0 0 0 1 1 2 3 2 1 1 0 0; ... 0 0 0 0 0 0 0 0 0 0 0 0]; hLocalMax = vision.LocalMaximaFinder; hLocalMax.MaximumNumLocalMaxima = 1; hLocalMax.NeighborhoodSize = [3 3]; hLocalMax.Threshold = 1; location = step(hLocalMax, I) location = 7 4 3.3.2.6. Hàm vision.HoughLines
HƠmăxácăđnh to đ Đ các c aăđ ng thẳng trong nh,ăđ c di n t b i cặp tham s rho và theta.ăĐ iăt ngăđ u vào là các cặp rho và theta c a nh tham chi u. Đ iăt ngăđ u ra là các v trí c a hàng và c t c aăcácăgiaoăđi m gi aăcácăđ ng thẳngăvƠăđ ng bao c a nh tham chi u.ăCácăđ ng bao là biên d c bên trái và bên ph i và biên ngang c a phía trênăvƠăphíaăd i c a nh tham chi u.
C u trúc l nh:
H = vision.HoughLines
H = vision.HoughLines(Name,Value)
59 Hình 3.13:̉nh circuit.tif I = imread('circuit.tif'); hedge = vision.EdgeDetector; hhoughtrans = vision.HoughTransform(pi/360,'ThetaRhoOutputPort', true);
hfindmax = vision.LocalMaximaFinder(1, 'HoughMatrixInput', true);
hhoughlines = vision.HoughLines('SineComputation','Trigonometric function');
BW = step(hedge, I);
[ht, theta, rho] = step(hhoughtrans, BW);
linepts = step(hhoughlines, theta(idx(1)-1), rho(idx(2)-1), I); imshow(I); hold on;
line(linepts([1 3])-1, linepts([2 4])-1,'color',[1 1 0]);
K t qu :
Hình 3.14: Đường thẳng dài nhất trong ảnh
3.3.2.7. Hàm vision.ColorSpaceConverter
60 C u trúc l nh
H = vision.ColorSpaceConverter
H = vision.ColorSpaceConverter(Name,Value)
Ví d : Chuy năđổi nhăRGBăsangăkhôngăgianămƠuăc ngăđ .
i1 = imread('pears.png'); imshow(i1); hcsc = vision.ColorSpaceConverter; hcsc.Conversion = 'RGB to intensity'; i2 = step(hcsc, i1); pause(2); imshow(i2); K t qu : Hình 3.15:̉nh RGB
61
Hình 3.16:̉nh cường độ
3.4. Image Processing Toolbox
Image Processing Toolbox cung c p m t b đ yăđ các thu t toán, các hàm và các ng d ngăđ x lý nhănh :ăbi u di n nh, phân tích và bi n đổi nh, khôi ph c nh, c i thi n ch tăl ng hình nh, nén và mã hoá nh...
Trong ph n này, ch trình bày các hàm và các ng d ngăc ăb n thu c h p công c Image Processing Toolbox cóăliênăquanăđ n n i dung c aăđ tài.
3.4.1.Đ c nh
Đ đ c nhăHătrongămôiătr ng Matlab, dùng hàm imread v i cú pháp: H =
imread(‘tên file’). LúcănƠy,ăfăđ c bi u di năd i d ng m t ma tr n.
HƠmăimreadăđ c file từth ăm c hi năhƠnh,ăcáchăđ năgi năđ đ c m t nh từ m tăth ăm c riêng là bao g m c đ ng d n đ năth ăm căđó.
Đ bi tăđ l n c a nh H, dùng l nh size(H).NgoƠiăraăđ bi t thêm thông tin v nh H, dùng l nh whos H.
Cácăđnh d ng nhăđ c tr giúp b hàm imread là các nh có ph n m r ng .tif, .tiff, .jpg, .jpeg, .gif, .bmp, .png, .xwd.
3.4.2.Hi n th nh
Đ hi n th nh ta dùng hàm imshow v i cú pháp:
62
trongăđóăHălƠămaătr n nh, G là s m c. N u không vi t G thì mặcăđnh là 256 m c. Hoặc ta dùng cú pháp :
imshow(H,[low,high])
s hi n th nh v iămƠuăđenăcóăt t c các giá tr nhỏ h năhoặc bằng low, trong khi màu tr ng có t t c các giá tr l năh năhoặc bằng high. V i cú pháp:
imshow(H,[])
có low là m c c c ti n c a nh còn high là m c c căđ i c a nh H.
Đ hi n th các thông tin v các pixel nh, dùng hàm pixval. Hàm này hi n th m t con trỏ nằm ngay trên nh. Khi d ch con trỏ này thì giá tr c a các pixel t ngăúngăs đ c hi n th và xu t hi n d i c a sổ hình. N u là nh RGB thì s hi n ra to đ c a các thành ph n màu R, G, B. N u kích trái chu t và n gi thì pixval hi n th kho ng cách Euler gi a v tríăđ u và v trí hi n th i c a con trỏ.
3.4.3.Ghi nh
Đ ghi nhăHăvƠoătrongăđĩa,ădùngăhƠmăimwriteăv i cú pháp: imwrite(H,
‘tên file’), hàm này s l uăfileăvƠoăth ăm c hi n hành. Chẳng h n v i nh
JPEG, dùng l nh imwrite(H, ‘tên_file.jpg’, ‘quality’, q),
trongăđóăqăcóăgiáătr từ0ăđ n 100.
Đ thuă đ c thông tin chi ti tă h n, trongă Matlabă ng i ta dùng l nh:
imfinfo tên_file. Các thông tin hi n th b i l nh iminfo có th l uăvƠoătrongă c u trúc bi n bằng l nh: V=imfinfo(‘tên_file’). Lúc này, t t c các thông tinăđ c phát ra b i l n iminfo đ căl uăvƠoăbi n V. Chẳng h nănh ăđ caoăvƠăđ r ng c a nhăđ căl uătrongăc u trúc V.Height và V.Width.
Đặc bi t, v i các lo i nh khác nhau, trong Matlab ta có th dùng các hàm khácănhauăđ hi n th nh. Đ hi n th m t nhăc ngăđ , dùng hàm imagesc. V i nh nh phân ta có th dùng l nh imview.ăĐ hi n th nh RGB, ta có th dùng l nh image.
63
3.4.4.Chuy năđổi gi a các l p nh và các lo i nh
M t s phép toán cho phép chuy nă đổi m t lo i nh này sang nh khác. Image Processing Toolbox cung c pă đ yă đ các hàm chuy nă đổiă đóă [34].ă Chẳng h n: im2unit8, mat2grayầ
64
Ch ngă4ă
CH NGăTRỊNHăĐI U KHI N
4.1. Mô hình tổng quát
Hình 4.1: Mô hình tổng quát
Hardware device driver TOOLBOX
Image Acquistion Toolbox Computer Vision Toolbox Image Processing Toolbox
MATLAB
M-file function Hardware driver adaptor
USB Camera RS232
65
Mô hình c th
MATLAB
Hình 4.2:Mô hình cụ thể
4.2. Ch n và thi t l p camera
ĐơyălƠăb c r t quan trong b i nó có nhăh ng r t l năđ năđ chính xác trong quá trình x lỦăđ i v iăcácăđ tài ng d ng x lý nh.ăB cănƠyăđ c păđ n vi c thi t l p v trí ghi hình.ăĐ phân gi i c a camera, t căđ ghi hình.
Cameraă đ c s d ngă trongă đ tài này là Logitech webcam 905. Có các thông s :
Đ phân gi i: 2MP (up to 8MP).
Kíchăth c khung hình t iăđaălƠ:ă1600x1200 pixels, nh RGB. Giao ti p máy tính: USB.
Khí g n thi t b vào máy tính, ki m tra các thông s c a webcam thông qua cú pháp: Xu t tín hi uăđi u khi n (Chu n RS232) Nh n d ng và gi i thích Bi u di n và mô t nh Ti n x lỦăvƠăphơnăđo n nh Thu nh n nh (Webcam )
66
>> imaqhwinfo('winvideo',2)
ans =
DefaultFormat: 'RGB24_640x480' DeviceFileSupported: 0
DeviceName: 'Logitech Webcam 905' DeviceID: 2
VideoInputConstructor: 'videoinput('winvideo', 2)'
VideoDeviceConstructor: 'imaq.VideoDevice('winvideo', 2)' SupportedFormats: {1x46 cell}
Trong các thông s trên thì thông s DefaultFormat có th thayăđổiăđ c. Kíchăth c khung hình thu th p từ thi t b này nằm trong kho ng từ 160x90 cho đ n 1600x1200.
Lu năvĕnănƠyăch n thông s mặcăđ nhălƠă„RGB24_640x480‟. T căđ ghi hình là 30fps.
4.3. Môăhìnhăđ ng và ph m vi quan sát
Trongă bƠiă toánă xácă đ nhă lƠnă đ ng, vi că xácă đ nhă môă hìnhă đ ng có nh h ng r t l nă đ nă đ chính xác c a vi c x lý. Ch nă môă hìnhă đ ng ph thu c ph n l n vào vi c s d ng ph ngăphápănh n d ng.
Trongăđ tài này ch t p trung vào tìm hi uăh ng ti p c n d a trên tín hi u hình nh và màu s c. Nên vi c ch nămôăhìnhăđ ng thẳng hayăđ ng cong không đ căđ căđ c p nhi u.ăCácăđặcătr ngăđ c chú ý đơyălƠăcácăđặcătr ngăv c nh, v màu s c c a d u phân cách, v vơnăđ ng.ăTuyănhiên,ăđ nâng cao vi c th c thi c aăch ngătrình,ăng i th c hi năđ tƠiăđƣăch nămôăhìnhăđ ngălƠăđ ng cóăđ cong nằm ng ỡng gi i h n.
Ph măviăquanăsátăđ c ch n là từ5ămétăđ nă30ămétăphíaătr c xe.
4.4. Ti n trình x lí nh
4.4.1.Xácăđ nh d uăphơnăcáchălƠnăđ ng 4.4.1.1. Thu th p hình nh t webcam
S d ng hàm imaq.VideoDevice đ thu t p hình nh từ webcam v i cú pháp :
67
>> hVideoSrc = imaq.VideoDevice('winvideo',2,'RGB24_640x480', ... 'ROI', [140 240 360 240], ...
'ReturnedColorSpace', 'rgb'); TrongăđóăvùngăquanătơmăROIă, v iăỦănghĩaănh ăHìnhă4.3.
Hình 4.3:Vùng quan tâm
Sauăđó,ădùngăl nh step(hVideoSrc)đ trích xu t từng khung hình r i t o vòng lặp x lý.
Hình 4.4:̉nh được trích xuất
Codeăch ngătrình:ăPh L c A.
4.4.1.2. Bi năđổi nh và l c nh
N iădungăcóăỦănghĩaăđ xácăđnh d uăphơnăcáchălƠnăđ ng trong nh là các v ch kẻ đ ng. Nên ch quan tâm t i ph n hình nh c a v ch kẻ đ ng. Trên hình 4.4,ăvùngăcóăỦănghĩaăchínhălƠăph năd i c a khung hình. Vì v y, c n h n ch l i vùngăquanăsátănh ăhìnhă4.5
68
Hình 4.5:Hình gíi hạn quan sát
Dùng hàm vision.ColorSpaceConverter chuy n nh RGB sang nh c ngăđ nh ăhìnhă4.6.
Hình 4.6: ̉nh cường độ
Dùng hàm vision.ImageFilter đ l c nh và hàm
vision.Autothresholder đ chuy n nhăxámăđƣăl c sang nh nh phơnănh ă hình 4.7.
Hình 4.7:̉nh nhị phân
Codeăch ngătrình:ăPh L c A.
4.4.1.3. Th c hi n bi năđổi Hough
Dùngă ph ngă phápă bi nă đổi Houghă xácă đ nhă đ ng thẳng trong nh bằng
hàm vision.HoughTransform và vision.LocalMaximaFinder, vision.HoughLines. V i cú pháp: hHough = vision.HoughTransform( ... 'ThetaRhoOutputPort', true, ... 'OutputDataType', 'single'); hLocalMaxFind = vision.LocalMaximaFinder( ...
69 'MaximumNumLocalMaxima', ExpLaneNum, ... 'NeighborhoodSize', [301 81], ... 'Threshold', 1, ... 'HoughMatrixInput', true, ... 'IndexDataType', 'uint16');
hHoughLines1 = vision.HoughLines('SineComputation', 'Trigonometric function');
Codeăch ngătrình:ăPh L c A.
4.4.2.Xácăđ nh d u phân cách trái ậ ph i vƠăchènăđánhăd uălƠnăđ ng
D uăphơnăcáchălƠnăđ ng trái ph iăđ căxácăđ nh d aăvƠoăgiaoăđi m c a nó v iăđ ngăbaoăphíaăd i cùng c a nh. Ch ngătrìnhăs tính toán kho ng cách các từ tâm c a khung nh t i các d uăphơnăcáchălƠnăđ ng. Từ đóăxu t tín hi u c nh báo n u m tătrongăcácătr ng h p sau x y ra:
- D uăphơnăcáchălƠnăđ ng phía bên ph i khung hình giao v iăđ ng bao phía d i cùng c a khung hình. S cho tín hi u l ch ph i.
- D uăphơnăcáchălƠnăđ ng phía bên trái khung hình giao v iăđ ng bao phía d i cùng c a khung hình. S cho tín hi u l ch trái.
- Không có d u phân cách nào giao v iăđ ngăbaoăphíaăd i c a khung hình. S cho tín hi uăđúngălƠn.
Code c aăch ngătrình:ăPh L c C.
4.4.3.Xu t tín hi u
N uăđiăđúngălƠnăđ ng,ăch ngătrìnhăs g i m t tín hi u ki u Stringă„Center‟ă t i chân TXD c a cổng COM.
Khi l chătimăđ ng,ăch ngătrìnhăs g i m t tín hi u ki uăStringă„Left‟ăn u l chătrái,ă„Right‟ăn u l ch ph i t i chân TXD c a cổng COM.
Trong ph n giao di n, tín hi uăđ c th hi n bằng hình nh trong khung Lane, và hi n th d ng chuổi trong vùng Receiver (RX) n uăchơnăRXăvƠăTXăđ c n i t t.
Trong quá trình l pătrình,ăng i th c hi năđƣădùngăph n m m Proteus 8 ProfessionalăvƠăConfigureăVirtualăSerialăPortăDriverăđ mô phỏng và ki m tra tín hi u xu t ra c a cổng COM.
70
Hình 4.8:Chương trình mô phỏng Proteus
71
4.5. L p trình giao di n
Hình 4.10:Giao diện người dùng
4.5.1.Cácănútăđi u khi n 4.5.1.1. Nút Start Webcam 4.5.1.1. Nút Start Webcam
NútănƠyăchoăphépăng i dùng ghi l i hành trình và quan sát hình nh th t c a lƠnăđ ngăphíaătr c xe.