ung dung xu ly anh trong thuc te voi thu vien opencv_2

Download Ung Dung Xu Ly Anh Trong Thuc Te Voi Thu Vien OpenCV_2

If you can't read please download the document

Upload: di-vao-ngo-cut

Post on 01-Jan-2016

685 views

Category:

Documents


3 download

TRANSCRIPT

  • Nguy

    n V

    n L

    ong

    ng d ng x l nh trong th c th v i thvi n OpenCV C/C++

    Nguy n Vn [email protected]

  • Nguy

    n V

    n L

    ongM uX l nh v th gic my l lnh v c m ngy nay c pht tri n v ng d ng r t r ngri trong nhi u lnh v c khc nhau nh vo s pht tri n ngy cng m nh m c a cc h

    th ng my tnh, cc thu t ton v cng trnh nghin c u khc nhau c a nhi u nh khoah c trn th gi i. Vi t Nam, cc ng d ng v x nh b c u c tri n khai trn m t s lnh v cnh l p t h th ng nh n d ng bi n bi n s xe cc bi xe, h th ng nh n d ng vntay ch m cng cc cng s mn h c x l nh cc tr ng i h c c xem lmn h c b t bu c m t s ngnh nh cng ngh thng tin, i n t vin thng Tuynhin nhn m t cch khch quan th s l ng cc ng d ng c tri n khai trn th c t lqu t i, lnh v c ny s cn pht tri n m nh m trong tng lai n u nh c quan tmm t cch nghim tc.Xu t pht t th c t rng mn h c x l nh cc tr ng i h c l m t mn h c mangn ng tnh h c thu t, kh khan, cc v n c m t d i d ng ton h c, sinh vin n mb t mn h c m t cch chung chung m khng i vo b n ch t v n , ng d ng th c tinc a mn h c, thm vo s l ng ti li u v chuyn ngnh ny bng ti ng Vi t l khngnhi u, bng qu trnh nghin c u nghim tc, kinh nghi m th c t tc gi c g ng chora i cu n sch ng d ng x l nh trong thc t v i th vi n OpenCV.Cu n c p t i m t s ph n c a lnh v c x l nh v th gic my, thng qua s dingi i tr c quan, khng xa vo nh' ng cng th c ton h c tru t ng, ph c t p nhng v nlm n i b t nn c v n , gip ng i c c c ci nhn t ng qut, hi u c khini m v hn n ' a bi t c nh' ng v n ng d ng vo th c t nh th no. Cc ch trong cun sch ny u i km v i m t chng tr nh m phng c vi t bng ngnng' C++ v i s gip c a th vi n OpenCV, m t th vi n m ngung m c nhgi l m nh m v t c x lfi p ng c cc ng d ng trong th i gian th c.Cu n sch c chia thnh b n ph n, ph n u gi i thi u v th vi n OpenCV, ph n thhai ni v m t s v n ch n l c th ng g p trong x l nh nh khng gian mu, ccb l c, cch pht hi n ng thflng ng trn trong nh , ph n th ba ni v m t sth thu t l p trnh v i th vi n MFC v ph n cu i cng ni v m t s ng d ng th c tnh bi ton nh n d ng bi n s xe Cu n sch khng ch l ti li u tham kh o b ch trong qu trnh h c t p c a cc b n sinhvin, qu trnh lm lu n vn, n m cn l cng c t t h tr cho vi c tri n khai cc ng d ng thng m i c a cc k s, doanh nghi p v nh' ng ng i quan tm t i lnh v c.Cu i cng d dnh nhi u tm huy t hon thnh cu n sch nhng ch c ch n cu n

    sch vn cn nhi u sai xt, tc gi mong c s gp c a b n c. Xin g i l i chc t tt t p v l i c m n su s c t i c gi

  • Nguy

    n V

    n L

    ongH ng d n s d ng schCu n sch c vi t d a trn nh' ng nghin c u v qu trnh lm vi c th c t c a tc gi ,v i m i v n nu trong sch b n c c th c qua n m b t c t ng chnh, sau c th tm thm ti li u nng cao hn v n v c th th c hnh d a vo mu

    chng tr nh, source code i km.

    Th vi n OpenCV c vi t trong sch l b n OpenCV 2.4.3, i v i cc b n OpenCVkhc th b n c c th ty chnh l i m t cht tuy nhin v b n ch t c a v n l tng i gi ng nhau. Ngn ng' l p trnh cho cc v d l C/C++, IDE s d ng l Visual Studio2010. Tuy nhin a s chng tr nh trong cu n sch ny u c tch bi t ph n x lchnh ra vo m t file *.cpp no nn ta c th l y n p d ng vo cc trnh dchkhc.

    C 10 ch chnh bao qut m t s kha c nh c a lnh v c x l nh c vi t kh chiti t v gi i thch y , 3 project c tc gi m t chung chung hn. Do b n cn u cha th c s quen v i th vi n OpenCV nn c theo th t t u t i cu i

    Trong cu n sch c nhi u v n lin quan t i k thu t l p trnh nhng do ph m vi gi ih n, tc gi ch c th ni qua c m t s kha c nh, trn th c t c nhi u cch khcnhau gi i quy t cng m t cng vi c, v i nh' ng v n l p trnh b n c cha r c ththam kh o thm ti cc ngun khc nhau ho c gi i quy t theo h ng m b n c c mth y l tha ng nh t

  • Nguy

    n V

    n L

    ongM c L c

    Chng I. Lm quen v i th vi n OpenCV

    1. Gi i thi u v th vi n OpenCV 52. Phin b n OpenCV 1 hay OpenCV 2 53. H ng dn s d ng OpenCV trn Window 6

    Chng II. Cc php x lfi n gi n trong OpenCV

    1. Chng tr nh u tin 122. Khng gian mu, chuy n i khng gian mu 133. i u chnh sang, tng ph n 174. nh nh phn, nh phn ha v i ng ng ng 195. Histogram, cn bng histogram 236. Phng to, thu nh, xoay nh 277. L c s trong nh 308. Cc php ton hnh thi h c trong nh 379. Tm bin nh v i b l c Canny 4310. Chuy n i Hough, Pht hi n ng thflng, ng trn trong nh 46

    Chng III . L p trnh x l nh v i giao di n MFC

    1. Gi i thi u v MFC 512. Kh i t o project MFC 513. Lm vi c v i cc i u khi n (Control) 544. Chuy n i cc ki u d' li u trong MFC 595. Chng tr nh t i nh v hi n th nh ln giao di n MFC 61

    Chng IV. M t s ng d ng trong th c t

    1. My Photo Editor, ph n m m chnh s a nh n gi n 642. Nh n d ng bi n s xe 733. MyCam, m t s hi u ng nh trong video 90

  • Nguy

    n V

    n L

    ongChng I. Lm quen v i th vi n OpenCV1. Gi i thi u v th vi n OpenCVOpenCV (Open Source Computer Vision) l m t th vi n m ngun m v th gic myv i hn 500 hm v hn 2500 cc thu t ton c t i u v x l nh, v cc v n

    lin quan t i th gic my. OpenCV c thi t k m t cch t i u, s d ng t i a s cm nh c a cc dng chip a l i th c hi n cc php tnh ton trong th i gian th c,ngha l t c p ng c a n c th nhanh cho cc ng d ng thng th ng. OpenCVl th vi n c thi t k ch y trn nhi u n n t ng khc nhau (cross-patform), ngha ln c th ch y trn h i u hnh Window, Linux, Mac, iOS Vi c s d ng th vi nOpenCV tun theo cc quy nh v s d ng ph n m m m ngu n m BSD do b n cth s d ng th vi n ny m t cch min ph cho c m c ch phi thng m i ln thngm i.

    D n v OpenCV c kh i ng t nh' ng nm 1999, n nm 2000 n c gi i thi utrong m t h i ngh c a IEEE v cc v n trong th gic my v nh n d ng, tuy nhinb n OpenCV 1.0 mi t i t n nm 2006 m i chnh th c c cng b v nm 2008 b n 1.1(pre-release) m i c ra i. Thng 10 nm 2009, b n OpenCV th h th hai ra i(th ng g i l phin b n 2.x), phin b n ny c giao di n c a C++ (khc v i phin b ntr c c giao di n c a C) v c kh nhi u i m khc bi t so v i phi n b n th nh t.

    Th vi n Open CV ban u c s h tr t Intel, sau c h tr b Willow Garage ,mt ph ng th nghim chuy n nghin cu v cng ngh robot. Cho n nay, OpenCV vnl th vi n m, c pht trin bi ngun qu khng li nhun (none -profit foundation)v c s h ng ng rt ln ca cng ng.

    2. Phin b n OpenCV 1 hay OpenCV 2?

    Cho t i nay, tr i qua hn 6 nm t lc phin b n OpenCV u tin c cng b , cl n l t nhi u phin b n OpenCV ra i, tuy nhin c th chia th vi n ny thnh hai b nchnh d a trn nh' ng c i m khc bi t l n nh t c a chng: phin b n OpenCV th hth nh t (hay cn g i l phin b n OpenCV 1.x) v phin b n OpenCV th hai (hay cng i l phin b n OpenCV 2.x). Sau y ta s ch ra m t s i m khc bi t c b n gi' a haiphin b n ny.

    - OpenCV 1.x (bao gm b n 1.0 v b n pre-release 1.1) d a trn giao di n C, c utrc c a m t nh s d a trn c u trc c a IplImage, trong khi th OpenCV 2.x d atrn giao di n C++, c u trc c a nh s , ma tr n d a trn c u trc c a cv::Mat.

    - Trong OpenCV 1.x, ng i s d ng ph i hon ton qu n l b nh c a cc it ng, ngha l khi m t i t ng m i c t o ra, ta ph i lun ch fi gi iphng n khi khng cn s d ng n' a (trong nhi u tr ng h p c th s b trn bnh n u khng ch fi u ny), trong khi th vi n OpenCV 2.x vi c qu n l b nhtr nn d dng hn nh cc hm h y cc cc l p i t ng trong OpenCV 2.x th c hi n i u ny khi m t i t ng khng cn c s d ng n' a.

  • Nguy

    n V

    n L

    ong- Vi c vi t cc dng l nh th c hi n cng m t ch c nng trong OpenCV 2.x l ddng hn nhi u so v i OpenCV 1.x, m t ph n l l giao di n C++ c ph n d hi uhn so v i C, m t ph n l cc hm trong OpenCV 2.x c t i u ha nhi ub c trung gian khng c n thi t v m t giao di n ng i s d ng. Chflng h n ta hyxt v d v vi c pht hi n ng trn trong nh m u d a vo thu t ton Hough,

    cc b c th c hi n l load m t nh m u, chuy n sang nh nh phn, tm bind a trn b l c canny v pht hi n ng trn d a trn thu t ton Hough. OpenCV1.x th c hi n nh sau:

    Trong khi , OpenCV 2.x th c hi n nh sau:

    Ta th y rng i t ng nh gray trong OpenCV 2.x khng c n ph i kh i t o, it ng storage ( i t ng trung gian, khng c ngha v m t s d ng) cngkhng c n ph i kh i t o (v do khng c n gi i phng).

    - Th vi n OpenCV 1.x tuy ch a m t l ng l n hm x l v thu t ton, tuy nhinn vn d ng s khai. Th vi n OpenCV 2.x c b xung kh nhi u hm,thu t ton v c t i u kh nhi u c bi t trong cc kha c nh v pht hi n it ng (detection), nh n d ng i t ng (partten regconition) v theo d i i t ng(tracking). Hn th n' a, tuy c giao di n l C++ nhng OpenCV 2.x v n d' m tph n giao di n C tng thch v i cc phin b n c a OpenCV 1.x

    T m t s c i m trn ta c th th y rng th vi n OpenCV phin b n 2.x l c nhi ui m n i tr i hn so v i phin b n 1.x, Tuy nhin trong m t s tr ng h p nh cc hth ng nhng khi m trnh dch ch n thu n ch p nh n ngn ng' C th phi n b n 1.x vncn gi tr. Trong cu n sch ny, cc n i dung ci t, thu t ton, ng d ng ch dnhcho OpenCV phin b n 2.x trn n n t ng h i u hnh Window.

    3. H ng d n s d ng th vi n OpenCV trn Window

  • Nguy

    n V

    n L

    ongTr c h t ta c n download th vi n OpenCV v my tnh, t t hn l lun download b nm i nh t t i a ch http://sourceforge.net/projects/opencvlibrary/ . Ch n b n build s nph h p v i h i u hnh ang dng, b n OpenCV c s d ng trong cu n sch ny lb n 2.4.3 v i l n update cu i cng l vo ngy 25 thng 12 nm 2012. Sau khi downloadv my, ti n hnh ci t bnh th ng, ta m c nh th m c ci t l C:\ th m c ci

    t xong s c d ng C:\opencv. Ti p theo ta s ti n hnh ty chnh c th lm vi c v iOpenCV qua hai IDE thng d ng l Microsoft Visual Studio v Eclipse CDT

    Trn Microsoft Visual Studio

    Phin b n Visual studio s d ng y l phin b n Visual Studio 2010, cc phin b ntr c ta hon ton c th c u hnh m t cch tng t .T o m t project m i: New > Project, trong c a s New Project ch n Visual C++, Win32console application. t tn project l opencv

    Ch n OK, sau nh n Next, h p tho i ti p theo xu t hi n, h p tho i ny ta ch nApplication type l Console application v Additional option l Empty project, nh nFinish k t thc qu trnh kh i t o

  • Nguy

    n V

    n L

    ong

    Project m i c t o ra l project hon ton tr ng, ta ph i thm vo t nh t m t filengun chng tr nh c th ch y c, trong Solution Explorer taclick chu t ph i vo Source Files,ch n Add -> New Item H p tho iAdd New Item hi n ra, ta ch n ki uc n thm vo l C++ File(.cpp) ngth i trong Name ta t tn cho filethm vo, gi s l FirstApp.cpp.By gi trong file ny ta c th thmvo cc #include v g i hm main() ch y chng tr nh.

    chng tr nh c th ch y cv i th vi n OpenCV ta c n ty chnh l i m t s thu c tnh c a project nh sau

    Vo Project -> Properties (ho c nh n t h p phm Alt + F7) m h p tho i Properties.H p tho i opencv Property Pages hi n ra, trong m c Configuration Properties ch nVC++ Directories, tng ng bn ph i, ta tm m c Include Directories v LibraryDirectories. Ta s ch ng dn hai th m c ny n cc ph n tng ng c a th vi nOpenCV.M c Include Directories, ta ty chnh bn ph i t i C:\opencv\build\includeM c Library Directories tr n th m c C:\opencv\build\x86\vc10\lib n u nh ta s d ng h i u hnh 32bit ho c C:\opencv\build\x64\vc10\lib cho h i u hnh 64bit.

  • Nguy

    n V

    n L

    ongTi p theo, trong h p tho i opencv Property Pages -> Configuration Properties -> Linkerch n Input, tng ng bn ph i, thm vo cc gi tr cho m c AdditionalDependencies l opencv_core243d.lib, opencv_imgproc243d.lib, opencv_highgui243d.lib.Ch l

    cc lib thm vo s tng ng v i ccheader ta khai bo trong chng tr nh, vty thu c vo m c ch s d ng m ta cth thm vo cc lib cc nhau, gi s ta c ns d ng t i cc hm v video, khi tathm header #include th trong ph nAdditional Dependencies ta ph i khai bothm opencv_video243d.lib. Ch' d ngcu i cc file trn th hi n ta ang ho t ng ch debug, ta c th thm cc libkhng c ch' d cu i nhopencv_core243.lib trong ch release. Tuy nhin khi ang c n h c t p v c n nhi u chnh s a ta nn ch debug.

    Cu i cng, khi dch xong m t chng tr nh, n c th ch y c ta c n ch t i ccfile *.dll. Cch n gi n nh t l ta copy cc file *.dll tng ng (nhopencv_core243d.dll, opencv_imgproc243d.dll) vo th m c ch a file ch y c a chngtrnh (file *.exe). Cc file *.dll ny nm trong m c C:\opencv\build\x86\bin v i win 32 bitho c C:\opencv\build\x64\bin v i win 64 bit. V i cc phin b n OpenCV c hn, t a c ncopy lun file tbb_debug.dll (trong ch debug) ho c tbb.dll (trong ch release) voth m c ch a file *.exe. tbb.dll (Thread building block) l file kh quan tr ng, thi u nchng tr nh s bo l i.

    Sau khi hon t t vi c ch dn th m c ch a header, library v link t i cc library tng ng, ta c th include cc header c a opencv vo chng tr nh v c th g i cc hm lmvi c c a OpenCV.

  • Nguy

    n V

    n L

    ongV i Eclipse CDTKh i ng Eclipse, T c a s Eclipse ch n New -> C++ Project , h p tho i C++ Projectxu t hi n, trong h p tho i ta ch n Project name l opencv, Project type l Hello WorldC++ Project (C th ch n l Empty

    Project), Toolchains l MinGW GCC,Ch n Finish v ta c m t Project m i.By gi ty chnh cho project ny ho t ng c v i OpenCV.Trong c a s c a Eclipse ch n Project ->Properties, c a s Properties hi n ra.Tron c a s Properties ch n C/C++Build->Settings. Trong tab Tool Settings. ph n GCC C++ Compiller ch nInclude ri dn ng dn t i m cInclude c a OpenCVl C:\opencv\build\include. Trong ph nMinGW C++ Linker ch n Library vch n cc m c nh sau: click vo d uc ng Library search path (-L) v dnt i th m clib: C:\opencv\build\x86\mingw\lib iv i Windows 32 bit ho cC:\opencv\build\x64\mingw\lib i v iWindows 64 bit. Ti p click vo d u "c ng" thm Library(-I) vo, cc library c nthm l n l t l: opencv_core243, opencv_highgui243, opencv_imgproc243 ... ni chungl ty vo nhu c u s d ng c th thm m t ho c nhi u lib vo.

  • Nguy

    n V

    n L

    ong

    Ta cng c n ph i copy cc *.dll tng ng vo th m c ch a file ch y *.exec a chngtrnh chng tr nh c th ch y thnh cng.

  • Nguy

    n V

    n L

    ongChng II. Cc php x l nh v ng d ng c b n1. Chng tr nh u tinTrong bi ny ta s tm hi u m t v d u tin nh m t chng tr nh Hello world load

    v hi n th m t nh. Chng tr nh nh sau:

    Nh ni trn, trong Opencv v i giao di n C++, t t c cc ki u d' li u nh, ma tr ni u c lu d ng cv::Mat. Hm imread s c nh u vo v lu vo bi n img.Nguyn mu c a hm ny nh sau: cv::Mat imread(const std::string &filename, int flags)trong , filename l ng dn t i file nh, n u file nh khng nm trong th m c lmvi c hi n hnh th ta ph i ch ra ng dn tng i d ng nh D:\Anh\vietnam.jpg ho cD://Anh//Vietnam.jpg. Flags l tham s lo i nh m ta mu n load vo, c th n u n umu n load nh m u th ta CV_LOAD_IMAGE_COLOR, n u l nh xm th ta CV_LOAD_IMAGE_GRAYSCALESau khi load nh thnh cng, mu n hi n th nh ln mn hnh ta ph i t o ra m t c a s ,hm namedWindow(const std::string &winname, int flags) s t o ra c a s v i tiu c as l m t chu i string winname. Tham s flags s ch ra ki u c a s mu n t o: n u thams CV_WINDOW_AUTOSIZE c s d ng th kch c c a s t o ra s c hi n thm t cch t ng ty thu c vo kch th c c a nh, n u l tham sCV_WINDOW_AUTOSIZE_FULLSCREEN kch th c c a s s kht v i mn hnh mytnh Cu i cng, hm imshow(const std::string &winname, cv::InputArray Mat) s hi n th nhra c a s c t o ra tr c .Hm waitKey(int delay) s i cho n khi c m t phm c b m vo trong kho ng th igian l delay. Ch l n u khng c hm ny th chng tr nh sau khi ch y s khngdng l i mn hnh v k t thc lun, ta dung hm ny m c ch l dng mn hnh l i

  • Nguy

    n V

    n L

    ongtrong m t kho ng th i gian bng tham s delay (tnh theo n v millisecond). N u mu ndng mn hnh l i mi mi ta t tham s delay bng 0.V sau y l k t qu chng tr nh chay:

    2. Khng gian mu, chuy n i gi a cc khng gian mu

    Khn gian mu l m t m hnh ton h c dng m t cc mu s c trong th c t cbi u din d i d ng s h c. Trn th c t c r t nhi u khng gian mu khc nhau c mhnh s d ng vo nh' ng m c ch khc nhau. Trong bi ny ta s tm hi u qua v bakhng gian mu c b n hay c nh c t i v ng d ng nhi u, l h khng gian muRGB, HSV v CMYK.Khng gian mu RGBRGB l khng gian mu r t ph bi n c dng trong h a my tnh v nhi u thi t b kthu t s khc. t ng chnh c a khng gian mu ny l s k t h p c a 3 mu s c c b n: mu (R, Red), xanh l c (G, Green) v xanh l (B, Blue) m t t t c cc mu s ckhc.N u nh m t nh s c m ha bng 24bit, ngha l 8bit cho knh R, 8bit cho knh G,8bit cho knh B, th m knh ny mu ny s nh n gi tr t 0-255. V i m i gi tr khcnhau c a cc knh mu k t h p v i nhau ta s c m t mu khc nhau, nh v y ta s ct ng c ng 255x255x255 = 1.66 tri u mu s c.

  • Nguy

    n V

    n L

    ongV d : mu en l s k t h p c a cc knh mu (R, G, B)v i gi tr tng ng (0, 0, 0) mu tr ng c gi tr (255,255, 255), mu vng c gi tr (255, 255, 0), mu tm mc gi tr (64, 0, 128) ...N u ta dng 16bit m ha m tknh mu (48bit cho ton b 3 knh mu) th di mu s

    tri r ng ln t i 3*2^16 = ... M t con s r t l n.

    Khng gian mu CMYK.

    CMYK l khng gian mu c s d ng ph bi n trongngnh cng nghi p in n. t ng c b n c a h khnggian ny l dng 4 mu s c c b n ph c v cho vi c pha tr n m c in. Trn th c t ,ng i ta dng 3 mu l C=Cyan: xanh l, M=Magenta: h ng xm, v Y=Yellow: vng bi u din cc mu s c khc nhau. N u l y mu hng xm c ng v i vng s ra mu ,mu xm k t h p v i xanh l s cho xanh lam ... S k t h p c a 3 mu trn s cho ra muen, tuy nhin mu en y khn ph i l en tuy t i v th ng c tng ph n l n,nn trong ngnh in, ti t ki m m c in ng i ta thm vo mu en in nh' ng chi ti tc mu en thay v ph i k t h p 3 mu s c trn. V nh v y ta c h mu CMYK. ch' K y l k hi u mu en (Black), c nh ch' B c dng bi u din mu Bluenn ng i ta l y ch' ci cu i K bi u din mu en?

    Nguyn l lm vi c c a h mu ny nh sau : Trn m tn n gi y tr ng, khi m i mu ny c in ln s lo i b d ni thnh ph n mu tr ng. 3 mu C, M, Y khc nhau in theonh' ng t l khc nhau s lo i b i thnh ph n m t cchkhc nhau v cu i cng cho ta mu s c c n in. Khi c n inmu en, thay v ph i in c 3 mu ng i ta dng mu en in ln. Nguyn l ny khc v i nguyn l lm vi c c ah RGB ch h RGB l s k t h p c a cc thnh ph nmu, cn h CMYK l s lo i b ln nhau c a cc thnhph n mu.

    Khng gian mu HSV.HSV v cng gn tng t nh HSL l khng gian mu c d ng nhiu trong vic ch nhs'a nh, phn tch nh v mt phn ca lnh vc th gic my tnh. H khng gian n y davo 3 thng s sau m t m u scH = Hue: mu sc, S = Saturation: m c, s bo h a, V = value: gi tr c ng sng.Khng gian mu ny th ng c biu din d i dng h nh tr hoc h nh nn . Theo ,

    V d : mu en l s k t h p c a cc knh mu (R, G, B)v i gi tr tng ng (0, 0, 0) mu tr ng c gi tr (255,255, 255), mu vng c gi tr (255, 255, 0), mu tm mc gi tr (64, 0, 128) ...N u ta dng 16bit m ha m tknh mu (48bit cho ton b 3 knh mu) th di mu stri r ng ln t i 3*2^16 = ... M t con s r t l n.

    Khng gian mu CMYK.

    CMYK l khng gian mu c s d ng ph bi n trongngnh cng nghi p in n. t ng c b n c a h khnggian ny l dng 4 mu s c c b n ph c v cho vi c pha tr n m c in. Trn th c t ,ng i ta dng 3 mu l C=Cyan: xanh l, M=Magenta: h ng xm, v Y=Yellow: vng bi u din cc mu s c khc nhau. N u l y mu hng xm c ng v i vng s ra mu ,mu xm k t h p v i xanh l s cho xanh lam ... S k t h p c a 3 mu trn s cho ra muen, tuy nhin mu en y khn ph i l en tuy t i v th ng c tng ph n l n,nn trong ngnh in, ti t ki m m c in ng i ta thm vo mu en in nh' ng chi ti tc mu en thay v ph i k t h p 3 mu s c trn. V nh v y ta c h mu CMYK. ch' K y l k hi u mu en (Black), c nh ch' B c dng bi u din mu Bluenn ng i ta l y ch' ci cu i K bi u din mu en?

    Nguyn l lm vi c c a h mu ny nh sau : Trn m tn n gi y tr ng, khi m i mu ny c in ln s lo i b d ni thnh ph n mu tr ng. 3 mu C, M, Y khc nhau in theonh' ng t l khc nhau s lo i b i thnh ph n m t cchkhc nhau v cu i cng cho ta mu s c c n in. Khi c n inmu en, thay v ph i in c 3 mu ng i ta dng mu en in ln. Nguyn l ny khc v i nguyn l lm vi c c ah RGB ch h RGB l s k t h p c a cc thnh ph nmu, cn h CMYK l s lo i b ln nhau c a cc thnhph n mu.

    Khng gian mu HSV.HSV v cng gn tng t nh HSL l khng gian mu c d ng nhiu trong vic ch nhs'a nh, phn tch nh v mt phn ca lnh vc th gic my tnh. H khng gian n y davo 3 thng s sau m t m u scH = Hue: mu sc, S = Saturation: m c, s bo h a, V = value: gi tr c ng sng.Khng gian mu ny th ng c biu din d i dng h nh tr hoc h nh nn . Theo ,

    V d : mu en l s k t h p c a cc knh mu (R, G, B)v i gi tr tng ng (0, 0, 0) mu tr ng c gi tr (255,255, 255), mu vng c gi tr (255, 255, 0), mu tm mc gi tr (64, 0, 128) ...N u ta dng 16bit m ha m tknh mu (48bit cho ton b 3 knh mu) th di mu stri r ng ln t i 3*2^16 = ... M t con s r t l n.

    Khng gian mu CMYK.

    CMYK l khng gian mu c s d ng ph bi n trongngnh cng nghi p in n. t ng c b n c a h khnggian ny l dng 4 mu s c c b n ph c v cho vi c pha tr n m c in. Trn th c t ,ng i ta dng 3 mu l C=Cyan: xanh l, M=Magenta: h ng xm, v Y=Yellow: vng bi u din cc mu s c khc nhau. N u l y mu hng xm c ng v i vng s ra mu ,mu xm k t h p v i xanh l s cho xanh lam ... S k t h p c a 3 mu trn s cho ra muen, tuy nhin mu en y khn ph i l en tuy t i v th ng c tng ph n l n,nn trong ngnh in, ti t ki m m c in ng i ta thm vo mu en in nh' ng chi ti tc mu en thay v ph i k t h p 3 mu s c trn. V nh v y ta c h mu CMYK. ch' K y l k hi u mu en (Black), c nh ch' B c dng bi u din mu Bluenn ng i ta l y ch' ci cu i K bi u din mu en?

    Nguyn l lm vi c c a h mu ny nh sau : Trn m tn n gi y tr ng, khi m i mu ny c in ln s lo i b d ni thnh ph n mu tr ng. 3 mu C, M, Y khc nhau in theonh' ng t l khc nhau s lo i b i thnh ph n m t cchkhc nhau v cu i cng cho ta mu s c c n in. Khi c n inmu en, thay v ph i in c 3 mu ng i ta dng mu en in ln. Nguyn l ny khc v i nguyn l lm vi c c ah RGB ch h RGB l s k t h p c a cc thnh ph nmu, cn h CMYK l s lo i b ln nhau c a cc thnhph n mu.

    Khng gian mu HSV.HSV v cng gn tng t nh HSL l khng gian mu c d ng nhiu trong vic ch nhs'a nh, phn tch nh v mt phn ca lnh vc th gic my tnh. H khng gian n y davo 3 thng s sau m t m u scH = Hue: mu sc, S = Saturation: m c, s bo h a, V = value: gi tr c ng sng.Khng gian mu ny th ng c biu din d i dng h nh tr hoc h nh nn . Theo ,

  • Nguy

    n V

    n L

    ongi theo v ng trn t 0 -360 l tr ng bi u din mu s c(Hue). Tr ng ny b t u tmu u tin (red primary) t i mu xanh l c u tin (green primary) nm trongkho ng 0-120 , t 120 - 240 l mu xanh l c t i xanh l (green primary - blueprimary). T 240 - 360 l t mu en t i l i mu .

    Khng gian mu HSV Hnh trn bi u din m u s c (HUE)

    Chuyn i gia cc khng gian m u.

    Chuyn i RGB sang CMYK v ng c li.Nh ni tr n, thnh phn K l thnh phn ph d ng in cho nh'ng im m u cmu en trong h CYMK, do vy chuyn khng gian m u t RGB sang CMYK tr cht ta chuyn RGB sang CMY sau t m thnh phn K c n li. C ng thc chuyn tRGB sang CMY:(C', M', Y') = ((255 - R), (255 - G), (255 - B)).Vic tnh gi tr ca K li l mt vn khc v n lin quan ti nh sn xut cng nghin, tuy nhin v mt lfi thuyt c th chp nhn rng K = min {C/2,55, M/2,55, Y'/2,55} ,nh v y 0

  • Nguy

    n V

    n L

    ongS = C/V. Trong tr ng hp V hoc C bng 0, S = 0. chuyn t HSV sang RGB ta l m nh sau:Gi s ta c khng gian m u HSV vi H = [0, 360], S = [0, 1], V = [0, 1]. Khi , ta tnhC = VxS. H' = H/60.

    X = C(1 - |H' mod2 -1|). Ta biu din h (R1, G1, B1) nh sau:

    Chng tr nh chuy n i cc khng gian mu

    Trong OpenCV, cc khng gian mu c c chuy n i qua l i nh hm cvtColor(convert color), nguyn mu hm ny nh sau:

    cv::cvtColor(cv::InputArray src, cv::OutputArray dst, int code)Trong , src, dst l nh g c v nh thu c sau khi chuy n i khng gian mu. codem m chuy n i khng gian mu. OpenCV nh ngha kh nhi u chuy n i gi' a cckhng gian mu chflng h n nh code = CV_BGR2GRAY s chuy n nh khng gian muRGB sang nh xm, code = CV_HSV2BGR s chuy n nh khng gian mu HSV sangkhng gian mu RGB

  • Nguy

    n V

    n L

    ongSau y l h nh nh khi chuy n i cc khng gian mu trn

    3. i u chnh sang v tng ph n trong nh

    Trong bi ny ta s tm hi u v c u trc c a m t b c nh, cch ti p c n v i u chnh t itng i m nh.M t nh s c lu tr ' trn my tnh l m t ma tr n cc i m nh (hay pixel). TrongOpenCV n c bi u din d i d ng cv::Mat. Ta xt m t ki u nh thng th ng nh t, l nh RGB. V i nh ny, m i pixel nh quan st c l s k t h p c a cc thnhph n mu R (Red), Green (Green) v Blue (Blue). S k t h p ny theo nh' ng t l R, G,B khc nhau s t o ra v s cc mu s c khc nhau. Gi s nh c m ha bng 8 bitv i tng knh mu, khi m i gi tr c a R, G, B s nm trong kho ng [0, 255]. Nh v yta c th bi u din t i 255*255*255 ~ 1.6 tri u mu s c t ba mu c b n trn. Ta c thxem cch bi u din nh trong OpenCV nh d ng cv::Mat qua hnh nh sau:

  • Nguy

    n V

    n L

    ongC t 0 C t 1 C t mHng 0 0, 0 0, 0 0, 1 0, 1 0, 1 0, m 0, m 0, mHng 1 1, 0 1, 0 1, 1 1, 1 1, 1 1, m 1, m 1, mHng 2 2, 0 2, 0 2, 1 2, 1 2, 1 2, m 2, m 2, m

    Hng n n, 0 n, 0 N, 1 n, 1 n, 1 n, m n, m n, m

    Nh v y, m i nh s c n hng v m c t, m g i l chi u di c a nh (width) v n g i lchi u cao c a nh (heigh). M i pixel v tr (i,j) trong nh s tng ng v i 3 knh muk t h p trong n. truy xu t t i tng pixel nh v i nh' ng knh mu ring r ta s d ngmu sau:

    Trong , i ,j l pixel hng th i v c t th j, img l nh m ta c n truy xu t t i cc pixelc a n. cv::Vec3b l ki u vector uchar 3 thnh ph n, dung bi u th 3 knh mu tng ng. k l knh mu th k, k = 0, 1, 2 tng ng v i knh mu B, G, R. Ch l trongOpenCV, h mu RGB c bi u din theo th t ch' ci l BGR.Sau y ta s p d ng ki n th c trn lm tng, gi m sang v tng ph n c a m t nh mu, vi c lm ny cng hon ton tng t i v i nh xm, ch khc bi t l nh tadung m t knh duy nh t bi u din nh xm.Chng tr nh tng, gi m sng v tng ph n c a m t nhGi s f l m t hm bi u din cho m t nh no , f(x,y) l gi tr c a pixel trong nh vtr (x,y). t g(x,y) = f(x,y) + . Khi , n u ` 1, th ta ni nh g(x,y) c tng ph ng p l n so v i nh f(x,y). N u ` 0ta n i sng c a nh g(x,y) thay i m t l ngl . D a vo cng th c trn ta c chng tr nh thay i sng v tng ph n c a nhnh sau:

  • Nguy

    n V

    n L

    ong

    Trong chng tr nh trn, hm clone() s sao chp m t nh gi ng h t nh nd g c cho vo nh ch ( dst = src.clone()). Gi tr c a cc pixel nh f(x,y) v g(x,y) y ph i nm trongkho ng [0, 255], trong khi php bi n i g(x,y) = f(x,y) + c th khi n cho gi tr c ag(x,y) v t qua ng ng . trnh tnh tr ng trn s ho c ki u d' li u khng tngthch, ta dng thm hm Hm ny s bi n ki u d' li utype n u khng ph i l uchar thnh ki u d' li u ucharSau y l k t qu chng tr nh v i gi tr = 2.0 v = 30

    4. nh nh phn, nh phn ha v i ng ng ng

    nh nh phn l nh m gi tr c a cc i m nh ch c bi u din bng hai gi tr 0ho c 255 tng ng v i hai mu en ho c tr ng. Nh phn ha m t nh l qu trnh bi nm t nh xm thnh nh nh phn. G i f(x,y) l gi tr c ng sng c a m t i m nh v tr (x,y), T l ng ng nh nh phn. Khi , nh xm f s c chuy n thnh nh nhphn d a vo cng th c f(x,y) = 0 n u f(x,y) T v f(x,y) = 255 n u f(x,y) > THnh sau m t m t nh nh phn v i ng ng nh phn T = 100

  • Nguy

    n V

    n L

    ong

    nh xm nh nh phn

    Hm chuy n nh phn ha nh trong OpenCV l hm threshold(). Nguyn mu hmnh sau:threshold(cv::InputArray src, cv::OutputArray dst, double thresh, int maxval, int type)Trong , src l nh u vo m t knh mu ( nh xm ), dst l nh sau khi c nhphn ha, thresh l ng ng nh phn, maxval l gi tr l n nh t trong nh (maxval = 255 i v i nh xm), type l ki u nh phn c th l CV_THRESH_BINARY,CV_THRESH_BINARY_INV, CV_THRESH_OTSU l n l t l nh phn ha thngth ng, nh phn ha ng c v nh phn ha theo thu t ton Otsu K t qu c a vi c nh phn ha m t nh ph thu c vo ng ng T, c ngha l v i m ing ng T khc nhau th ta c nh' ng nh nh phn khc nhau. Hnh sau m t 3 nh nhphn tng ng v i ng ng T = 50, T = 100 v T = 150.

    T = 50 T = 100 T = 150

    thu c m t nh nh phn t t m khng c n ph i quan tm t i cc i u ki n nh sngkhc nhau (khng c n quan tm t i ng ng T), ng i ta dng m t k thu t sao cho v im i ng ng xm khc nhau ta lun thu c m t nh nhi phn t t. K thu t g i l k

  • Nguy

    n V

    n L

    ongthu t nh phn ha v i ng ng ng (Dymamic threshold) hay nh phn thch nghi(Adaptive threshold)C nhi u phng php khc khc nhau th c hi n vi c ny, tuy nhin chng u d atrn t ng chnh l chia nh ra thnh nh' ng vng nh, v i m i vng p d ng vi c nhphn cho vng v i nh' ng ng ng nh phn khc nhau.Cc ng ng nh phn cc

    vng c tnh ton d a trn l n m c xm c a chnh cc pixel trn vng . Gi s tatnh ton ng ng cho m t vng no d a trn trung bnh c a cc pixel trong vng (ta c th xem m t vng l m t c a s ). Ta xt qu trnh nh phn v i ng ng ng trongm t vng c a s 5x5:

    Vng nh nh phn thu c trn l vng nh c nh phn v i ng ng l trung bnhc ng c a t t c cc trong c a s T = (55 + 10 + 100 + )/25 = 65.6 .

    Chng trnh nh phn ha v i ng ' ng ng nh sau

    thu t nh phn ha v i ng ng ng (Dymamic threshold) hay nh phn thch nghi(Adaptive threshold)C nhi u phng php khc khc nhau th c hi n vi c ny, tuy nhin chng u d atrn t ng chnh l chia nh ra thnh nh' ng vng nh, v i m i vng p d ng vi c nhphn cho vng v i nh' ng ng ng nh phn khc nhau.Cc ng ng nh phn ccvng c tnh ton d a trn l n m c xm c a chnh cc pixel trn vng . Gi s tatnh ton ng ng cho m t vng no d a trn trung bnh c a cc pixel trong vng (ta c th xem m t vng l m t c a s ). Ta xt qu trnh nh phn v i ng ng ng trongm t vng c a s 5x5:

    Vng nh nh phn thu c trn l vng nh c nh phn v i ng ng l trung bnhc ng c a t t c cc trong c a s T = (55 + 10 + 100 + )/25 = 65.6 .

    Chng trnh nh phn ha v i ng ' ng ng nh sau

    thu t nh phn ha v i ng ng ng (Dymamic threshold) hay nh phn thch nghi(Adaptive threshold)C nhi u phng php khc khc nhau th c hi n vi c ny, tuy nhin chng u d atrn t ng chnh l chia nh ra thnh nh' ng vng nh, v i m i vng p d ng vi c nhphn cho vng v i nh' ng ng ng nh phn khc nhau.Cc ng ng nh phn ccvng c tnh ton d a trn l n m c xm c a chnh cc pixel trn vng . Gi s tatnh ton ng ng cho m t vng no d a trn trung bnh c a cc pixel trong vng (ta c th xem m t vng l m t c a s ). Ta xt qu trnh nh phn v i ng ng ng trongm t vng c a s 5x5:

    Vng nh nh phn thu c trn l vng nh c nh phn v i ng ng l trung bnhc ng c a t t c cc trong c a s T = (55 + 10 + 100 + )/25 = 65.6 .

    Chng trnh nh phn ha v i ng ' ng ng nh sau

  • Nguy

    n V

    n L

    ongTrong chng tr nh trn, hm th c hi n vi c nh phn ha v i nh ng l hmadaptiveThreshold, Nguyn mu c a hm nh xau:

    Trong , src l nh xm c n nh phn, dst l nh k t qu thu c, maxValue l gi trl n nh t trong nh xm (thng th ng l 255), adaptiveMethod l cch th c nh phn v ing ng ng, n chnh l cch tnh gi tr ng ng nh phn trong tng vng c n nh phn,thresholdType nh ni trn, blockSize l kch th c c a s p d ng cho vi c tnhton ng ng ng, v C l m t thng s b tr trong tr ng h p nh c t ng ph nqu l n.K t qu khi ch y chng tr nh nh sau:

    nh xm nh nh phn

  • Nguy

    n V

    n L

    ong5. Histogram, cn b ng histogram trong nhHistogram c a m t nh l m t bi u ni lnm i quan h gi' a cc gi tr c a pixel nh (i m nh) v t n su t xu t hi n c a chng. Nhn vo

    bi u histogram ta c th on c m t nhsng t i nh th no.N u m t nh c histogram l ch v pha ph ibi u , ta ni nh th a sng. N u l ch vpha tri th nh thi u sng. Hnh bn m thistogram c a m t nh xm, nh ny chistogram l ch v pha tri c a bi u v do nh ny l kh t i. i v i nh mu, ta c thtnh ton histogram cho tng knh mu m t.Sau y l chng tr nh tnh v v bi u histogram c a m t nh mu.

  • Nguy

    n V

    n L

    ong

    Trong chng tr nh trn, u tin nh c a vo l m t nh m u, tnh histogramc a tng knh m u m t ta s phn tch nh ny thnh 3 knh m u ring r theo th t lBlue, Green v Red. Hm cv::split(const cv::Mat src, cv::Mat *mvbegin) s tch thnhsrc thnh cc knh mu tng ng lu trong mvbegin.Hm cv:: calcHist(const cv::Mat *images, int nimages, const int *channels,cv::InputArray mask, cv::OutputArray hist, int dims, const int histSize, const float**ranges, bool uniform = true, bool accumulate = false) s tnh histogram c a nh uvo images v lu k t qu tnh ton vo m ng hist. Cc thng s khc bao gm: nimagesl s l ng nh u vo, channels l danh sch chi u cc knh dung tnh histogram,mask l m t m t n ty chnh, n u khng dung g th l cv::Mat(). dims l chi u c ahistogram, b n OpenCV hi n t i h tr tnh ton histogram v i s chi u ln t i 32.histSize l kch th c dy histogram m i chi u, hai tham s cu i c th m c nh,Sau y l k t qu chng tr nh

  • Nguy

    n V

    n L

    ong

    i v i nh xm, ta c th xem nh n l m t knh mu, do v y tnh histogram c a nh xm ta cng c th lm hon ton tng t bng cch g i hm caclHist()Cn b ng histogramCn bng histogram (histogram equalization) lphng php lm cho bi u histogram c a nh cphn b m t cch ng u. y l m t bi n i khquan tr ng gip nng cao ch t l ng nh, thngth ng y l b c ti n x l c a m t nh u vocho cc b c ti p theo. cn bng histogram, ta dung hmequalizeHist(cv::InputArray src, cv::OuputArray dst)trong , src l nh u vo m t knh mu ( nh xmchfln h n), dst l nh sau khi cn bng. V d :

    Ta c k t qu sau:

  • Nguy

    n V

    n L

    ong

    cn bng histogram c a m t nh mu, tr c h t ta chuy n nh mu d ng RGB sangHSV, sau cn b ng thnh ph n knh mu V (Value t c sng) v bi n i ng c l i.Chng tr nh sau cn bng histogram c a nh mu

    Sau y l k t qu c a chng tr nh trn