機(jī)器視覺_實驗2_第1頁
機(jī)器視覺_實驗2_第2頁
機(jī)器視覺_實驗2_第3頁
機(jī)器視覺_實驗2_第4頁
機(jī)器視覺_實驗2_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗二多邊形邊長測量一、實驗?zāi)康? 掌握哈夫變換方法檢測直線的基本原理和步驟。2 . 復(fù)習(xí) VB/VC/Matlab的基本概念、基本語法和編程方法,并熟練使用VB/VC/Matlab編寫遺傳算法程序。二、實驗設(shè)備微機(jī)三、實驗原理距離測量基本步驟:1)對定位距離的兩條直線進(jìn)行識別和擬合。(關(guān)鍵步驟)2)得到直線方程后,根據(jù)數(shù)學(xué)方法計算兩線間的距離。兩種經(jīng)典的直線擬合(檢測)算法:最小二乘法、哈夫(霍夫 )變換法直線函數(shù):y=ax+b,a、b是待定常數(shù)。Hough 變換 Hough , 1962 是一種利用圖像全局特征將特定形狀的邊緣連接起來,形成連續(xù)平滑邊緣的一種方法。它通過將源圖像上的點映射到

2、用于累加的參數(shù)空間,實現(xiàn)對已知解析式曲線的識別。由于Hough 變換利用了圖像全局特性,所以受噪聲和邊界間斷的影響較小,比較魯棒( Robust)。Hough 變換常用來對圖像中的直線和圓進(jìn)行識別。點 - 線對偶性:圖像空間XY中共線的點,對應(yīng)在參數(shù)空間PQ 中相交的線。參數(shù)空間PQ中相交于一點的所有直線,在圖像空間XY里都有共線的點與之對應(yīng)。結(jié)論:在PQ平面上相交直線最多的點,對應(yīng)在XY平面上的直線就是解。假設(shè): 1)圖像上的直線是一個容器;2)直線上的點(圖像中的特定像素)是放在容器中的棋子。由于圖像上任一像素可以同時屬于多根直線, 即可看成每個棋子(像素) 可以同時放在多個容器中(直線)

3、 。Hough 變換的基本思想:依次檢查圖像上的每個棋子(特定像素)。對每個棋子,找到所有包含它的容器(直線) ,并為每個容器的計數(shù)器加 1。遍歷結(jié)束后,統(tǒng)計每個容器所包含的棋子數(shù)量。當(dāng)圖像上某個直線包含的特定像素足夠多時,就可以認(rèn)為直線存在。具體步驟:將 r量化,得到二維矩陣Mr;根據(jù)極坐標(biāo)表示法,r 是直線到原點的距離。設(shè)圖像的對角線長度為n,固定左上角為原點,則r的取值范圍為0, n 。10, 359 。此時, M 是一個 n 行 360 列的二維矩陣。矩陣中任一元素Mr 所存儲的值就是圖像中由參數(shù)(r,)決定的直線上所擁有的像素數(shù)。初始化時,矩陣M置為0。遍歷圖像,對像素(xi, yi

4、)(xi, yi) ,依次代入直線的極坐標(biāo)方程,計算 r 的值,根據(jù)當(dāng)前r加 1,即: Mr=Mr+1 。分析 Mr,如果 MrT ,就認(rèn)為存在一條有意義的線段,(r,)是該線段的擬合參數(shù)。T 是一個非負(fù)整數(shù),由圖像中景物的先驗知識決定,與圖像大小有關(guān)。由(r,) 和(xi,yi)共同確定圖像中的線段,并連接 斷裂部分。四、預(yù)習(xí)要求1 查閱資料,理解并掌握哈夫變換方法檢測直線的基本原理與步驟。2 復(fù)習(xí) VB/VC/Matlab的基本概念、基本語法和編程方法。五、實驗內(nèi)容及步驟1 . 上機(jī)編寫程序,以“六邊形.bmp ”為實驗對象,利用哈夫變換方法檢測出六邊形各邊邊長。程序代碼:#include

5、#include#include#include#include"stdafx.h""opencv2/highgui/highgui.hpp""opencv2/imgproc/imgproc.hpp"<iostream><stdio.h>usingnamespace cv;usingnamespace std;Mat src, edges;Mat src_gray;Mat standard_hough, probabilistic_hough;/ 標(biāo)準(zhǔn)霍夫變換,概率的霍夫變換intmin_threshold =

6、 10;/最小閾值為 10intmax_trackbar = 200;/最大的跟蹤條為 200char *standard_name = "Standard Hough Lines Demo" ;char *probabilistic_name ="Probabilistic Hough Lines Demo"ints_trackbar = max_trackbar;intp_trackbar = max_trackbar;voidhelp();voidStandard_Hough( int,void *);voidProbabilistic_Hough

7、(int , void *);intmain()src = imread(" 六邊形 .bmp" , 1);if(src.empty()help();return-1;cvtColor(src, src_gray,CV_RGB2GRAY);Canny(src_gray, edges, 50, 200, 3);namedWindow(standard_name, CV_WINDOW_AUTOSIZE);createTrackbar("Thresh" , standard_name, &s_trackbar, max_trackbar, Standa

8、rd_Hough);namedWindow(probabilistic_name,CV_WINDOW_AUTOSIZE);createTrackbar("Thresh" , probabilistic_name, &p_trackbar, max_trackbar, Probabilistic_Hough);/ 初始化Standard_Hough(0, 0);Probabilistic_Hough(0, 0);waitKey(0);return0;void help()printf(printf(printf("t Hough Transform to d

9、etect lines n");"t-n");"Usage:./HoughLines_Demo<image_name>n" );void Standard_Hough( int ,void *)vector <Vec2f>s_lines; cvtColor(edges, standard_hough,CV_GRAY2BGR);/ 用標(biāo)準(zhǔn)霍夫變換 HoughLines(edges, s_lines, 1,CV_PI / 180, min_threshold + s_trackbar, 0, 0);/ 顯示結(jié)果for ( i

10、nti = 0; i < s_lines.size(); i+)floatr = s_linesi0, t = s_linesi1;double cos_t = cos(t), sin_t = sin(t);double x0 = r*cos_t, y0 = r*sin_t;double alpha = 1000;Point pt1(cvRound(x0 + alpha*(-sin_t), cvRound(y0 + alpha*cos_t); Point pt2(cvRound(x0 - alpha*(-sin_t), cvRound(y0 - alpha*cos_t); line(st

11、andard_hough, pt1, pt2, Scalar (255, 0, 0), 1, CV_AA);imshow(standard_name, standard_hough);imwrite(" 六邊形 .bmp" , standard_hough);void Probabilistic_Hough( int ,void *)vector <Vec4i >p_lines; cvtColor(edges, probabilistic_hough,CV_GRAY2BGR);/ 用概率霍夫變換HoughLinesP(edges, p_lines, 1,CV_P

12、I / 180, min_threshold + p_trackbar, 30, 10);/ 顯示結(jié)果for ( size_ti = 0; i < p_lines.size(); i+)Vec4i l = p_linesi;line(probabilistic_hough,Point (l0, l1),Point (l2, l3),Scalar (255, 0, 0), 1,CV_AA);imshow(probabilistic_name, probabilistic_hough);imwrite(" 六邊形 .bmp" , probabilistic_hough);

13、2 . 利用實驗一的Harris 角點檢測程序,檢測“六邊形.bmp”中六邊形的各邊邊長。源程序:#include"stdafx.h"#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"#include"opencv2corecore.hpp"#include"opencv2legacylegacy.hpp"#include"opencv2nonfreenonfree.hpp"#i

14、nclude"opencv2highguihighgui.hpp"#include"opencv2calib3dcalib3d.hpp"#include<vector>#include<iostream>#include<stdio.h>usingnamespace cv;usingnamespace std;Mat src, src_gray, dst_norm_scaled, src_copy;intthresh = 0;intmax_thresh = 100;intmaxCorners = 0;intmaxTra

15、ckbar = 50;/ 最大的跟蹤條為50char *source_window = char *corners_window ="Source image" ;"Corners detected"/void cornerHarris_demo(int ,void *);/intmain()src= imread(" 六邊形 .bmp" , 1);cvtColor(src, src_gray,CV_BGR2GRAY);/ 建立一個窗口和跟蹤條namedWindow(source_window, CV_WINDOW_AUTOSIZE)

16、;createTrackbar("Harris", source_window, &thresh, max_thresh, cornerHarris_demo);createTrackbar("ShiTomasi" , source_window, &maxCorners, maxTrackbar, cornerHarris_demo);namedWindow(corners_window,CV_WINDOW_AUTOSIZE);namedWindow(source_window, CV_WINDOW_AUTOSIZE);cornerHa

17、rris_demo(0, 0);/waitKey(0);return (0);void cornerHarris_demo(int ,void *)src.copyTo(src_copy);Mat dst, dst_norm;dst=Mat:zeros(src.size(),CV_32FC1);/intblockSize= 2;intapertureSize= 3;double k= 0.04;/cornerHarris(src_gray, dst, blockSize, apertureSize, k,BORDER_DEFAULT);/normalize(dst, dst_norm, 0,

18、255, NORM_MINMAX, CV_32FC1, Mat(); convertScaleAbs(dst_norm, dst_norm_scaled);/for ( intj = 0; j < dst_norm.rows; j+)for ( inti = 0; i < dst_norm.cols; i+)if( int )dst_norm.at<float>(j, i)>thresh + 60)circle(dst_norm_scaled, Point (i, j), 6, Scalar (0), -1, 8, 0); circle(src_copy, Point (i, j), 5, Scalar (255, 0, 0), -1, 8, 0);if(maxCorners < 1)maxCorners = 1;/vector <Point2f > corners;double qualityLevel = 0.01;double minDistance = 10;bool useHarrisDetector=false ;/Mat cormat;/goodFeaturesToTrack(src

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論