freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于圖像處理的車道線識別算法研究(文件)

2025-07-10 02:46 上一頁面

下一頁面
 

【正文】 Hough變換橢圓檢測根據(jù)前面的分析,道路車道線經(jīng)過圖像采集設(shè)備采集后,其原本的圓將會變化為橢圓,所以我們更應(yīng)該關(guān)注橢圓的檢測。橢圓檢測的過程描述為:第一步:在目標(biāo)圖形上選取隨機(jī)的三個點(diǎn)分別記為、和,并求得他們各自的切線,分別記為、和他們兩兩間的中點(diǎn),分別記為、和(即為和的中點(diǎn));第二步:找到這三條切線兩兩相交的交點(diǎn),分別記為、和(即為和的交點(diǎn),以此類推);第三步:將對應(yīng)的交點(diǎn)與中點(diǎn)連接,即與、與、與,將得到的直線分別記為、和;第四步:求得這三條連線兩兩相交的交點(diǎn),根據(jù)一定的距離準(zhǔn)則,判斷這三點(diǎn)是否足夠接近,如果足夠接近,說明此時的形狀可能是一個橢圓,否則則說明不是;第五步:在目標(biāo)圖形上另選一點(diǎn),求其切線,并將其與其他三點(diǎn)中的一點(diǎn)重新配對,得到兩切線交點(diǎn)與中點(diǎn)的直線方程;第六步:根據(jù)同樣的距離準(zhǔn)則,判斷新得到的直線與其他直線的交點(diǎn)是否足夠接近,如果是,那么目標(biāo)圖形是一個橢圓,如果不是,則說明目標(biāo)圖形不是橢圓。相比傳統(tǒng)的識別算法,本論文中的算法經(jīng)過優(yōu)化處理,提高了識別的準(zhǔn)確性;算法的實(shí)時性好,特別是經(jīng)過對Hough變換等算法的一定的改進(jìn),大大減少了計(jì)算量,提高了計(jì)算速度;算法能檢測多種車道線,適應(yīng)范圍廣;算法結(jié)構(gòu)清晰,魯棒性好,方便擴(kuò)展和改進(jìn);當(dāng)然,在實(shí)際的應(yīng)用中也發(fā)現(xiàn)了一些問題,主要有:對于復(fù)雜路況和天氣條件欠佳時,算法的適應(yīng)性還不夠高;對于一些現(xiàn)實(shí)中存在的干擾因素如馬路沿等,不能進(jìn)行有效的排除。所以未來是光明的,但更需要我們腳踏實(shí)地,不斷取得新的突破。在算法的研究過程中,景老師給了我特別大的幫助,如算法的選擇、圖像的選取和相關(guān)的參考資料等,節(jié)省了我很多時間,也讓我的理論知識得到了極大的提高。最后,感謝我的朋友們,在我迷惑不解時和我討論問題幫我找到思路,謝謝他們的支持和幫助! 附錄1車道線識別程序源代碼,編譯要求:Linux 。CvSeq *contours。 int is_vertical。CvPoint *get_join(CvPoint *p1,Line l1,CvPoint *p2,Line l2)。int main(int argc,char *argv[]){//圖像的加載過程 if (argc != 2) { puts(Usage : ./mark filename)。 } src = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1)。 cvCopy(img,out,NULL)。//設(shè)置ROI cvSetImageROI(src,ROI)。//邊緣檢測 cvSetImageROI(temp,ROI)。 cvCopy(temp,src,0)。 cvSetImageROI(out,ROI)。 cvLine(out,endpoints[0],endpoints[1],RED,2,8,0)。 for (i = 0。 cvDrawContours(out,contours,BLUE,GREEN,LOW_THRESH,2,8,cvPoint(0,0))。 cvNamedWindow(OUT,0)。 return 0。 double sum_of_xy = ,sum_of_x = ,sum_of_y = ,sum_of_x2 = 。i++) { CvPoint *temp = (CvPoint *)cvGetSeqElem(seq,i)。 sum_of_x2 += (double)(tempx * tempx)。 resultis_vertical = 0。 else { = 。 } return result。 != 1) { if (fabs( / / ) = ) { px = ( * * ) / ( * * )。 } else if ( amp。 return p。 py = p2x * / () + / ()。 = ( + ) 1。 int pos1 = contourstotal 10。 CvPoint *p2 = (CvPoint *)cvGetSeqElem(contours,pos2)。 Line *tangent3 = get_tangent(contours,pos3)。 tangent2) join1_2 = get_join(p1,*tangent1,p2,*tangent2)。 if (tangent2 amp。 CvPoint cp1_3 = get_center(*p1,*p3)。 if (join1_3) join_center1_3 = get_line_func(*join1_3,cp1_3)。cp1_3,join_center1_3)。 CvPoint *last_join3 = get_join(amp。 if (last_join1 amp。 last_join3) CENTER = cvPoint((last_join1x+last_join2x+last_join3x) / 3,(last_join1y+last_join2y+last_join3y) / 3)。amp。amp。 = (int)(80 * tangent1a + p1y)。 = (int)(80 * tangent2a + p2y)。 = (int)(80 * tangent3a + p3y)。//在一定范圍內(nèi)得到一個隨機(jī)的點(diǎn) Line *tangent4 = get_tangent(contours,ran_pos)。 tangent4) join1_4 = get_join(p1,*tangent1,p4,*tangent4)。cp1_2,join_center1_2,amp。 return 0。}。 distance = fabs(sqrt(( ) * ( ) + ( ) * ( )))。 if (points_distance(*last_join1,CENTER) = MAXDISTANCE) return 1。 Line join_center1_4 = get_line_func(*join1_4,cp1_4)。 if (tangent1 amp。 int ran_pos = contourstotal rand() % 30。 CvPoint p_temp。 CvPoint p_temp。 CvPoint p_temp。amp。amp。 last_join2 amp。cp2_3,join_center2_3)。cp1_2,join_center1_2,amp。 CvPoint *last_join1 = get_join(amp。//得到相應(yīng)的三個中點(diǎn) Line join_center1_2,join_center1_3,join_center2_3。 tangent3) join2_3 = get_join(p2,*tangent2,p3,*tangent3)。amp。//三條切線的交點(diǎn) if (tangent1 amp。//得到三個點(diǎn) Line *tangent1 = get_tangent(contours,pos1)。 int pos3 = pos1 30。 return center。 } else return NULL。amp。 != 1) { px = p1x。 return p。 if ( != 1 amp。 = ( * + * )。}Line get_line_func(CvPoint p1,CvPoint p2){ Line result。 resultc = sum_of_y / SIZEOFTANGENTAREA resulta * sum_of_x / SIZEOFTANGENTAREA。 sum_of_x += (double)tempx。 for (i = n 4。 if (n = seqtotal || n 4) return (Line *)NULL。 cvShowImage(OUT,out)。 cvRectangle(out,cvPoint(0,(int)outheight / 3),cvPoint(outwidth,outheight),GREEN,2,8,0)。contours = contoursh_next,i++) { if (contourstotal = 50) continue。 sum_of_area=cvFindContours(src,storage,amp。i linestotal。//hough直線檢測 lines=cvHoughLines2(src,storage,CV_HOUGH_PROBABILISTIC,CV_PI / 180,5,10,5)。 cvResetImageROI(src)。 cvSmooth(src,src,CV_GAUSSIAN,5,5,0,0)。 cvCvtColor(img,out,CV_GRAY2RGB)。 out = cvCreateImage(cvGetSize(img),imgdepth,3)。 } if ((img = cvLoadImage(argv[1],CV_LOAD_IMAGE_UNCHANGED)) == NULL) { printf(can not load image %s.\n,argv[1])。double points_distance(CvPoint p1,CvPoint p2)。Line *get_tangent(CvSeq *seq,int n)。 float b。CvMemStorage *storage。我向景老師表達(dá)我最誠摯的感謝和致意!同時,也感謝Debian Linux和OpenCV社區(qū)給我提供的幫助,對于O
點(diǎn)擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1