You are on page 1of 78

1

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

Nghin cu tng quan v x l nh s v h bm i tng


Tm hiu v nghin cu v th vin m ngun m OpenCV trn

Nghin cu v xy dng thut ton bm nh di ng ti u da trn


th vin m ngun m OpenCV ca Intel
Xy dng c mt h thng camera di ng (phn cng ln phn
mm) bm theo mc tiu di dng ng dng thut ton bm nh Camshitf.

nh gi c kt qu t c trong thi gian nghin cu.

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

Chng 1: TNG QUAN V X L NH V H


THNG BM I TNG
1.1 Tng quan v x l nh
X l nh 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. i vi mi ngi chng ta, qu trnh hc thng qua th gii
bn ngoi l mt iu d dng. Qu trnh nhn thc c hc thng qua qu
trnh sng ca mi ngi. Tuy nhin vi cc vt v tri v gic nh my tnh,
robot th iu qu thc l mt bc tin rt gian nan. Cc thit b ngy nay
khng ch nhn thng tin dng tn hiu n l m cn c th c ci nhn tht
vi th gii bn ngoi. Ci nhn ny qua qu trnh phn tch, kt hp vi cc m
hnh nh my hc, mng nron s gip cho thit b tin dn ti mt h thng
nhn to c kh nng ra quyt nh linh hot v ng n hn nhiu. Mt s lnh
vc ng dng cng ngh x l nh mang tnh t ph nh sau:
1.1.1 Trong lnh vc qun s
Cc h thng tch hp quang hng ngoi c kh nng t ng iu khin dn
ha lc (pho, tn la) c lp t cho cc trn a cao x, trn xe tng, tu chin,
my bay, tn la hoc v tinh (Hnh 1.1). Chng c thay th v h tr cc dn
rada d b nhiu trong vic t ng pht hin, cnh gii, bm bt mc tiu. c bit
c nhng loi lp trn my bay c kh nng iu khin ha lc nh ph hng chc
mc tiu mt lc. Ngoi ra cn phi k n cc u t dn tn la v n thng
minh.
1.1.2 Trong an ninh, phng chng ti phm, bo v php lut
Cc h thng camera nhn dng khun mt vn tay t ng cng nh pht
hin, theo di, cnh bo cc m mu v hot ng khng b. Cc xe robt t hnh
c gn cc camera cng c ng dng trong cc mi trng c hi, d ph bom
mn (Hnh 1.1).

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...

Hnh 1.1: Mt s h thng tch hp quang-in t v nh nhit trong


qun s v chin u

Hnh 1.2: Mt s h thng tch hp camera gim st trn tu vin thm v


trong cng nghip v cng ngh v tr

Hnh 1.3: H thng camera in t ng dng trong nghin cu thi tit v


trong cng nghip

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

Hnh 1.4: Cu trc h camera c nh iu khin v gim st cnh tay r bt

camera

Vt th cn gim st

Robot eye-in-hand

Hnh 1.5: Cu trc h Camera r bt eye-in-hand


Cc nghin cu ca mi trng ng b b kh xa so vi mi trng tnh do
nh hng kh ln ca tc tinh ton cng nh chinh xc ca vic phn tch
nh. Do vy c nhiu thut ton ci thin tc x l nh v ci thin can nhiu
trong qu trnh thu thp d liu t camera.
Mt kh khn v thch thc ca th gic my l vic phn loi i tng. mt
r bt c th phi i mt vi nhiu i tng khc nhau, trong khi ch mt i
tng c quan tm cn cc i tng khc th khng. nhn bit c v tr
ca mc tiu trong mi trng ng, cc c trng ca mc tiu l rt quan trng.
Cc im l, cc gc cnh, cc c im in hnh c th d dng tnh ton x l
mi trng tnh, nhng trong mi trng ng th rt kh v chi ph v thi gian l
rt ln, nh hng ca tc lm cho vic x l nh tch ly c trng ca i
tng l rt kh.
Bi ton bm mc tiu di ng vi qu o khng bit trc yu cu phi gi
c i tng mt v tr nht nh trn mt phng nh. Thut ton CamShift
trong OpenCV c s dng tnh ton ta trng tm ca i tng trn mt
phng nh.
Mt s h thng tracking r bt thc t c trin khai:

Hnh 1.6: PAN robot v Robot Pops (ngun: www.mobilerobot.org)

Hnh 1.7: Robot Talon v Robot MARRS (ngun Internet)

Hnh 1.8: Robot thm him sao ha v Robot MIDbo


Ngy nay vic xy dng mt h thng r bt thng minh v c kh nng thay
th con ngi lm vic trong cc iu kin khc nghit v nguy him l rt cn

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

Hnh 1.9: Cm bin nh, gimbal v b vi x l

Hnh 1.10: Tng quan v mt h thng bm


Mc ch ca h thng bm video, nh t ng l duy tr mt ng ngm vit
tt l LOS (Line Of Sight) gia cm bin mc tiu mt cch n nh v hon ton

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

Hnh 1.11: Cm bin CCD


C th ni rng, khi cm bin hnh nh c th s dng cc cm bin mu sc
hoc camera, tuy nhin c th khng nh rng, khi ny c nh hng rt ln n
cht lng v tc ca mt h bm nh. V tc thu thp d liu gi v b vi
x l rt quan trng, n nh hng n vic tnh ton ca b vi x l nhanh
chng a ra lut iu khin cho c cu chp hnh.Camera tc v cht lng
cng cao th h bm s hot ng vi xc sut chnh xc cao.
Ngy nay vi s pht trin ca khoa hc cng ngh th cm bin hnh nh
cng c hin i ha v ci thin c tc cng nh cht lng hnh nh, in
hnh l cc h thng camera tch hp, hng ngoi, lade, khng dy
Vi yu cu mc ch ca n th khi cm bin hnh nh ca ti s dng
y l h thng camera khng dy tch hp hng ngoi quan st ban m. V
camera l la chn ti u trong vic xy dng mt h thng trin khai thc nghim,
trong khi cc cm bin hnh nh khc ch dng trong mt mc ch nghin cu nht
nh, tc khng cao v kh s dng v kh tip cn. Ngc li camera th hon
ton p ng yu cu xy dng mt h thng bm nh thc nghim v d tip
cn.

13

Hnh 1.12: Camera quan st tch hp

V h c cu chp hnh th c th s dng l kh nn hoc ng c iu


khin. Tuy nhin ty vo mc ch s dng v yu cu ring ca h thng ta c th
s dng c cu chp hnh no ph hp nht. y ta c th s dng h thng
xoay dng ng c iu khin v kim sot gc v tc quay. Cc h trn th
trng hin nay nh cc h PTS, HN ( xoay camera) tuy nhin cc h ny thng
l cc ng c xoay chiu iu khin cho nn vic iu khin tc v kim sot
gc quay cng gp nhiu kh khn.

Hnh 1.13: xoay PST, HN gn camera quan st

Trong h thng ca ti s dng hon ton l ng c 1 chiu c gn encoder


kim sot tc v gc quay, c iu khin bng phng php iu xung
PWM, nn hon ton ph hp vi yu cu ca h thng.

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).

Hnh 1.14: Cc mch nhng ( SBC use PSoC, FPGA, CMUCAM,


DSP, my tnh cng nghip PC104)
Cc mch nhng trn u c u im l nh gn, c th can thip v cu trc
ca chng c ngha l c th trc tip lp trnh trn n, tuy nhin chng c nhc
im l kh s dng, phc tp v mang tnh chuyn ngnh cao, khng ph bin v
c dung lng b nh nh ch c th x l v t c kh nng lu tr thng tin hnh

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

Chng 2: TNG QUAN V TH VIN M NGUN


M OPENCV TRN NN C
2.1 Th vin OpenCV
2.1.1 OpenCV l g?
OpenCV vit tt ca Open Source Computer Vision Library. N c cha hon
500 hm s dng th gic my, v c pht trin bi tp on Intel. OpenCV l
mt th vin m ngun m (open source) tham kho ti: http://www.sourceforge.net
Th vin c vit bng ngn ng C v C++ c th chy trn cc h iu
hnh nh Linux, Window v Max OS X. OpenCV c thit k nng cao hiu
sut tnh ton v nhn mnh n h thng thi gian thc. Mt iu tuyt vi ca
OpenCV l n a ra mt h thng n gin, d s dng gip mi ngi nhanh
chng xy dng cc ng dng trong th gic my, k c cc h thng kim tra trong
nh my, bc nh trong cc lnh vc y hc, bo mt, r bt hc N cha cc lp
trnh x l nh rt n gin, k c khi thc thi cc hm bc cao nh d tm khun
mt, theo di khun mt, nhn dng khun mt, lc Kalman.
K t khi c gii thiu v s dng vo thng 1 nm 1999, OpenCV c
s dng trong rt nhiu ng dng, cc sn phm v cc nghin cu. V d nh trong
lnh vc hng khng v tr, bn web trc tuyn, s dng gim nhiu trong y hc,
phn tch i tng, an ninh, h thng d tm v cnh bo, qun l h thng sn
xut, x l camera, ng dng trong qun s, hng khng khng ngi li, trn mt
t v trn tu ngm. Ngoi ra n cn s dng trong nhn dng m thanh. OpenCV
l mt cha kha quan trng trong cc r bt s dng th gic my nh Stanford hay
Asimo ca Nht Bn. Qu trnh pht trin ca OpenCV c th hin hnh 2.1:

17

Hnh 2.1: Qu trnh pht trin ca OpenCV

Trn th gii cn mt s th vin nh Emugu CV nhng pht trin trn nn C# .


OpenCV c pht trin trn nn C v C++ th s d dng cho nhng ngi mi
tip cn hn Emugu CV.
2.1.2 V sao la chn OpenCV?
Th trng th gic my ang ngy cng m rng v ln tc pht trin. Th
vin tiu chun s to ra cc ng dng mi v cc gii php x l d dng hn. c
bit ti u khi s dng cu trc Intel. To ra cc mu ng dng bng cc th vin
c cp nht thng xuyn v thc hin cc thut ton nng nh d tm khun
mt. C rt nhiu cng ngh hin i v cc cng ty ln s dng th vin OpenCV
trong ng dng ca mnh nh : Intel, Microsoft, IBM, Siemens, Google v cc
trung tm nghin cu nh: Stanford, MIT, Cambridge, INRIA
Hn 14000 thnh vin trn forum OpenCVyahoogroup.com vi trung bnh
mt ngy c n 10-20 thng ip comment trao i hng ngy.
iu khng nh rng OpenCV thc s gp phn v cng ln trong lnh
vc th gic my.

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

Giao din, truy xut


nh v video

CXCORE
Cu trc c s v cc thut ton, h tr XML, cc
hm v

Hnh 2.2: Cu trc ca OpenCV

CXCORE cha cc nh ngha kiu d liu c s. V d, cc cu trc d liu


cho nh, im v hnh ch nht c nh ngha trong cxtypes.h . CXCORE cng
cha i s tuyn tnh v phng php thng k, chc nng duy tr v iu khin
chui. Mt s t, cc chc nng ha v trn nh cng c t y.
CV cha cc thut ton v x l nh v nh kch c camera. Cc chc nng
hnh ha my tnh cng c t y.
CVAUX c m t trong ti liu ca OpenCV nh cha cc m c v th
nghim. Tuy nhin, cc giao din n cho s nhn din nh trong module ny.
Code sau ny chng c chuyn dng cho nhn din mt v chng c ng dng
rng ri cho mc ch .
HIGHGUI v CVCAM c t trong cng th mc l otherlibs.

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:

Hnh 2.3: Setup OpenCV 2.1


Click Next:

Hnh 2.4: Chn I Agree

21
Click I Agree tip tc:

Hnh 2.5: Chon Add OpenCV to the system PATH


Chn Add OpenCV to the system PATH for all users, chy trn tt c quyn
Admin ln users, sau click Next chn mc nh v tip tc cho n khi ci t
xong finish.

Hnh 2.6: Click Finish kt thc


Sau khi ci t ta tin hnh copy tt c cc file trong th mc bin, include
v lib ca OpenCV cho vo th mc bin, include v lib ca VC++2008 s
dng th vin OpenCV.

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.

Hnh 2.7: To mt d n trong VC++ 2008


Sau chn thit k giao din Dialog based v chn Next:

23

Hnh 2.8: Chn thit k Dialog based v mi


trng lm vic ca d n
Sau chn Next v Finish, nh vy ta thit lp c mt d n by gi ta
c th thit k v lp trnh theo mun.
Sau y l kt qu ca mt ca mt chng trnh nhn din khun mt c
s dng th vin m ngun m ca OpenCV v m s ngi trong bc nh.

24

Hnh 2.9: Kt qu th nghim ca lp trnh nhn din khun


mt

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";*/

// Function prototype for detecting and drawing an object from an image


void detect_and_draw( IplImage* image );
int dem=0;
// Main function, defines the entry point for the program.
int main( int argc, char** argv )
{
// Create a sample image
IplImage *img = cvLoadImage("D:\\IMG_8036.jpg");
// Call the function to detect and draw the face positions
detect_and_draw(img);
// Wait for user input before quitting the program
cvWaitKey();
// Release the image
cvReleaseImage(&img);
std::cout << "co tat ca"<<dem << " nguoi//";
// Destroy the window previously created with filename: "result"
cvDestroyWindow("result");
//MessageBox(dem);
// return 0 to indicate successfull execution of the program

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

// There can be more than one face in an image. So create a growable


sequence of faces.
// Detect the objects and store them in the sequence
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(40, 40) );
// Loop the number of faces found.
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
// Create a new rectangle for drawing the face
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
// Find the dimensions of the face,and scale it if necessary
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;
// Draw the rectangle in the input image
cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
dem++;
}
}
// Show the image in the window named "result"
cvShowImage( "result", img );
// Release the temp image created.
cvReleaseImage( &temp );
}

28

Chng 3: XY DNG THUT TON X L NH


BM I TNG TI U (TRACKING)
3.1 Gii thut chung v h thng bm (Tracking camera robot)

Start

Khi to

Chp nh

Ly mu

Tnh ta
tm, hng

Giao tip
RS232,RF

Histogram

Lc nhiu

iu kin
dng

Camshift
Dng

Hnh 3.1: Lu thut ton bm i tng


Da vo lu thut ton ta c th hnh dung v mt h thng bm tng quan
nht c th xy dng c mt thut ton iu khin ti u ph hp vi h
thng, p ng cc yu cu t ra ca bi ton. Sau bc khi to ban u mc
tiu s c a vo h cm bin hnh nh chp nh, sau c ly mu tn
hiu t khng gian mu RGB n khng gian mu HSV. Mi mu sc t nhin u
c t hp t 3 mu c bn: R (red), xanh lc G (green) v xanh dng B
(blue). tiu chun ha vic o mu sc trn th gii, da vo kt qu thc
nghim ngi ta qui nh 3 mu c bn ny tng ng vi cc bc sng 700nm

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.

Hnh 3.2: Khng gian mu RGB v khng gian mu HSV

Histogram chnh l qu trnh m t i tng, thng tin hnh nh v video


di dng biu (Histogram) d quan st. Histogram c th s dng ch ra
s khc nhau gia cc i tng v ch ra xc sut phn b mu sc. Thc hin qu
trnh to Histogram lin tip v quan st nu thy Histogram no gn ging vi
Histogram ca i tng nht th s c chn, y cng chnh l mt trong nhng
yu t cn thit trong thut ton bm nh ca cng ngh x l nh ni chung v th
vin OpenCV ni ring.

30

Hnh 3.3: Histogram ca hai ln ly mu

Lc nhiu nhm mc ch loi b can nhiu ly ra c tn hiu chnh xc


cn ly mu. C th ni rng nhiu pht sinh trong qu trnh x l nh l rt ln do
vy cn phi loi b nhiu bng cc b lc nh Kalman hay b lc g-h hay g-h-k

Hnh 3.3: Kt qu trc khi lc v sau khi lc


T nhng yu t trn thut ton bm ca h l nh sau: phi c th ly mu v
chuyn i c gia cc khng gian mu RGB v HSV v ngc li, phi to ra
Histogram so snh a ra lut iu khin, v quan trng phi xc nh c c
tnh ca nh.Tnh ton c trng tm v hng ca vt th c kt hp cc b lc
nhm loi b nhiu vo h thng.

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/)

Cui cng l thut ton Camshift, Camshift vit gn ca Continuously


Adaptive Meanshift l c s ca thut ton theo di khun mt trong OpenCV. N
bao gm thut ton c s Meanshift vi thch ng cc bc thay i kch c ca

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

Hnh 3.4: Lu thut ton Camshift

Hnh 3.5: Kt qu ca vic thc hin hm Camshift trong vic


tnh ta ca mc tiu

34

Chng 4: XY DNG, THI CNG PHN CNG


V LP TRNH PHN MM CHO H THNG BM
I TNG
4.1 Tng quan v cc linh kin xy dng phn cng
Vic chn la cc linh kin xy dng mch phn cng l rt quan trng sau
khi xy dng xong thut ton x l ti u. Trong h thng ny ngoi b vi x l
chung l my tnh laptop cn c mt khi giao tip thc hin bt tay gia
camera, c cu chp hnh v my tnh. p ng yu cu v kh nng iu
khin c cu chp hnh v va c kh nng x l, chng nhiu tt ti quyt nh
chn v s dng vi iu khin AVR, ATmega128 v n c y tnh nng v c
kh nng chng nhiu tt. s dng iu khin cc c cu chp hnh v kim sot
tc v gc quay ti s dng mt s linh kin chuyn dng iu khin cu
ng c l dng MC ca Freescale v DVR ca Texas Intrument. Vi mc ch
xy dng mt kit vi iu khin a nng c th va thc hin nhim v iu khin c
cu chp hnh va c kh nng thc hin nhim v x l tn hiu t cc cm bin
trong cng nghip nh PIR, IR ca Sharp, cm bin gia tc v nghing ADXL
hay MMA7455 v c th giao tip RS232 hoc giao tip khng dy RF phc
v qu trnh truyn v x l tn hiu.
Gii thiu v vi iu khin ATmega128
Atmega 128 l mt b vi x l CMOS in p thp da trn nn kin trc
AVR RISC nng cao . Bng cch thi hnh cc lnh mt cch mnh m trong mt
chu k ng h duy nht, Atmega128 c th cho php tc t c l 1 MPIS
trn 1 MHz t gip ngi thit k h thng c kh nng ti u ha in nng s
dng so vi tc x l.
4.1.1 Nhng Tnh Nng Chnh Ca ATmega128:

ROM : 128 Kbytes

SRAM: 4Kbytes

EEPROM : 4Kbytes

64 thanh ghi I/O

35

160 thanh ghi vo ra m rng

32 thanh ghi a mc ch.

2 b nh thi 8 bit (0,2).

2 b nh thi 16 bit (1,3).

B nh thi watchdog

B dao ng ni RC tn s 1 MHz, 2 MHz, 4 MHz, 8 MHz

ADC 8 knh vi phn gii 10 bit ( dng Xmega ln ti 12 bit)

2 knh PWM 8 bit

6 knh PWM c th lp trnh thay i phn gii t 2 ti 16 bit

B so snh tng t c th la chn ng vo

Hai khi USART lp trnh c

Khi truyn nhn ni tip SPI

Khi giao tip ni tip 2 dy TWI

H tr boot loader

6 ch tit kim nng lng

La chn tn s hot ng bng phn mm

ng gi 64 chn kiu TQFP.

Tn s ti a 16MHz

in th : 4.5v - 5.5v (Ring dng ATmega128L th ngun

cung cp l 3.3V)
S chn:

Hnh 4.1: S chn ca ATmega128

36
4.1.2 Cu trc ca ATmega128

Hnh 4.2: S 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.

Hnh 4.3: Thanh ghi DDRx


Thanh Ghi PORTx.
PORTx l thanh ghi 8 bit c th c ghi. y l thanh ghi d liu ca PORTx,
Nu thanh ghi DDRx thit lp cng l li ra, khi gi tr ca thanh ghi PORTx
cng l gi tr ca cc chn tng ng ca PORTx, ni cch khc, khi ta ghi mt gi
tr logic ln 1 bit ca thanh ghi ny th chn tng ng vi bit cng c cng mc
logic. Khi thanh ghi DDRx thit lp cng thnh li vo th thanh ghi PORTx ng
vai tr nh mt thanh ghi iu khin cng. C th , nu mt bit ca thanh ghi ny
c ghi thnh 1 th in tr treo ( pull-up resistor ) chn tng ng vi n s
c kch hot, ngc li nu bit c ghi thnh 0 th in tr treo chn tng
ng s khng c kch hot, cng trng thi cao tr ( Hi-Z ).

Hnh 4.4: Thanh ghi PORTA

Thanh Ghi PINx.


PINx khng phi l mt thanh ghi thc s, y l a ch trong b nh I/O kt
ni trc tip ti cc chn ca cng. Khi ta c PORTx tc ta c d liu c cht
trong PORTx, cn khi c PINx th gi tr logic hin thi chn ca cng tng
ng c c. V th i vi thanh ghi PINx ta ch c th c m khng th ghi.
Hnh 4.5 th hin cc cc thit lp cch hot c th c ca cng.

39

Hnh 4.5: Thanh ghi PINA

Hnh 4.6: Cch thit lp cho cng


4.1.4 Cc b nh thi, cu trc ngt, module PWM, USART/UART v cc
ngoi vi khc
ATmega128 c 4 b nh thi , b nh thi 1 v 3 l b nh thi 16 bit, b
nh thi 0 v 2 l b nh thi 8 bit (Timer/Couter0 v Timer/Couter2 vi 2
module PWM 8bit).

Hnh 4.7: B nh thi Timer/Counter0 vi module PWM 8bit

40

Hnh 4.8: B nh thi Timer/Counter 2 vi module


PWM 8 bit

Hnh 4.8: B nh thi 16 bit


4.1.5 Truyn nhn ni tip
USART

(Universal Synchronous and Asynchronous serial Receiver and

Transmitter): B Truyn Nhn Ni Tip ng B V Bt ng B Ph Dng, y


l khi chc nng dng cho vic truyn thng gia vi iu khin vi cc thit b
khc. Trong vn truyn d liu s, c th phn chia cch thc (method) truyn
d liu ra hai ch (mode) c bn l : Ch truyn nhn ng b (Synchronous)
v Ch truyn nhn bt ng b (Asynchronous). Ngoi ra, nu gc phn

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

USART1/UART1, dng trong truyn nhn ni tip ng b v khng ng b.

42

Hnh 4.9: S khi b truyn nhn ni tip


4.1.6 B bin i ADC
B ADC chc nng bin i tn hiu tng t (analog signal) c gi tr thay
i trong mt di bit trc thnh tn hiu s (digital signal). B ADC ca
ATmega128 c phn gii 10 bit, sai s tuyt i 2 LSB, di tn hiu ng
vo t 0V VCC, tn hiu ng vo c nhiu la chn nh : c 8 ng vo a hp
n hng
(Multiplexed Single Ended), 7 ng vo vi sai (Differential Input), B ADC
ca
ATmega128 l loi ADC xp x lin tip (succesive approximation ADC) vi
hai ch hot ng c th lu chn l chuyn i lin tc (Free Running) v
chuyn i tng bc (Single Conversion). S khi n gin ca mt b ADC
c th hin hnh

43

Hnh 4.10: B bin i ADC n gin

Nguyn tc hot ng ca khi ADC : Tn hiu tng t a vo cc ng


ADC0:7 c ly mu v bin i thnh tn hiu s tng ng. Tn hiu s c
lu trong hai thanh ghi ACDH v ADCL. Mt ngt c th c to ra khi hon
thnh mt chu trnh bin i ADC.
Thc t, b ADC ca ATmega128 phc tp hn nhiu, tuy nhin c s vn
da vo nguyn tc trn. kho st b ADC ca ATmega128 ta cn tm hiu cc
khi chc nng sau:
in Th Tham Chiu: l gi tr in th dng so snh vi in
th ca tn hiu tng t cn bin i ng vo ADC. ATmega128 c 3 la
chn in th tham chiu l AVCC bng vi VCC, in th tham chiu ni
2.56v, v Vref l ty chn. Bn c cn l AVR c 2 ngun in th
tham chiu ni l internal reference = 2.56v v bandgap reference = 1.24v.
in th bandgap reference l mt hng s vt l, n lun l 1.24v, cn in
th internal reference th c th thay i ty theo cc dng chip khc nhau.
Trong AVR, internal reference c to ra t bandgap reference. Trong ti

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:

10 ng vo n hng (single ended): 10 ng vo ny l

ADC0:7, AGND v bandgap reference. Thc t ta thng dng 8 ng


vo ADC0:7. V c 8 ng vo ADC0:7 nn ta c th a vo 8 tn hiu
tng t khc nhau. Khi la chn ng vo kiu ny (tc kiu single
ended) th kt qu chuyn i c tnh nh sau:

(4.1)

Ng vo vi sai: Ta c th a hai tn hiu tng t vo ng

vo ADC, hai tn hiu tng t ny s qua mt b vi sai (mch tr), kt


qu ng ra c th c khuch i ri sau mi a vo khi ADC
bin i. B vi sai c 2 ng vo l Vpos (ng vo dng) v Vneg (ng
vo m). Cc chn ADC3:7 dng lm ng vo dng, cc chn ADC0:2
l ng vo m, i vi la chn ny, kt qu ADC s l :

(4.2)

y Gain l li c th ty chn. Cng thc trn cho thy kt qu ADC c


th l s m khi Vpos < Vneg. Do , di gi tr ca ADC trong trng hp ny l 512 ti 511. V vy, kt qu trong thanh ghi ADC c biu din di dng s b
2. bit c kt qu l s m hay dng ta kim tra bit ADC9 (trong thanh ghi

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.

Hnh 4.11: Ng vo vi sai

Ch Hot ng: C hai ch hot ng ca b ADC l


chuyn i lin tc (Free Running) v chuyn i tng bc (Single
Conversion).
- Chuyn i lin tc: l ch m sau khi khi ng th b ADC thc
hin chuyn i lin tc khng ngng.
- Chuyn i tng bc: l m b ADC sau khi hon thnh mt chuyn
i th s ngng, mt chuyn i tip theo ch c bt u khi phn mm c
yu cu chuyn i tip.
hiu r thm v cc thng s ca ATmega128 ta c th tra cu trong datasheet
ca ATmega128 ca Atmel cung cp.

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.

Hnh 4.12: S khi v s chn ca


DVR8432

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.

Hnh 4.13: S khi ca MC 33486,


MC33887,MC33932
MC 33887 tch hp bn trong 1 b cu H nn ch iu khin c mt ng
c, MC33486 iu khin hai FET iu khin ng c vi dng ti ln ti 10A
ring MC33932 c tch hp bn trong hai b cu H nn iu khin c hai ng
c DC cng lc.

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

Hnh 4.13: Cu trc h bm ca ti


Cu trc ca h bm gm hai phn chnh. Phn 1 x l nh da vo chui hnh
nh thu c t camera nhn dng v tnh ton v tr ca i tng mc tiu.
Phn 2 l phn iu khin, da vo thng s v tr i tng nhn c trong mt
phng nh, tnh ton tn hiu iu khin r bt sao cho i tng di chuyn c
duy tr mt v tr nht nh trn mt phng nh v mt khong cch nht nh.
Trong qu trnh tm kim ta chia bc nh thnh nhiu pixel bao gm hai thnh phn
hoc thuc i tng hoc thuc nn. Qua ta tin hnh x l cc gi tr thuc
tnh ca i tng trong v tr mi v nhn dng c i tng cn theo di.Mt
phng nh l mt phng c gc nm pha trn bn tri, truc x l trc nm ngang, trc
X1

Y1

Hnh 4.14: Mt phng nh

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:

Hnh 4.15: Mch iu khin trung tm ATmega128

50
Khi ngun cung cp:

Hnh 4.16: Mch ngun

Khi giao tip RS232 v RF:

Hnh 4.17: Mch giao tip RS232 v RF

51
Khi Driver iu khin ng c:
-MC33486:

Hnh 4.18: Mch iu khin ng c 33486


-MC33887:

Hnh 4.19: Mch MC33887

52
-MC33932:

Hnh 4.20: Mch MC33932


-DVR8432:

Hnh 4.21: Mch DVR8432

53
-DVR8432 kit:

Hnh 4.22: DVR8432 kit


Hnh nh mch thc t ca h thng:

Hnh4.23: Mch MC thc t

54

Hnh 4.24: Mch DVR8432 thc t

Dff Hnh 4.25: Mch iu khin trung tm ATmega128

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.

Hnh 4.26: Giao din phn mm dng thut ton Meanshift

56

-Giao din th hai: S dng thut ton Camshift trn VC++ 6.0

Hnh 4.27: Giao din phn mm 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.

Hnh 4.27: Giao din phn mm trn VC++ 2008

58

Chng 5: NH GI V CHY TH NGHIM


H THNG
5.1 nh thc nghim ca m hnh h thng

Hnh 5.1: nh h thng thc t chy th nghim khi


truyn khng dy v thng qua RS2323

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:

-Tng quan v x l nh v th vin m ngun m Opencv


-Tm hiu v xy dng c thut ton x l nh ti u trong h bm
-Tm hiu v h thng bm i tng v cc h tracking r bt.
Tuy nhin cng phi ni rng d c gng rt nhiu, nhng chng em vn
khng trnh khi nhng sai st trong vic xy dng v thit k h thng cng nh l
cch thc trnh by mt n tt nghip, v vy chng em rt mong nhn c s
ch bo v ng gp kin ca cc thy c gio cng nh cc bn sinh vin quan
tm n vn ny n ca em hon thin hn.
Em xin chn thnh cm n!

62

Ti liu tham kho


Ting Vit:
1. Nhp mn x l nh s, H Bch Khoa H Ni.
2. Nguyn Vn Ng (2001), x l nh (dch t quyn Two Dimensional Signal
and Image Processing ca tc gi Jae S.Lim)
3. Nguyn Kim Sch (1997), x l nh v video s, NXB Khoa hc k thut,
H Ni.
4. Ng Din Tp (1997) , x l nh bng my tnh, NXB Khoa hc k thut
H Ni.

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);
}

CvScalar COpencvUIDlgDlg:: hsv2rgb( float hue )//


{
int rgb[3], p, sector;
static const int sector_data[][3]={{0,2,1}, {1,2,0}, {1,0,2}, {2,0,1}, {2,1,0},
{0,1,2}};
hue *= 0.033333333333333333333333333333333f;
sector = cvFloor(hue);
p = cvRound(255*(hue - sector));
p ^= sector & 1 ? 255 : 0;
rgb[sector_data[sector][0]] = 255;
rgb[sector_data[sector][1]] = 0;
rgb[sector_data[sector][2]] = p;
return cvScalar(rgb[2], rgb[1], rgb[0],0);//
}

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()

You might also like