數(shù)字圖像處理課程設(shè)計_第1頁
數(shù)字圖像處理課程設(shè)計_第2頁
數(shù)字圖像處理課程設(shè)計_第3頁
數(shù)字圖像處理課程設(shè)計_第4頁
數(shù)字圖像處理課程設(shè)計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

問題引 問題提 現(xiàn)狀與意 達(dá)到目 作業(yè)內(nèi) 設(shè)計思 關(guān)鍵原 CamShift算 編程實 開發(fā)環(huán) 開發(fā)平 OpenCV介 設(shè)計思 采用線程技 目標(biāo)選 目標(biāo)識 鼠標(biāo)定 鼠標(biāo)操作分 程序控 程序流程 3.3.1主函數(shù)流程 Cam-Shift檢測流程 關(guān)鍵功能代 變量定 線程函 設(shè)置ROI函 鼠標(biāo)回調(diào)函 鼠標(biāo)控制函 4、實驗與測 程序使 運行程 物 控制鼠 實驗內(nèi) 結(jié)果分 5、總 參考資 問題引問題提現(xiàn)狀與意達(dá)到目作業(yè)內(nèi)設(shè)計思選 目選 目 運行程單單幀 置檢在像動體測中景法圖幀差法疑應(yīng)用廣泛的方法,但考慮到圖像中運動的不光是物體,還有持有物體的手和,參與者個人也會發(fā)生肢體移動,所以本文不采用這兩種方法。基于本文題目的特殊性和算法優(yōu)良性的綜合考慮,本次研究采用關(guān)鍵原CamShift算法,即"ContinuouslyApativeMean-Shift"算法,是一種運動中,只有HSI空間(或者HSV顏色空間)中的H分量可以表示顏色信息,本文采HSV顏色空間。在具體的計算過程中,首先將其他的色彩空間的值轉(zhuǎn)化到HSV空間,然后對其中的H分量做一維直方圖計算。稱作反向投影(BackProjection。Mean-Shift算Mean-Shift算法是一種在一組數(shù)據(jù)的密度分布中尋找局部極值的穩(wěn)定的方續(xù)分布用Mean-Shift核進行卷積,然后再應(yīng)用爬山算法。Mean-Shift算法忽略了數(shù)據(jù)中的outliers,即忽略遠(yuǎn)離數(shù)據(jù)峰值的點。Mean-Shift算法僅對數(shù)據(jù)局部窗口中的點進行處理,處理完成后再移動窗口Mean-Shift算法的步驟如下CamShift算稱是"ContinuouslyApaptiveMean-SHIFT",它的基本思想是圖像的所有幀作MeanShift運算,并將上一幀的結(jié)果(即搜索窗口的中心和大?。┳鳛橄乱粠钥梢灶A(yù)期,CamShift算法對于本研究應(yīng)當(dāng)十分有效。編程實開發(fā)環(huán)考慮到實驗測試時需要多種參數(shù)設(shè)置和交互控制,所以本次作業(yè)采用VC6.0+MFC進行界面開發(fā)。同時,為了省去不必要的重復(fù)性工作,以提高程序效率,我們采用OpenCV庫直接開發(fā)。OpenCV介OpenCVIn公司支持的開源計算機視覺庫。它輕量級而且高效——由CC++類構(gòu)成,實現(xiàn)了圖像處理和計算機視覺方面的很多通研究代碼(慢,不穩(wěn)定,獨立并與其他庫不兼容 +OpenCV使用類BSDlisence,所以對非商業(yè)應(yīng)用和商業(yè)應(yīng)用都是免費(FREE)的。OpenCV為InIntegratedPerformancePrimitives(IPP)提供了透明接口。味著如果有為特定處理器優(yōu)化的的IPP庫,OpenCV將在運行時自設(shè)計思個連通區(qū)域的都會被認(rèn)為是目標(biāo)。RGB空間,而采用HSV顏色控件。H代表色調(diào),這一個值就是CamShift算法分析與的目標(biāo)值。S代表飽和度,VHSV空間的優(yōu)勢就顯而易見了,因為在環(huán)境光線下,物體的H值不會變,變的只是S和V值。原則上講,H值,SV值取任意可去的值都可以。這需要一個前提,就是256之間,V10256SVA、計出屏/窗比基上續(xù)增比,大一合(如果仍不能滿足實際需要,程序界面提供用戶輸入此值的編輯框。B(或稱補償量屏幕左上方,這樣鼠標(biāo)就可能達(dá)到不了屏幕的左側(cè)和上方邊界。增加一個負(fù)矢量,使得鼠標(biāo)位置在屏幕坐標(biāo)原點與此矢量做和運算之后的點算起這樣,屏幕的所有部分在一定的倍率和偏移量聯(lián)合運算之后都會被覆蓋。體,物體A用來確定鼠標(biāo)的移動軌跡,物體B的某些特征(如反轉(zhuǎn),大小變化,-50<angle<-20:左鍵彈起事件-20<angle<20:無A、開始程序:點擊“開始”按鈕鼠標(biāo);進行重選目標(biāo)操作時也會自動釋放鼠標(biāo);F、重置參數(shù)/程序:點擊“重置參G、退出程序:連續(xù)兩次按下“ESC”鍵,或點擊“退 程序流程線線程開是否已選目是否顯示該幀圖顯示該幀處理線程結(jié)程序控制部釋放內(nèi)存,銷CamShift算法顯示/隱藏色彩空間轉(zhuǎn)換為抓取一幀,保開始循取得屏鼠標(biāo)回調(diào)函創(chuàng) 窗打 Cam-Shift檢測流程判判斷是否響應(yīng)鼠彈起事是否是控制鼠是否判斷體結(jié)束界面上顯示圓設(shè)置新的界面上顯示圓繪畫標(biāo)志橢圓CamShift算法檢測物計算反向投H,S,V取值范圍過關(guān)鍵功能代 p;//Cam-Shift算法搜索窗口數(shù)據(jù)結(jié)CvRecttrack_window;//Cam-Shift算法搜索窗口CvRectselection;//選擇的目標(biāo)區(qū)域數(shù)據(jù)結(jié)構(gòu)intbackproject_mode=0;intselect_object=0;inttrack_object=0;CvPointorigin;intfloat*hranges=hranges_arr;intvmin=10,vmax=256,smin=30;//S,V值的范線程函本函數(shù)是程序?qū)崿F(xiàn)物體和其他函數(shù)調(diào)用的主體函數(shù),是線程的執(zhí)行函數(shù)。代碼如下:CvCapture*capture=0;if(!capture){MessageBox("捕獲設(shè)備打開失敗}cvNamedWindow("物體程序//鼠標(biāo)回調(diào)響應(yīng)事cvSetMouseCallback("物體程序//創(chuàng)建滑動條cvCreateTrackbar("亮度min:","物體程序",&vmin,256,0);cvCreateTrackbar("亮度max:","物體程序",&vmax,256,0);cvCreateTrackbar("純度min:","物體程序",&smin,256,0);intkey;//while{if(!frame)if{}//把圖像拷貝到image數(shù)//轉(zhuǎn)換為HSV顏色空間if(track_object){int

cvSplit(hsv,hue,0,0,0);//if{}//運用camshift算法,找到需要的物體,物置保存在track_box if(!image->origin)track_box.angle=-if{doubledeg4=atof(str);doubledeg6=atof(str1);if(deg6>0&&{//調(diào)用控制鼠標(biāo)函}{}}}//鼠標(biāo)選擇ROI過程中,標(biāo)識已選擇區(qū)域if{}//cvShowImage("物體程序if(isShowHist){if{}cvShowImage("目標(biāo)區(qū)域顏色直方圖}{if{}}//以下是控制部key=cvWaitKey(20);//等待20ms,按if(key=='h'){if{m_showHist.SetWindowText("隱藏顏色直方圖}{m_showHist.SetWindowText("顯示顏色直方圖}}//重新選取目 (isRestart||(char)key==13||key=='r')//點擊“重選”按鈕或者按回車{}{if{if{}}{}}//只關(guān)閉窗if((char)key==27||key=='q')//按“ESC”鍵或者按“Q”{isCursor=false;//關(guān)閉窗口后也停止}if(isExit){}}cvDestroyWindow("物體程序");//重置程序狀float//創(chuàng)建該ROI的顏色直方for(inti=0;i<hdims;i++){CvScalarcolor=hsv2rgb(i*180f/hdims);cvRectangle(histimg,cvPoint(i*bin_w,histimg->height),cvPoint((i+1)*bin_w,histimg--val),color,-}//如果image還沒分配內(nèi)存空間,則返if{}if(image->origin==1){y=image->height-}if(select_object==1){}if{{casecaseif{track_object=-}}}intCurX,CurY;doublexscale,yscale;double//取得鼠標(biāo)夾角參//計算出鼠標(biāo)坐標(biāo),并繼續(xù)放大一定的倍率,使得鼠標(biāo)可以到達(dá)屏幕任意位置ififif(CurX>ScreenWidth)if(CurY>ScreenHeight)((track_box.angle<deg4&&track_box.angle>deg6)&&abs(ClickCount-{m_curoper.SetWindowText("左鍵單擊}//發(fā)鼠標(biāo) ((track_box.angle>-deg4&&track_box.angle<-deg6)&&abs(ClickCount-{}//發(fā)鼠標(biāo) ((track_box.angle<-deg4||track_box.angle>deg4)&&abs(ClickCount-{}

m_curoper.SetWindowText("左鍵按下m_curoper.SetWindowText("無4、實驗與測鼠標(biāo)靈敏度設(shè)置:設(shè)置鼠標(biāo)靈敏度,兩個方向的數(shù)值越大,則鼠標(biāo)月靈敏是鼠標(biāo)在屏幕移動距離與實際目標(biāo)物體移動距離之比。A、開始程序:點擊“開始”按鈕釋放鼠標(biāo);進行重選目標(biāo)操作時也會自動釋放鼠標(biāo);F、重置參數(shù)/程序:點擊“重置參G、退出程序:連續(xù)兩次按下“ESC”鍵,或點擊“退Windows當(dāng)前運行程序焦點在本程序或者本程序彈出的視點擊“開始”按鈕,出現(xiàn)窗口,如下 形即可,隨即程序獲取目標(biāo)物體顏色并識別物體,識別出物體后打出標(biāo)識橢圓如下:Windows自帶游實驗具體內(nèi)容,請參照實驗Camshift算法是穩(wěn)健和精確的,本程5、總夠?qū)⑽矬w識別并實現(xiàn),算法執(zhí)行效率較高。A、Camshift算法實際上主要基于顏色模型,這就要求背景中不能有與目標(biāo)BHSV模型,就是為了消除實驗環(huán)境光線明暗的影響,但在某些情況

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論