Vous êtes sur la page 1sur 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: n n 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 m m 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:
v cm bin nh

LOS

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 X l nh v thut ton v th gic my

MLL Thng k v tp hp cc cng c x l

HighGUI 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 m t

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 Tnh ta tm, hng

Chp nh

Ly mu

Giao tip RS232,RF

Histogram iu kin dng

Lc nhiu

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 Xc sut phn b mu

Chp nh

RGB HSV

Tnh ton Histogram

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 c hai b USART l USART0/UART0 v

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 c a 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 m m ca h thng bm i tng My tnh v lu tr Camera X l nh frame RF RS232 Mch VK ATmega128 RF RS232

Cm bin Cng tc hnh trnh ng c Driver K 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 0 Y1 X1 x

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

Vous aimerez peut-être aussi