




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Hough變換檢測直線Hough變換檢測直線的理論Hough變換在計算機識別中,常常需要從圖像上尋找特定形狀的圖形,如果直接利用圖像點陣進行搜索判斷顯然難以實現(xiàn),這時就需要將圖像像素按一定的算法映射到參數(shù)空間。Hough變換提供了一種將圖像像素信息按坐標映射到參數(shù)空間的方法,通過它構建的參數(shù)空間可以容易地對特定形狀進行判斷。Hough變換是一種利用圖像的全局特征將特定形狀的邊緣像素連接起來,形成連續(xù)平滑邊緣的一種方法。它通過將源圖像上的點映射到用于累加的參數(shù)空間,實現(xiàn)對已知解析式曲線的識別。Hough變換常用于對圖像中的直線和圓進行識別。1.2直線的Hough變換直線的解析式有多種形式,由于用斜率描述的直線存在斜率無窮大的特殊情況,這里選用直線的極坐標描述:p=xcos(0)+ysin(0)式中p為直線到原點的距離,0為限定了直線的斜率。對于任意一組確定的(p,0),上式都可以唯一確定一條直線。開辟二維參數(shù)空間H(p,0),對p,0整數(shù)化,則對于任意有限平面區(qū)域,參數(shù)空間H可以表示為有限個點的集合。而H(p,0)中任意點都一一對應原平面區(qū)域上的一條直線。將上述結論推廣到任意平面圖像上可知,圖像上任意直線區(qū)域都可以一一對應參數(shù)空間H(p,0)中一個點,而圖像上的任意像素都同時存在于很多直線區(qū)域之上??梢詫D像上的直線區(qū)域想象為容器,把特定像素想象成放在容器中的棋子,只不過在這里,每個棋子都可以同時存在于多個容器中。那么Hough變換可以理解為依次檢查圖像上的每個棋子(特定像素),對于每個棋子,找到所有包含它的容器(平面上的直線區(qū)域),并為每個容器的計數(shù)器加1,這們就可以統(tǒng)計出每個容器所包含的棋子數(shù)量。當圖像中某個直線區(qū)域包含的特定像素足夠多(大于設定的閾值K)時,就可以認為直線區(qū)域表示的直線存在。用二維向量(p,0)描述圖像上的每一條直線區(qū)域,則可將圖像上的直線區(qū)域計數(shù)器映射到參數(shù)空間H(p,0)中的存儲單元。由于p為直線區(qū)域到原點的距離,因此對于對角線長度為n的圖像,固定左上角為原點,可得到p的取值范圍為[0,n],令0以1度為增量,可得到0的取值范圍為[0,360]。定義二維數(shù)組HoughBuf[n][360]作為存儲單元,其中對于任意(p,0)決定的直線區(qū)域,計數(shù)器為HoughBuf[p][0]。對于直線的Hough變換過程可以簡單描述為,依次遍歷圖像的所有像素,對于每個像素判斷是否滿足特定的條件,若滿足則對經(jīng)過該像素的所有直線區(qū)域的計數(shù)器加1,否則繼續(xù)判斷下一個像素。為了得到經(jīng)過某個像素的所有直線區(qū)域,可以依次用0的所有可能取值,借助此像素的坐標和直線的極坐標方程計算p,而每一組(p,0)就對應了一條經(jīng)過此像素的直線區(qū)域。為了避免在Hough變換中多次重復計算三角函數(shù)值,可以采用查表的方法提高效率。在進行變換之前,首先對0到359度范圍內(nèi)所有整數(shù)角度的三角函數(shù)值進行計算,將計算結果按下標保存在線性數(shù)組中,使用時只需按照下標從數(shù)值中取值即可。此方法可用如下代碼來實現(xiàn):doublesinvalue[360];doublecosvalue[360];for(inti=0;i<360;i++){sinvalue[i]=sin(i*3.1415926/180);cosvalue[i]=cos(i*3.1415926/180);Hough變換的主要流程可用以下代碼來實現(xiàn):for(y=0;y<h;y++)for(x=0;x<w;x++){//對的所有取值進行計算for(i=0;i<360;i++){if(pixel[y*w+x]>k)//若像素灰度大于閾值{tp=(int)(x*sinvalue[i]+y*cosvalue[i]);if(tp<0)continue;//計數(shù)器累加houghBuf[tp][i]+=1;}}}w=360;//將寬度設定為Hough變換圖像的寬度h=p;//將高度設定為Hough變換圖像的高度若將Hough變換得到的各直線區(qū)域的計數(shù)器的值看作圖像的灰度,把用于存儲的二維數(shù)組看做像素矩陣,則可得到Hough變換的圖像,圖中灰度較高的點標示出特定像素較集中的直線區(qū)域。Hough變換圖像按照(p,0)坐標系分布,水平方向為8軸,垂直方向為p軸,每個(p,0)坐標點對應源圖像的一條直線區(qū)域,對于同一行的坐標點對應的直線區(qū)域與原點具有相同的距離,處于同一列的坐標點對應的直線區(qū)域相互平行。同時,源圖像中直線越長越規(guī)則,Hough變換圖像上對應的點灰度就越高,源圖像中直線線寬越寬,Hough變換圖像上對應的點直徑就越大。源圖像中有幾條直線,在此Hough變換圖像中就有幾個亮點,根據(jù)每個亮點中心所在的坐標,就很容易得到原直線的解析式。OpencvOpencv簡介OpenCV是Intel開源計算機視覺庫。它由一系列C函數(shù)和少量C++類構成,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法oOpenCV擁有包括300多個C函數(shù)的跨平臺的中、高層API。它不依賴于其它的外部庫一盡管也可以使用某些外部庫。OpenCV對非商業(yè)應用和商業(yè)應用都是免費(FREE)的。OpenCV為IntelIntegratedPerformancePrimitives(IPP)提供了透明接口。這意味著如果有為特定處理器優(yōu)化的的IPP庫,OpenCV將在運行時自動加載這些庫。OpenCV由四大模塊組成。CV(開發(fā)庫的核心函數(shù)),主要專注于圖像處理及計算機視覺方面的功能;CVAUX(開發(fā)庫的輔助函數(shù)),是cv函數(shù)中的一些輔助及擴展;CVCORE(開發(fā)庫的核心結構及核心函數(shù)),定義了系統(tǒng)庫中數(shù)據(jù)結構,如IplImage圖像結構、CvMat等矩陣結構,并提供了一些對結構進行操作的函數(shù),如初始化、拷貝、映射變換、線性代數(shù)、數(shù)學邏輯操作等。這些是cv圖像開發(fā)函數(shù)的的一些基礎性操作;同時還定義了一些container,用于存儲各種類型的數(shù)據(jù),如CvSeq結構,采用自己的存儲組織方式,如由CvMemStorage、CvMemBlock、CvSeq、CvSeqBlock及CvSet還有些輔助性的結構,這些結構可組成復雜的存儲體系,使資源利用的更高效及方便;Highgui(gui開發(fā)庫),便利在console下開發(fā)窗口程序;提供了一定的事件處理機制,但界面簡單還可??傊?,OpenCV是一個很優(yōu)秀的圖像處理、計算機視覺的處理庫,一般可把其看作一個開發(fā)庫,與其他的高級開發(fā)環(huán)境結合,可開發(fā)出優(yōu)美界面的應用。使用Opencv進行直線檢測對圖像進行直線檢測之前,先得進行邊緣檢測,這里用Canny算法做邊緣檢測。Opencv提供的Canny邊緣檢測函數(shù):voidcvCanny(constCvArr*image,CvArr*edges,doublethreshold1,doublethreshold2,intaperture_size=3);各參數(shù)分別表示:image輸入圖像,edges輸出的邊緣圖像,threshold】第一個閾值,threshold2第二個閾值,aperture_sizeSobel算子內(nèi)核大小。函數(shù)cvCanny采用CANNY算法發(fā)現(xiàn)輸入圖像的邊緣而且在輸出圖像中標識這些邊緣。threshold1和threshold2當中的小閾值用來控制邊緣連接,大的閾值用來控制強邊緣的初始分割。得到邊緣圖像后,對其進行Hough變換以檢測直線。Opencv提供的cvHoughLines2函數(shù):CvSeq*cvHoughLines2(CvArr*image,void*line_storage,intmethod,doublerho,doubletheta,intthreshold,doubleparam1=0,doubleparam2=0);各參數(shù)分別表示:輸入8-比特、單通道(二值)圖像,檢測到的線段存儲倉,變換變量,與象素相關單位的距離精度,弧度測量的角度精度,閾值參數(shù)。VC開發(fā)的程序?qū)崿F(xiàn)的功能使用MicrosoftVisualStudio2005創(chuàng)建一基于對話框的MFC框架程序?qū)D像實現(xiàn)檢測直線的功能。在對話框上放置一按紐,用于在磁盤中打開一灰度圖像,再在對話框上增加一編輯框,供用戶修改Hough變換時的閾值參數(shù),之后再放置一個按紐,對打開的源灰度圖像進行Cann邊緣檢測得到邊緣圖像,再進行Hough變換,并在邊緣圖像用藍色標記出檢測到的直線,最后在對話框上放置一按紐來保存變換后的圖像。程序主要代碼響應"打開源圖"按紐的代碼:voidCHoughDlg::OnBnClickedOpenClicked(){//TODO:在此添加控件通知處理程序代碼CStringfileName;CFileDialogOpenDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_EXPLORER,L"圖像文件格式(*.bmp)|*.bmp|jPGfileformat(*.jpg)|*.jpg|",NULL);if(OpenDlg.DoModal()!=IDOK)return;fileName=OpenDlg.GetPathName();//將CString轉(zhuǎn)換為constchar*std::stringtempName=(LPCSTR)CStringA(fileName);constchar*tmp=tempName.c_str();if(0==(src=cvLoadImage(tmp,CV_LOAD_IMAGE_ANYCOLOR)))return;cvNamedWindow("源圖",1);cvShowImage("源圖",src);}響應"Hough變換〃按紐的代碼:voidCHoughDlg::OnBnClickedHoughClicked(){//TODO:在此添加控件通知處理程序代碼intthreshold=GetDlgItemInt(IDC_EDIT1);dst=cvCreateImage(cvGetSize(src),8,1);color_dst=cvCreateImage(cvGetSize(src),8,3);cvCanny(src,dst,50,200,3);cvCvtColor(dst,color_dst,CV_GRAY2BGR);lines=cvHoughLines2(dst,storage,CV_HOUGH_PROBABILISTIC,1,CV_PI/180,threshold,50,10);for(i=0;i<lines->total;i++){CvPoint*line=(CvPoint*)cvGetSeqElem(lines,i);cvLine(color_dst,line[0],line[1],CV_RGB(0,0,255),3,CV_AA,0);}cvNamedWindow("Hough",1);cvShowImage("Hough",color_dst);cvWaitKey(0);}響應"保存"按紐的代碼:voidCHoughDlg::OnBnClickedSaveClicked(){//TODO:在此添加控件通知處理程序代碼CFileDialogSaveDlg(FALSE,L"bmp",L"未命名",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,L"圖像文件格式(*.bmp)|*.bmp|jPGfileformat(*.jpg)|*.jpg|",NULL);if(SaveDlg.Do
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國火鍋底料市場發(fā)展現(xiàn)狀及前景趨勢分析報告
- 2025-2030年中國汽車打蠟機市場競爭格局及投資戰(zhàn)略研究報告
- 2025-2030年中國氣泡水行業(yè)運行動態(tài)及前景趨勢預測報告
- 2025-2030年中國橡膠填充油行業(yè)風險評估規(guī)劃研究報告
- 2025-2030年中國柑橘油香料行業(yè)運行動態(tài)與發(fā)展戰(zhàn)略分析報告
- 電影衍生品的開發(fā)與市場營銷技巧
- 2025-2030年中國工程塑料產(chǎn)業(yè)運行態(tài)勢及投資戰(zhàn)略研究報告
- 2025-2030年中國醫(yī)用紡織品行業(yè)運行現(xiàn)狀及發(fā)展前景分析報告
- 2025-2030年中國健身俱樂部行業(yè)發(fā)展前景與投資戰(zhàn)略研究報告
- 2025-2030年中國GRC材料行業(yè)運營狀況及發(fā)展趨勢分析報告
- 披薩制作流程
- 廈門2025年福建廈門市公安文職人員服務中心招聘17人筆試歷年參考題庫附帶答案詳解
- 2025年高三歷史教學工作計劃
- 《職業(yè)性肌肉骨骼疾患的工效學預防指南 》
- 不同產(chǎn)地筠連紅茶風味化學成分差異分析
- DB50 577-2015 汽車整車制造表面涂裝大氣污染物排放標準
- 生態(tài)安全課件
- 大學英語(西安歐亞學院)知到智慧樹章節(jié)測試課后答案2024年秋西安歐亞學院
- 人教版高中英語挖掘文本深度學習-選修四-UNIT-2-(答案版)
- 【化學】高中化學手寫筆記
- 膽管惡性腫瘤護理查房課件
評論
0/150
提交評論