Professional Documents
Culture Documents
LI NI U
Trong nhng nm gn y, trn th gii nghin cu ng dng cng ngh x
l v nhn dng nh ang l hng nghin cu tp trung ca rt nhiu nh khoa hc
trong cc lnh vc. T nhng nm 1970 khi m nng lc tnh ton ca my tnh
ngy cng tr nn mnh m hn, cc my tnh lc ny c th x l c nhng tp
d liu ln nh cc hnh nh, cc on video th mt khi nim na v x l nh
na ra i l: Th gic my - Computer vision.C th ni x l nh s v th gic
my c pht trin v tr thnh mt lnh vc khoa hc. X l nh s khng ch
nng cao cht lng ca nh m cn phn tch v l gii tm ra gii thut ng
dng vo thc tin. Th gic my bao gm l thuyt v cc k thut lin quan nhm
mc ch to ra mt h thng nhn to c th tip nhn thng tin t cc hnh nh thu
c hoc cc tp d liu a chiu. Vic kt hp gia th gic my vi cc k thut
khc nh cng ngh thng tin, truyn thng, in t, iu khin t ng, c kh
cho chng ta rt nhiu ng dng trong i sng hng ngy cng nh trong khoa
hc, an ninh, y hc, qun s Ngy nay, ng dng ca th gic my tr nn rt
rng ln v a dng, len li vo mi lnh vc t qun s, khoa hc, v tr, cho n
y hc, sn xut, v t ng ha ta nh.
Trong thi gian qua di s hng dn tn tnh ca C H TH KIM
DUYN em dnh thi gian nghin cu v x l nh v nhn dng nh hay ni
ng hn l thut ton x l nh bm i tng Tracking. Nhng ni dung m em
nghin cu c y bao gm:
nn C
2
hon thnh n ny ng tin v c cht lng, em xin gi li cm n
chn thnh nht ti C Th.s H TH KIM DUYN l ngi trc tip hng dn em
lm n ny. ng thi em cng xin gi li cm n su sc ti cc anh, cc bc
phng Quang in t, Vin vt l Vin khoa hc cng ngh Vit Nam to
iu kin ti a gip em v mt thit b v dng c th nghim phc v qu trnh
lm n.
V cui cng, chng em xin dnh tt c lng bit n v knh trng su sc nht
ti b m chng em, nhng ngi sinh thnh, nui dng chng em nn ngi,
lo lng, ch bo t nhng vic nh nht, to mi iu kin cho chng em c
sng v hc tp mt cch tt nht vn ti nhng c m v hoi bo ca mnh.
Em xin chn thnh cm n!
H ni ngy 28 thng 5 nm 2011
Sinh vin thc hin
H Tin Thanh
4
1.1.3 Trong lnh vc hng khng v tr
Cc h thng ng knh chp nh vin thm (remote sensing) lp trn cc v
tinh bay quanh tri t c th chp v quan st c cc vt kch c 0,5 m t cao
750 km trong mi iu kin thi tit (Hnh 1.1).. Vic ni ghp cc ng knh ny
vi h thng GPS s cho php xy dng cc bn s c nhng lnh vc ng dng
cc k quan trng trong quc phng an ninh, pht trin kinh t, x hi...
1.1.4 Trong cng nghip, giao thng, xy dng
H thng quang in t ng vai tr ca cc th gic my (machine vision) c
kh nng t ng o c kim tra cht lng sn phm trong cc dy truyn sn
xut: phn loi ht ng cc, c ph; tm li lp rp linh kin cc bn vi mch v
khuyt tt cc mi hn v ng c... Cc h thng quang in t cng c ng
dng ngy cng nhiu trong giao thng nh o tc , t ng kim sot iu khin
v phn lung giao thng (Hnh 1.2).
1.1.5 Trong nghin cu y sinh dc hc
Cc knh hin vi c kh nng t ng nhn dng v o m cc t bo vi
chnh xc cao. Cc knh hin vi c h thng dn ng laser cho php thc hin
nhng phu thut rt phc tp nh m u no, ni m mt s khng chnh xc c m
cng gy tn hi n cc dy thn kinh chng cht xung quanh..
1.1.6 Trong cng nghip gii tr truyn hnh
Cc h thng tch hp c th iu khin cc camera kch thc v khi lng ln d
dng t ng bm theo cc i tng chuyn ng nhanh nh bng ang bay, ua
xe...
6
1.2 Gii thiu chung v Robot
R bt (robot) hay ngi my l mt loi my c th thc hin cng vic mt
cch t ng hoc c iu khin gin tip qua my tnh.
R bt l mt tc nhn c kh, nhn to, thng l mt h thng c kh-in t
kt hp hon ho.Vi s xut hin v chuyn ng ca mnh, r bt gy cho con
ngi cm gic l n cng c nhng gic quan nh con ngi. T r bt (ngi
my) thng c hiu vi hai ngha l 1 c cu c kh chnh xc v phn mm
t hot ng.V lnh vc ngi my th Nht Bn ang i u v lnh vc ny.
Ngy nay, R bt ang l tm im ca mt cuc cch mng ln sau Internet.
R bt ngy cng c s dng rng ri trong cng nghip, y t, gio dc v o
to, gii tr v an ninh quc phng, thm him khng gian.
R bt l sn phm cng ngh c phc tp cao cha hm lng tri thc v
cng phong ph v tt c cac lnh vc ca khoa hc v cng ngh.
Ngy nay ngi ta vn cn tranh ci v vn Mt loi my nhng tiu
chun g c coi l mt r bt??? Mt cch gn chnh xc, r bt phi c mt
vi (khng nht thit phi y ) c im sau y:
1. Khng phi t nhin, tc l do con ngi ch to ra.
2. C kh nng nhn bit mi trng xung quanh.
3. C th tng tc vi cc vt th trong mi trng.
4. C s thng minh v c kh nng a ra cc la chn da trn mi trng
v c th hot ng theo 1 chu trnh c lp trnh sn.
5. C kh nng iu khin bng cc lnh c th thay i ty theo yu cu
ca ngi s dng.
6. C th di chuyn quay tnh tin mt chiu hay nhiu chiu.
7. C s kho lo trong vn ng.
7
1.3 Gii thiu tng quan v h thng r bt camera bm i tng (Tracking
mobile robot)
H thng r bt hot ng bng cc cm bin nh cm bin mu sc, hng
ngoi, cm bin d ng, siu m gi y dn dn c pht trin v tch hp
thm th gic.Vi s pht trin ca khoa hc cng ngh, vic tch hp trn r bt
h thng camera thng minh ng dng cng ngh x l nh l rt cn thit phc v
cho cng nghip, quc phng v x hi.
H thng th gic c th phn thnh 2 lp, theo nh cu trc ca h, l h
c camera gn c nh v h c camera gn trn tay my (eye-in-hand). Trong h
camera c nh, camera c gn c nh so vi h trc ta thc, thu thp nh
ca c mc tiu v c mi trng. Mc tiu ca h camera c nh ny l cung cp
tn hiu iu khin sao cho tay my t c v tr mong mun. Mc ch ca cu
trc eye-in-hand l iu khin tay my sao cho nh ca mc tiu di ng hoc c
nh c duy tr v tr mong mun trn mt phng nh thu c.
My tnh
Camera
Robot
Tn hiu iu khin
camera
Vt th cn gim st
Robot eye-in-hand
10
thit, n c nh vic lm vic trong cc hm m cc nh my ht nhn v cc vng
nguy him bom mnth khi y cc r bt nh th ny hon ton hu dng v l
la chn ti u.
Vi mc tiu hng ti xy dng mt h thng r bt camera thng minh c
th phc v trong cng tc d mn cu tr cu nn, v c kh nng do thm, ti
cng tm hiu v i vo nghin cu ch to mt h tracking thng minh c kh
nng t hnh v bm mc tiu di ng da trn cng ngh x l nh c giao tip v
kim sot, lu tr thng tin bng my tnh.
C th h thng li rng, mt h thng bm i tng bao gm:
LOS
v
cm bin
nh
B x l
Mc tiu
11
t ng trong khi tn ti c chuyn ng tng i ca mc tiu v chuyn ng
ca gn cm bin lm nhiu lon ti d liu cm bin hnh nh. Mc tiu thng
c nh v ban u, bi hoc l ngi iu khin hoc l h thng nhn dng mc
tiu t ng. Sau h thng bm s kha cht mc tiu v duy tr LOS t ng.
H thng bm nh t ng thng c 3 b phn chnh (hnh 1.8): (1) b cm
bin hnh nh (camera chng hn), (2) b chp hnh thng l cc trc khp quay
(gimbal) c gn ng c hoc kh nn, v (3) b vi x l.Mt vng iu khin phn
hi,c gi l vng bm, lin tc hiu chnh b chp hnh gi mc tiu vo tm
ca trng nhn vit tt l FOV (Field Of View) ca b cm bin. B vi x l s
khp kn vng ny bng cch tnh ton lch iu khin c cu chp hnh. Cc
thnh phn hot ng theo th t: (1) b vi x l nh v tn hiu mc tiu trong cc
dng hnh nh t b cm bin, (2) b vi x l c lng trng thi mc tiu v to
ra cc lnh iu khin c cu chp hnh trn c s cc thng tin trng thi, (3) lnh
iu khin c p dng vo LOS cm bin, (4) b cm bin to ra mt vng video
mi, v (5) qu trnh c lp li.
Cm bin hnh nh, c th l cc camera hoc cc cm bin hnh nh khc
nh: cm bin nh CCD (Charge Couple Device) l loi cm bin s dng mt li
hnh ch nht ca cc im (site) thu thp in t ph trn mt silic mng ghi
li nng lng nh sng n mi im trong chng. Mi mt im c to thnh
bng cch cy mt lp SiO2 trn v sau lng ng mt cu trc dn ln trn. Khi
photon nh sng p vo silic, th cp in t l trng s c to ra v cc in t
mang in tch m (electron) s c bt ra cng tng ng. Vi mi nh sng c
bc sng khc nhau th cc in tch bt ra tng ng cng s khc nhau.cc dng
in t ny i qua b bin i ly ra c mc in p quy nh tng ng vi
mi mu sc. V tp hp nhng tn hiu in ny s c x l khi phc li
hnh nh ca i tng thng qua thit b chuyn dng chuyn i.
12
13
14
Vic la chn ng c 1 chiu DC (Direct Current) l mt la chn ti u v
c tnh c ng cao nh gn, c th di chuyn n mi v tr v c kh nng dng
acqui v pin lu tr, ph hp vi nhiu iu kin khc nhau, ph hp vi nhiu a
hnh c th trin khai thc t.
V b vi x l, c th l cc vi mch x l chuyn dng DSP (Digital signal
processing) hay cc mch vi iu khin hoc l my vi tnh PC (Personal computer).
Ngoi nhim v thu thp d liu, chng c nhim v x l cc d liu ny bng cc
chng trnh c nhng trong b x l hoc chy trn cc PC. Mt vi iu khin
(microcontroller) l mt my tnh trn mt chip (Computer-onachip, single-chipcomputer). Thng th cc vi iu khin ny c gi l cc b iu khin nhng
(embedded controller) v chng v cc mch in t h tr thng c thit k lp
t (nhng) ngay bn trong thit b iu khin. Mt s loi mch nhng thng gp
nh: Psoc, PC 104, FPGA, SBC (Single board computer), CMUCAM1 2 3, DSP v
cc my tnh nhng.(hnh 1.13).
15
nh hoc video khi cn thit (nu mun lu tr phi dng thm thit b ngoi vi nn
kh phc tp).
Mt trong nhng thit b va c th lp trnh v va c th x l tn hiu ng
thi c kh nng lu tr thng tin ln l my tnh c nhn PC. My PC ra i
nhm phc v nhng yu cu ca ngi s dng, s dng n gin, ph bin p
ng c nhng yu cu ca h thng. Hin nay my tnh c nhn cng c
thit k nh gn vi y chc nng. Do vy trong khun kh ti ny ti la
chn my tnh laptop x l v c th lu tr c thng tin hnh nh v video,
m thanh.Gip ngi iu khin c th quan st trc tip mc tiu v khi cn thit
s can thip trc tip vo qu trnh iu khin. Nh vy vic la chn my tnh
laptop l ph hp vi yu cu ti.
Nh vy, mc tiu ca ti l xy dng c mt h thng bm nh di ng
bao gm mt h tch hp r bt iu khin camera thng minh thu thp d liu gi
v trung tm lu tr v iu khin t xa thng qua h thng my tnh. Rbt v
camera c th hon ton hot ng t ng bm nh, vt th hoc c th can thip
iu khin bi ngi s dng, phc v cho cng tc nghin cu, cng tc cu h,
d ph bom mn, phc v nhiu mc ch trong cuc sng.
16
17
18
2.1.3 Cu trc v ni dung OpenCV nh th no?
hiu OpenCV lm vic nh th no chng ta bt u t s phn chia cu
trc v ni dung ca OpenCV 5 phn. Cu trc ca openCV c chia lm 5 phn
chnh, 4 trong s c ch ra trong hnh 2.2
CV
MLL
HighGUI
X l nh v thut ton
v th gic my
Thng k v tp hp
cc cng c x l
CXCORE
Cu trc c s v cc thut ton, h tr XML, cc
hm v
19
HIGHGUI cha cc giao din vo ra c bn, n cng cha cc kh nng ca
s m rng v vo ra video.
CVCAM cha cc giao din cho video truy cp qua DirectX trn nn
Windows 32 bits.
Km theo th vin l ti liu hng dn v cc v d mu th hin mt phn
cc chc nng ca cng c OpenCV. Cc chc nng ca openCV tp trung vo thu
thp nh, x l nh v cc thut ton phn tch d liu nh, bao gm:
- Truy xut nh v phim: c nh s t camera, t file, ghi nh v phim
- Cu trc d liu nh s v cc d liu h tr cn thit: ma trn, vector,
chui, xu v cy
- X l nh cn bn: cc b lc c sn, tm chi tit cnh, gc, chnh i mu,
phng to thu nh, v hiu chnh histograms
- X l cu trc: tm vin, nhn chuyn ng, thay i trong khng gian 3D,
i chiu bn mu, xp x cc n v hnh hc c s - mt phng, a gic, ellipse,
ng thng...
- Phn tch d liu nh: nhn dng thc th, theo di cc chi tit v phn tch
chuyn ng
- To giao din n gin: hin th nh, thao tc bn phm, chut, thanh trt
chnh thng s (nu cn thit cc bn c th t to thm cc phm iu khin
thng qua thao tc chut, hoc tch hp thm cc th vin v giao din nh
wxWidgets)
- Chc nng v, ch thch ln nh.
20
2.2 Th vin OpenCV v mi trng lm vic Microsoft visual studio 2008
2.2.1 Ci t OpenCV phin bn 2.1 dnh cho VC++ 2008
Trc ht vo trang web: http://sourceforge.net/projects/opencvlibrary/ download
OpenCV 2.1 phin bn dnh cho VC++ 2008 trn nn window.
Tin hnh ci t:
21
Click I Agree tip tc:
22
2.2.2 To mt d n bng VC++ 2008
M phn mm Visual C 2008, chn Create project MFC sau tin
hnh MFC Application chn tn d n v ng dn lu d n ca mnh sau
n Ok.
23
24
25
Chng trnh nhn din khun mt v m s ngi trong mt bc nh dng
th vin: "haarcascade_profileface.xml.
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
#include <iostream>
// Create a string that contains the exact cascade name
const char* cascade_name =
"C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt2.xml";
/* "haarcascade_profileface.xml";*/
26
system("pause");
return 0;
}
// Function to detect and draw any faces that is present in an image
void detect_and_draw( IplImage* img)
{
// Create memory for calculations
static CvMemStorage* storage = 0;
// Create a new Haar classifier
static CvHaarClassifierCascade* cascade = 0;
int scale = 1;
// Create a new image based on the input image
IplImage* temp = cvCreateImage( cvSize(img->width/scale,img>height/scale), 8, 3 );
// Create two points to represent the face locations
CvPoint pt1, pt2;
int i;
// Load the HaarClassifierCascade
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
// Check whether the cascade has loaded successfully. Else report and error
and quit
if( !cascade )
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
return;
}
// Allocate the memory storage
storage = cvCreateMemStorage(0);
// Create a new named window with title: result
cvNamedWindow( "result", 1 );
// Clear the memory storage which was used before
cvClearMemStorage( storage );
// Find whether the cascade is loaded, to find the faces. If yes, then:
if( cascade )
{
27
28
Start
Khi to
Chp nh
Ly mu
Tnh ta
tm, hng
Giao tip
RS232,RF
Histogram
Lc nhiu
iu kin
dng
Camshift
Dng
29
i vi (R), bc sng 546,8 nm i vi (G) v 435,8 nm i vi (B). Ba mu c
bn ny l to ra cc mu khc vi t l pha trn tng ng. VD: vng =
+xanh lc (tham kho thm ti: http://vi.wikipedia.org/wiki/ ) cm nhn mu
sc th c 3 thuc tnh ch yu:
Sc mu (Brightness), cn gi l chi.
Sc lng (Hue), cn gi l sc thi mu.
bo ha mu (Saturation)
C th chuyn i t khng gian mu RGB sang khng gian mu HSV v
ngc li, chnh nh s chuyn i ny m chng ta c th lp trnh ly mu tn
hiu thu c t camera. V c th ni trong OpenCV c hm cvCvtColor() chuyn
dng thc hin nhim v ny.
30
31
3.2 Thut ton Camshift trong ti u ha h bm i tng
Trong x l nh vic i nghin cu thut ton bm i tng l rt quan trng,
mt s thut ton thng gp l: thut ton KLT, phng php Correlation-base
template matching, thut ton Meanshift, thut ton Camshift.
Thut ton KLT vit tt ca tn hai nh nghin cu Lucas and Kanade v
Tomasi kt hp vi Birchfield vo nm 1991 cho ra i thut ton x l bm cc
c tnh ca nh, c thc thi bng ngn ng C v c gi l thut ton bm
KLT (KLT tracker). Thut ton KLT dng ton hc tnh ton ra cc c tnh sau
cng dng ton hc tnh ra xc sut xut hin ca cc c tnh trong ln di
chuyn tip theo. N c nhc im l rt phc tp v lp trnh tn b nh ca
chng trnh, t l trt cao v kh chn ra c tnh ca i tng v ch ph hp
vi 1 i tng c lp trnh t trc, khi bm i tng khc th phi lp trnh v
ly li c tnh cho i tng mi.
Phng php Correlation-base template matching l phng php so snh vi
mt nh hoc th vin mu c sn (template), do vy phi dng ton b nh ca i
tng ch khng phi dng mt s im nh nh cc thut ton khc, ng thi
khng dng cc thng tin chuyn ng, tnh ton nhiu hn nn khi lng chng
trnh rt ln.
Thut ton Meanshift c pht trin t phng php Gauss dng c lng
i tng trn mt ca s nh c nh, chia nh ca i tng thnh cc ma trn
im nh (pixel) sau thc hin c lng cc im nh ny bng phng php
Gauss, sau tnh trung bnh cc pixel trn khung nh c nh ca i tng,
qu trnh lp li cho n khi hi t c th tham kho thm ti trang web sau hiu
thm v phng php Gauss:
(http://saravananthirumuruganathan.wordpress.com/2010/04/01/introductionto-mean-shift-algorithm/)
32
vng. Nhn l mt hm step n gin nm trong mt bn v xc sut (skinprobability). V xc sut ca mi im nh c tnh ton da trn mu sc bng
cch s dng mt phng php gi l Histogram backprojection. Mu sc c a
ra nh sc thi mu (Hue) t m hnh HSV. Trong thut ton Camshift, mt bc
nh v xc sut phn b mu ca bc nh trong chui video c to ra. u tin
n to ra mt mu m t Hue s dng mt biu mu sc (color Histogram) v s
dng khng gian mu Hue Saturation Value (HSV) c tham chiu t khng gian
mu tiu chun RGB. V phn b mu sc ca bc nh trong video thay i theo
thi gian, nn thut ton Camshift c sa i d dng thch ng vi s thay
i phn b xc sut mu sc ca mc tiu n theo di. Trong OpenCV thut ton
Camshift c iu chnh t thut ton Meanshift. N c tnh ton nh sau:
Bc 1: Chn v tr ban u ca Search Window.
Bc 2: Dng thut ton Meanshift (lp mt hoc nhiu ln) lu ra mt vng gi l
moment th 0.
Bc 3: t kch c ca ca s tm kim bng mt hm ca moment th 0 tm c
trong bc 2.
Bc 4: Lp li bc 2 v bc 3 cho n khi hi t.
Vi nhng u im ca thut ton Camshift trong vic x l nh bm i
tng v nhn din nh, kt hp vi ngn ng C ti la chn v xy dng ring
cho ti ca mnh mt thut ton ti u trong vic x l nh bm i tng. Thut
ton Camshift c c th ha bng lu hnh 3.4. u tin l mt Histogram
c to ra, Histogram ny cha cc thuc tinh lin quan n mu sc v tip theo
tm v kch c ca mc tiu c tinh ton theo di mc tiu khi hnh dng v
kch c ca n thay i. Tnh xc sut phn b mc tiu cn c v Histogram nhn
c. Dch chuyn n v tr mi vi mi khung hnh va nhn c t video.
Camshift s dch chuyn n v tr m n c lng trn i tng n m n tp
trung nhiu im sng nht trong bc nh xc sut. n tm v tr mi bt u t v tr
trc v tnh ton gi tr trng tm va tm c. OpenCV s dng hm
cvCamshift() thc hin chuyn dch ny. Vic tnh ton trng tm da vo thut
ton Meanshift.
33
Video
Chp
nh
RGB HSV
Tnh ton
Histogram
Xc sut
phn b
mu
Camshift
X,Y
To v tr v
kch c search
window
Reset vng
tnh ton
t tm search
window
34
SRAM: 4Kbytes
EEPROM : 4Kbytes
35
B nh thi watchdog
H tr boot loader
Tn s ti a 16MHz
cung cp l 3.3V)
S chn:
36
4.1.2 Cu trc ca ATmega128
4.1.3 Cng v ra
Cng vo ra l mt trong s cc phng tin vi iu khin giao tip vi cc
thit b ngoi vi. ATmega128 c c thy 7 cng ( port ) vo ra 8 bit l : PortA,
PortB, PortC, PortD, PortE, PortF, PortG, tng ng vi 56 ng vo ra. Cc cng
vo ra ca AVR l cng vo ra hai chiu c th nh hng, tc c th chn hng
ca cng l hng vo (input ) hay hng ra (output ). Tt cc cc cng vo ra ca
AVR iu c tnh nng c Chnh sa Ghi ( Read Modify write ) khi s
dng chng nh l cc cng vo ra s thng thng. iu ny c ngha l khi ta
thay i hng ca mt chn no th n khng lm nh hng ti hng ca cc
chn khc. Tt c cc chn ca cc cng (port ) iu c in tr ko ln ( pull-up )
ring, ta c th cho php hay khng cho php in tr ko ln ny hot ng. in
37
tr ko ln l mt in tr c dng khi thit k cc mch in t logic. N c mt
u c ni vi ngun in p dng (thng l Vcc hoc Vdd) v u cn li
c ni vi tn hiu li vo/ra ca mt mch logic chc nng. in tr ko ln c
th c lp t ti cc li vo ca cc khi mch logic thit lp mc logic li
vo ca khi mch khi khng c thit b ngoi ni vi li vo. in tr ko ln
cng c th c lp t ti cc giao din gia hai khi mch logic khng cng loi
logic, c bit l khi hai khi mch ny c cp ngun khc nhau. Ngoi ra, in
tr ko ln cn c lp t ti li ra ca khi mch khi li ra khng th ni ngun
to dng, v d cc linh kin logic TTL c cc gp h. i vi h logic lng
cc vi ngun nui 5 Vdc th gi tr ca in tr ko ln thng nm trong khong
1000 n 5000 Ohm, ty theo yu cu cp dng trn tongii hot ng ca mch.
Vi lgc CMOS v lgc MOS chng ta c th s dng cc in tr c gi tr ln
hn nhiu, thng t vi ngn n mt triu Ohm do dng r r cn thit li vo l
rt nh. Trong vic thit k cc vi mch ng dng, nu mt IC c ng ra loi cc
thu h giao tip vi nhiu IC khc th gi tr ca in tr ko ln s tng i
nh (khong vi trm Ohm). Bi v lc ny h s fanout ln dn n dng ng ra
ca IC phi ln cung cp cho cc ng vo ca cc IC khc, nu khng vi
mch s hot ng chp chn hoc c th khng hot ng.
Khi kho st cc cng nh l cc cng vo ra s thng thng th tnh cht ca
cc cng ( PortA, PortB,PortG ) l tng t nhau, nn ta ch cn kho st mt
cng no trong s 7 cng ca vi iu khin l . Mi mt cng vo ra ca vi
iu khin c lin kt vi 3 thanh ghi : PORTx, DDRx, PINx. ( y x l thay
th cho A, B,G ). Ba thanh ghi ny s c phi hp vi nhau iu khin hot
ng ca cng, chn hn thit lp cng thnh li vo c s dng in tr pull-up,
..v.v.. . Sau y l din t c th vai tr ca 3 thanh ghi trn.
Thanh Ghi DDRx.
y l thanh ghi 8 bit ( c th c ghi ) c chc nng iu khin hng ca
cng (l li ra hay li vo ). Khi mt bit ca thanh ghi ny c set ln 1 th chn
tng ng vi n c cu hnh thnh ng ra. Ngc li, nu bit ca thanh ghi
DDRx l 0 th chn tng ng vi n c thit lp thnh ng vo. Ly v d: Khi
ta set tt c 8 bit ca thanh ghi DDRA u l 1, th 8 chn tng ng ca portA l
38
PA1, PA2, PA7 ( tng ng vi cc chn s 50, 49, 44 ca vi iu khin )
c thit lp thnh ng ra.
39
40
41
cng th c th phn chia theo cch khc l: Truyn nhn d liu theo kiu ni
tip (serial) v song song (paralell).
Truyn ng b: l kiu truyn d liu trong b truyn
(Transmitter) v b nhn (Receiver) s dng chung mt xung ng h
(clock). Do , hot ng truyn v nhn d liu din ra ng thi. Xung
clock ng vai tr l tn hiu ng b cho h thng (gm khi truyn v khi
nhn). u im ca kiu truyn ng b l tc nhanh, thch hp khi
truyn d liu khi (block).
Truyn bt ng b: L kiu truyn d liu trong mi b truyn
(Transmitter) v b nhn (Receiver) c b to xung clock ring, tc xung
clock hai khi ny c th khc nhau, nhng thng khng qu 10 o/o . Do
khng dng chung xung clock, nn ng b qu trnh truyn v nhn d
liu, ngi ta phi truyn cc bit ng b (Start, Stop,) i km vi cc bit
d liu. Cc b truyn v b nhn s da vo cc bit ng b ny quyt
nh khi no th s thc hin hay kt thc qu trnh truyn hoc nhn d liu.
Do , h thng truyn khng b cn c gi l h thng truyn t
ng b.
T hai kiu truyn d liu c bn trn, ngi ta a ra nhiu giao
thc (Protocol) truyn khc nhau nh: SPI (ng b), USRT (ng b), UART (bt
ng b),Tuy vy, cng c giao thc truyn m khng th xp c vo kiu
no: ng b hay bt ng b, chn hn kiu truyn I2C (Trong AVR gi l TWI),
tuy vy mt cch hi gng p th c th thy giao thc truyn I2C gn vi kiu
ng b hn v cc thit b giao tip vi nhau theo chun I2C iu dng chung mt
xung clock. S khi ca cu trc truyn nhn ni tip USART v UART ca
ATmega128,
ATmega128
hai
USART
USART0/UART0
42
43
44
liu ny, tc gi iu dch hai dng in th trn iu l in th tham chiu
ni, tuy vy, bn c nn hiu s khc nhau gia hai khi nim trn.
Tn S Clock ADC: l tn s clock cung cp cho b bin i ADC,
gi tr c th thay i t vi KHz n vi MHz. Tuy nhin, tn s thch hp
khong t 50KHz n 200KHz cho phn gii 10 bit v c th cao hn
200KHz nu phn gii thp hn.
Ng Vo Tng T: ATmega128 c hai la chn ng vo tng
t:
(4.1)
(4.2)
45
ADCH), nu bit ny l 1 th kt qu l s m, nu bit ny l 0 th kt qu l s
dng.
Ch : in th qua b vi sai c th m, nhng in th cp cc ng vo
ADC0:7 (cho c hai trng hp ng vo vi sai v ng vo n hng) phi lun
nm trong khong 0v AVCC.
46
Cc b Driver iu khin ng c
4.1.7 B Driver iu khin ng c dng IC chuyn dng DVR8432 (TI)
DVR8432 l IC chuyn dng iu khiu khin ng c c tch hp b
cu H bn trong vi cc ch c thit lp bn ngoi, c b bo qu dng,qu
p, qu nhit v mch bo v.
47
DVR8432 c c im sau:
Ngun cp iu khin VDD v GVDD l t 10.8V n 13.2V (yu cu ngun
chun)
Ngun ng lc PVDD trong di t 0V n 70V
Dng chu ti 2 x 7A trong trng hp hai knh cng hot ng lin tc, v
14A trong khi hot ng ch song song.
PWM hot ng tn s cao c th ln ti 500KHz.
DVR thch hp cho vic iu khin cc ng c DC trong cng nghip v
trong nghin cu iu khin chnh xc.
4.1.8 B Driver iu khin ng c dng MC33486 v MC33887, MC33932
(Hng Freescale)
c im:
in p hot ng t : 5VDC -28VDC.
Dng in cc i ca ti ln ti 10A i vi MC33486 v 5A i vi
MC33887, MC33932
Tn s xung PWM ti a ln ti 10kHz.
48
4.2 Xy dng phn cng v phn mm ca h thng bm i tng
My tnh v lu tr
Mch VK
X l nh
Camera
frame
ATmega128
RF
RS232
RF
RS232
Cm bin
Cng tc
hnh trnh
Driver K
C
ng c
Y1
49
Cn c vo v tr dch chuyn ca i tng trn mt phng nh so vi gc ta
m ta tnh ton c cc kh nng di chuyn ca r bt sao cho i tng nm
mt v tr bt k trn mt phng nh.
Nh vy tt c cc yu t cn thit xy dng mt h thng trin khai thc
nghim y , ta tin hnh v thit k phn cng v lp trnh phn mm.
4.2.1 Phn cng
Mch phn cng c chia lm 4 khi nh sau:
- Khi iu khin trung tm ATmega128
- Khi ngun cung cp (Ngun iu khin+ng lc)
- Khi Driver iu khin ng c
- Khi truyn thng RF v RS232
Khi iu khin trung tm ATmega128:
50
Khi ngun cung cp:
51
Khi Driver iu khin ng c:
-MC33486:
52
-MC33932:
53
-DVR8432 kit:
54
55
4.2.2 Giao din phn mm:
Giao din phn mm c tht k thnh cc version vi nhiu nhim v khc
nhau.
-Giao din th nht: giao din phn mm bm mc tiu di ng dng thut
ton Meanshift, c kh nng chp nh, lu nh v quay, lu video.
56
-Giao din th hai: S dng thut ton Camshift trn VC++ 6.0
57
-Giao din th ba: giao din ny c xy dng y trn Visual C++ 2008
vi y chc nng ca mt h thng bm.
58
59
5.1 nh gi kt qu t c
n xy dng c mt h thng camera r bt bm mc tiu di ng, c
v phn cng ln chng trnh phn mm v giao din iu khin mc tiu l cc
i tng mu sm, h thng bm tt trong iu kin nh sng tt v camera x l
tt. Mc tiu ca ti hng ti vic a cng ngh x l nh vo trong iu
khin cng nghip v trong r bt pht trin da trn h thng camera thng minh.
Nhm phc v cc cng tc d tm pht hin vt th nhng iu kin m con
ngi khng th ti c nh d mn, thm him thu thp d liu hoc phc v
trong cng tc an ninh. Hon chnh c c phn cng ln phn mm ca r bt,
tin hnh chy th nghim nhiu dng mi trng khc nhau, ban ngy, ban m,
nh sng yu, ng thng, vng trn, v kt qu, r bt camera lun gi c
i tng nm trn mt phng nh m ta chn.
Bo co ny m t h thng r bt camera r bt bm i tng s dng th
vin x l nh OpenCV ca Intel. Thut ton s dng nhn nh t Camera tin
hnh kh nhiu, histogram, s dng thut ton Camshift, tnh ton ta tm, kch
c, gc, thit k khi vi iu khin giao tip qua cc chun RS232 v chun RF s
dng Mscomm trong Visual C. Thit k mch iu khin ng c s dng vi iu
khin ATmega128 v cc IC chuyn dng iu khin cu iu khin ng c DC v
60
kim sot tc gc quay. Di iu kin nh sng nht nh i tng c th
c tm ra nhanh chng chnh xc m t b nh hng ca nhiu.
Tuy nhin h thng ang trong giai on pht trin nn vic thit k c kh
cha c tt, thm m cha cao, v mun h thng chy n nh tt hn na cn
phi thit k h thng c kh chnh xc. Chng trnh s dng thut ton Camshift
phi c kim nghim v pht trin c th chn ra thut ton ti u hn
na.Kt hp vi b lc Kalman tng kh nng chnh xc, nhng iu ny s
c b xung trong thi gian gn y c th c mt h thng hon ho. trong
thi gian ti s nghin cu a ng dng mng nron (tr tu nhn to) vo cng
ngh x l nh v trong cng ngh bm nh v nhn dng nh. cng chnh l
hng pht trin ca ti trong thi gian ti.
61
KT LUN
Trong thi gian nghin cu cng vi nhng nh hng v hng dn qu bu
ca c H Th Kim Duyn, em hon thnh n ca mnh. C th ni rng n
ny bc u l nn tng nh hng cho em nghin cu v pht trin trong tng
lai.
n gii quyt c phn no bi ton bm nh c mu sc c nh (c
th y l nh mu ti).
V mt l thuyt:
62
Ting Anh:
1. David A. Forsyth & Jean Ponce (2003),Computer vision a moderm
approach, Prentic Hall PTR.
2. D.H. Ballard & C.M.Brown (1997), Computer vision, Prentice Hall PTR.
3. Jae S. Lim (1999),Two-Dimensional Signal and Image Processing.
Trang Web:
1.http://dientuvietnam.net.
2.http://picvietnam.com.
3.http://sourceforge.net/opencv/library.
4.http://atmel.com.
5.http://ti.com/forum.
6.http://freescale.com. v mt s bi bo v tp ch x l nh trn th gii.
63
Ph lc
Chng trnh x l nh trn my tnh dng th vin OpenCV:
//Chng trnh giao din 1 chy trn MFC Application VC++
// OpencvUIDlgDlg.cpp : implementation file
//Chuong Trinh Dieu Khien ma nguon mo.
//By HA TIEN THANH
//=================Chuong trnh x l================
#include "stdafx.h"
#include "OpencvUIDlg.h"
#include "OpencvUIDlgDlg.h"
#include "cv.h"
#include "highgui.h"
/////////////////////////////////////////////////////////////
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define new DEBUG_NEW
////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
CvvImage m_CvvImage;
CvCapture * m_Video;
IplImage* m_Frame;//
IplImage* m_GrabFrame;//
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;
bool b_flagProcess;
bool b_flagSaveMovie=0;
bool b_flagTracking=0;
CvVideoWriter* m_Movie;
char chEdit[10];
double m_vieoProtery;
int m_fameCount=0;
long m_x,m_y,m_z;
//===============================
IplImage *imageTrack = 0, *hsvTrack = 0, *hueTrack = 0;
IplImage *maskTrack = 0, *backprojectTrack = 0, *histimgTrack = 0;//
CvHistogram *histTrack = 0;//
int backproject_mode = 0;
int select_object = 0;
64
int track_object = 0;
int show_hist = 1;
CvPoint origin;
CvRect selection;
CvRect track_window;
CvBox2D track_box; // Meanshift
CvConnectedComp track_comp;
int hdims = 50; //
float hranges_arr[] = {0,180};//
float* hranges = hranges_arr;//
int vmin = 10, vmax = 256, smin = 30;
int pointx, pointy;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
virtual void OnOK();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
// DDX/DDV
65
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COpencvUIDlgDlg dialog
COpencvUIDlgDlg::COpencvUIDlgDlg(CWnd* pParent /*=NULL*/)
: CDialog(COpencvUIDlgDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(COpencvUIDlgDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in
Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void COpencvUIDlgDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COpencvUIDlgDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COpencvUIDlgDlg, CDialog)
//{{AFX_MSG_MAP(COpencvUIDlgDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_OPENCAMERA, OnOpencamera)
ON_BN_CLICKED(IDC_CLOSECAMERA, OnClosecamera)
ON_BN_CLICKED(IDC_GRABFRAME, OnGrabframe)
ON_BN_CLICKED(IDC_SAVEMOVIE, OnSavemovie)
ON_BN_CLICKED(IDC_STOPSAVEMOVIE, OnStopsavemovie)
ON_BN_CLICKED(IDC_STARTTRACKING, OnStarttracking)
ON_BN_CLICKED(IDC_STOPTRACKING, OnStoptracking)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
66
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COpencvUIDlgDlg message handlers
BOOL COpencvUIDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);
// Set big icon
SetIcon(m_hIcon, FALSE);
// Set small icon
// TODO: Add extra initialization here
pwnd = GetDlgItem(IDC_SHOWPIC);
pwnd->MoveWindow(35,30,640,480);
pDC =pwnd->GetDC();
//pDC =GetDC();
hDC= pDC->GetSafeHdc();
pwnd->GetClientRect(&rect);
CDC MemDC;
CBitmap m_Bitmap1;
m_Bitmap1.LoadBitmap(IDB_BLANK);
67
MemDC.CreateCompatibleDC(NULL);
MemDC.SelectObject(&m_Bitmap1);
//CClientDC dc(this);
pDC>StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,48,48,SR
CCOPY);
m_Bitmap1.DeleteObject();
MemDC.DeleteDC();
b_flagProcess=0;
Invalidate();
SetDlgItemText(IDC_EDIT_TIME,"Stop");
SetDlgItemText(IDC_EDIT_FRAME_WIDTH,"Stop");
SetDlgItemText(IDC_EDIT_FRAME_HEIGHT,"Stop");
SetDlgItemText(IDC_EDIT_FPS,"Stop");
SetDlgItemText(IDC_EDIT_FOURCC,"Stop");
SetDlgItemText(IDC_EDIT_FRAME_COUNT,"Stop");
SetDlgItemText(IDC_EDIT_X,"Stop");
SetDlgItemText(IDC_EDIT_Y,"Stop");
SetDlgItemText(IDC_EDIT_Z,"Stop");
//////////////////////////////////////////////////////
return TRUE; // return TRUE unless you set the focus to a control
}
void COpencvUIDlgDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void COpencvUIDlgDlg::OnPaint()
{
if (IsIconic())
68
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM)
dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
if (!b_flagProcess)
{
CDC MemDC;
CBitmap m_Bitmap1;
m_Bitmap1.LoadBitmap(IDB_BLANK);
MemDC.CreateCompatibleDC(NULL);
MemDC.SelectObject(&m_Bitmap1);
//CClientDC dc(this);
pDC>StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,48,48,SR
CCOPY);
m_Bitmap1.DeleteObject();
MemDC.DeleteDC();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR COpencvUIDlgDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
69
void COpencvUIDlgDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
/**************************************************************
**********/
/*
*/
/**************************************************************
**********/
m_Frame=cvQueryFrame(m_Video);
//
cvNamedWindow("new",1);
//
cvShowImage("new",m_Frame);
m_CvvImage.CopyOf(m_Frame,1);
if (!b_flagTracking)
{
m_CvvImage.DrawToHDC(hDC, &rect);
//cvWaitKey(10);
}
b_flagProcess=1;
//
KillTimer(nIDEvent);
//=====================================================
m_vieoProtery=cvGetCaptureProperty(m_Video,CV_CAP_PROP_POS_
MSEC);
m_vieoProtery=cvGetCaptureProperty(m_Video,CV_CAP_PROP_FRA
ME_WIDTH);
itoa(m_vieoProtery,chEdit,10);
SetDlgItemText(IDC_EDIT_FRAME_WIDTH,chEdit);
m_vieoProtery=cvGetCaptureProperty(m_Video,CV_CAP_PROP_FRA
ME_HEIGHT);
itoa(m_vieoProtery,chEdit,10);
SetDlgItemText(IDC_EDIT_FRAME_HEIGHT,chEdit);
m_vieoProtery=cvGetCaptureProperty(m_Video,CV_CAP_PROP_FPS);
itoa(m_vieoProtery,chEdit,10);
SetDlgItemText(IDC_EDIT_FPS,chEdit);
m_vieoProtery=cvGetCaptureProperty(m_Video,CV_CAP_PROP_FOU
RCC);
m_fameCount++;
m_vieoProtery=cvGetCaptureProperty(m_Video,CV_CAP_PROP_FRA
ME_COUNT);
itoa(m_fameCount,chEdit,10);
SetDlgItemText(IDC_EDIT_FRAME_COUNT,chEdit);
//============to trackbox==================
m_x=track_window.x+track_window.width/2;
70
itoa(m_x,chEdit,10);
SetDlgItemText(IDC_EDIT_X,chEdit);
m_y=track_window.y+track_window.height/2;
itoa(m_y,chEdit,10);
SetDlgItemText(IDC_EDIT_Y,chEdit);
m_z=(track_window.width+track_window.height)/2;
itoa(m_z,chEdit,10);
SetDlgItemText(IDC_EDIT_Z,chEdit);
//=============================================
if (b_flagSaveMovie)
{
if (!m_Movie)
return;
cvWriteFrame(m_Movie,m_Frame);
}
//=====Chuyn i khng gian mu RGB => HSV=======
int i, bin_w, c;
if (!b_flagTracking)
return;
cvCopy( m_Frame, imageTrack, 0 );
cvCvtColor( imageTrack, hsvTrack, CV_BGR2HSV ); //
if( track_object )//
{
int _vmin = vmin, _vmax = vmax;
cvInRangeS( hsvTrack,
cvScalar(0,smin,MIN(_vmin,_vmax),0),cvScalar(180,256,MAX(_vmin,_vmax),
0), maskTrack ); //
cvSplit( hsvTrack, hueTrack, 0, 0, 0 ); //
if( track_object < 0 )//
{
float max_val = 0.f;
cvSetImageROI( hueTrack, selection ); //
cvSetImageROI( maskTrack, selection ); //
cvCalcHist( &hueTrack, histTrack, 0, maskTrack ); //
cvGetMinMaxHistValue( histTrack, 0, &max_val, 0, 0 );
71
cvConvertScale( histTrack->bins, histTrack->bins, max_val ?
255. / max_val : 0., 0 ); //
cvResetImageROI( hueTrack ); // remove ROI
cvResetImageROI( maskTrack );
track_window = selection;
track_object = 1;
cvZero( histimgTrack );
bin_w = histimgTrack->width / hdims;
for( i = 0; i < hdims; i++ )
{
int val = cvRound(
cvGetReal1D(histTrack->bins,i)*histimgTrack>height/255 );
CvScalar color = hsv2rgb(i*180.f/hdims);
cvRectangle( histimgTrack,
cvPoint(i*bin_w,histimgTrack->height),
cvPoint((i+1)*bin_w,histimgTrack->height val),color, -1, 8, 0 );//
}
}
cvCalcBackProject( &hueTrack, backprojectTrack, histTrack ); //
cvAnd( backprojectTrack, maskTrack, backprojectTrack, 0 );//
cvCamShift( backprojectTrack, track_window,cvTermCriteria(
CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ),&track_comp,
&track_box );//
track_window = track_comp.rect;//
if( backproject_mode )
cvCvtColor( backprojectTrack, imageTrack, CV_GRAY2BGR
); //
if( imageTrack->origin )
track_box.angle = -track_box.angle;
cvEllipseBox( imageTrack, track_box, CV_RGB(255,0,0), 3, CV_AA, 0 );//
}
if( select_object && selection.width > 0 && selection.height > 0 )//
{
cvSetImageROI( imageTrack, selection );
cvXorS( imageTrack, cvScalarAll(255), imageTrack, 0 );
cvResetImageROI( imageTrack );
}
72
m_CvvImage.CopyOf(imageTrack,1);
m_CvvImage.DrawToHDC(hDC, &rect);
//=============Thit lp timer================
CDialog::OnTimer(nIDEvent);
}
void COpencvUIDlgDlg::OnOpencamera()
{
// TODO: Add your control notification handler code here
//m_Video=cvCaptureFromCAM(-1);
if (!m_Video)
m_Video=cvCreateCameraCapture(-1);//HIGHGUI
//
if (!m_Video)
{
int nChoice = MessageBox("No
Camera","Note!",MB_OK|MB_ICONWARNING);
if(nChoice=IDOK) {}
return;
}
SetTimer(1,100,NULL);
73
}
void COpencvUIDlgDlg::OnClosecamera()
{
// TODO: Add your control notification handler code here
KillTimer(1);
cvReleaseCapture(&m_Video);
cvReleaseVideoWriter(&m_Movie);
b_flagProcess=0;
m_fameCount=0;
b_flagSaveMovie=0;
CDC MemDC;
CBitmap m_Bitmap1;
m_Bitmap1.LoadBitmap(IDB_BLANK);
MemDC.CreateCompatibleDC(NULL);
MemDC.SelectObject(&m_Bitmap1);
pDC>StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,48,48,SR
CCOPY);
m_Bitmap1.DeleteObject();
MemDC.DeleteDC();
SetDlgItemText(IDC_EDIT_TIME,"Stop");
SetDlgItemText(IDC_EDIT_FRAME_WIDTH,"Stop");
SetDlgItemText(IDC_EDIT_FRAME_HEIGHT,"Stop");
SetDlgItemText(IDC_EDIT_FPS,"Stop");
SetDlgItemText(IDC_EDIT_FOURCC,"Stop");
SetDlgItemText(IDC_EDIT_FRAME_COUNT,"Stop");
SetDlgItemText(IDC_EDIT_X,"Stop");
SetDlgItemText(IDC_EDIT_Y,"Stop");
SetDlgItemText(IDC_EDIT_Z,"Stop");
}
void COpencvUIDlgDlg::OnGrabframe()
{
if (!m_Video)
{
int nChoice = MessageBox("No
camera!","Note",MB_OK|MB_ICONWARNING);
if(nChoice == IDOK){};
return;
}
m_GrabFrame=cvQueryFrame(m_Video);
74
if (!m_GrabFrame)
return;
static
char countsnap='1';
CString m_name="";
m_name=+countsnap;
m_name+=".bmp";
IplImage *
m_snap=cvCreateImage(cvGetSize(m_GrabFrame),m_GrabFrame>depth,m_GrabFrame->nChannels);
cvCopy(m_GrabFrame,m_snap,NULL);
m_snap->origin=0;
const char* pszStr = m_name.GetBuffer(m_name.GetLength());
cvSaveImage(pszStr,m_snap); //
countsnap++;
}
void COpencvUIDlgDlg::OnSavemovie()
{
// TODO: Add your control notification handler code here
//m_Movie=cvCreateVideoWriter("video.avi",-1,10,cvSize(352,288),1);
if (b_flagProcess)
{
//m_Movie=cvCreateVideoWriter("video.avi",CV_FOURCC('P','I','M','1
'),10,cvSize(352,288),1);
m_Movie=cvCreateVideoWriter("video.avi",1,10,cvSize(640,480),1);
b_flagSaveMovie=1;
}
else
MessageBox("No
Camera","Note",MB_OK|MB_ICONWARNING);
}
void COpencvUIDlgDlg::OnStopsavemovie()
{
// TODO: Add your control notification handler code here
cvReleaseVideoWriter(&m_Movie);
b_flagSaveMovie=0;
}
void COpencvUIDlgDlg::OnStarttracking()
75
{
// TODO: Add your control notification handler code here
if (!b_flagProcess)
{
MessageBox("Press Button
Start!","Note",MB_OK|MB_ICONWARNING);
return;
}
b_flagTracking=1;
imageTrack=0;
track_object=-1;
if (!imageTrack)
{
imageTrack = cvCreateImage( cvGetSize(m_Frame), 8, 3 );//
imageTrack->origin = m_Frame->origin;
hsvTrack = cvCreateImage( cvGetSize(m_Frame), 8, 3 );
hueTrack = cvCreateImage( cvGetSize(m_Frame), 8, 1 );
maskTrack = cvCreateImage( cvGetSize(m_Frame), 8, 1 );//
backprojectTrack = cvCreateImage( cvGetSize(m_Frame), 8, 1
);//
histTrack = cvCreateHist( 1, &hdims, CV_HIST_ARRAY,
&hranges, 1 ); //
histimgTrack = cvCreateImage( cvSize(320,200), 8, 3 );//
cvZero( histimgTrack );//
}
origin = cvPoint(150,150);
selection = cvRect(150,150,20,20);//
//
cvNamedWindow( "CamShiftDemo", 1 );//
//
cvNamedWindow( "Histogram", 1 );
//
cvSetMouseCallback( "CamShiftDemo", on_mouse ); //
}
void COpencvUIDlgDlg::OnStoptracking()
{
// TODO: Add your control notification handler code here
b_flagTracking=0;
imageTrack=0;
track_object=0;
}
void COpencvUIDlgDlg::OnMouseMove(UINT nFlags, CPoint point)
76
{
// TODO: Add your message handler code here and/or call default
//pwnd = GetDlgItem(IDC_SHOWPIC);
//pwnd->GetWindowRect(&rect);
//pwnd->MoveWindow(35,30,352,288);
//if ((point.x>rect.left)&&(point.x<rect.right)&&
(point.y>rect.top)&&(point.y<rect.bottom))
if ((point.x>35)&&(point.x<675)&& (point.y>30)&&(point.y<510))
{
SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
if (select_object)
{
pointx=point.x-35;
pointy=point.y-30;
if( imageTrack->origin )
pointy = 480 - pointy;//480
selection.x = MIN(pointx,origin.x);
selection.y = MIN(pointy,origin.y);
selection.width = selection.x + CV_IABS(pointx - origin.x);
selection.height = selection.y + CV_IABS(pointy - origin.y);
selection.x = MAX( selection.x, 0 );
selection.y = MAX( selection.y, 0 );
selection.width = MIN( selection.width, imageTrack->width );
selection.height = MIN( selection.height, imageTrack->height );
selection.width -= selection.x;
selection.height -= selection.y;
}
}
CDialog::OnMouseMove(nFlags, point);
}
void COpencvUIDlgDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if( !imageTrack )
{
MessageBox("Press Button
StartTracking!","Note!",MB_OK|MB_ICONWARNING);
return;
}
77
if ((point.x>35)&&(point.x<387)&& (point.y>30)&&(point.y<318))
{
pointx=point.x-35;
pointy=point.y-30;
if( imageTrack->origin )
pointy = 288 - pointy;
if (imageTrack->width==800)
{
pointx=pointx*640/352;
pointy=pointy*480/288;
}
origin.x = pointx;
origin.y = pointy;
selection = cvRect(pointx,pointy,0,0);//
select_object = 1;//
}
CDialog::OnLButtonDown(nFlags, point);
}
void COpencvUIDlgDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
select_object = 0;//
if( selection.width > 0 && selection.height > 0 )
track_object = -1;//
CDialog::OnLButtonUp(nFlags, point);
}
void COpencvUIDlgDlg::OnAboutbox()
{
// TODO: Add your control notification handler code here
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
78
void CAboutDlg::OnOK()
{
CDialog::OnOK();
}
void COpencvUIDlgDlg::OnCancel()
{
// TODO: Add extra cleanup here
int user_choice =
MessageBox("Exit?","Exit!",MB_OKCANCEL|MB_ICONWARNING);
if(user_choice == IDOK)
/*{
if(m_Video)
destoryWindow();
};*/
CDialog::OnCancel();
}
BEGIN_EVENTSINK_MAP(COpencvUIDlgDlg, CDialog)
//{{AFX_EVENTSINK_MAP(COpencvUIDlgDlg)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()