需要用到乙個圓弧檢測的程式,苦於網上沒有c++版的,自己根據matlab函式寫了乙個,自己感覺沒什麼問題,編譯也可以通過,但結果就是很奇怪,求各位大咖幫忙,新手,小白乙個。。。。
void hough_circle(iplimage *bw,double step_r,double step_angle,double r_min,double r_max,double p)
}}//ecount = size(rows);
/*% hough變換
% 將影象空間(x,y)對應到引數空間(a,b,r)
% a = x-r*cos(angle)
% b = y-r*sin(angle)*/
/*for i=1:ecount
for r=1:size_r
for k=1:size_angle
a = round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));
b = round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));
if(a>0&a<=m&b>0&b<=n)
hough_space(a,b,r) = hough_space(a,b,r)+1;
endend
endend*/
int a=0,b=0;
for(int i=0;i0)&(a<=m)&(b>0)&(b<=n))
hough_space[r*m*n+a*m+b]++;
}// 搜尋超過閾值的聚集點
/*max_para = max(max(max(hough_space)));
index = find(hough_space>=max_para*p);
length = size(index);
hough_circle=zeros(m,n);*/
int max_para=hough_space[0];
for(int i=1;i=hough_space[i]?max_para:hough_space[i];
}int thre=max_para*p;
int par1[len],par2[len],par3[len];
for (int j=0;j=thre)
int size_h=m*n;
int *hough_circle=new int [size_h];
for (int i=0;i(r_min+(par3-1)*step_r)^2-5)
hough_circle(rows(i),cols(i)) = 1;
endend
end*/
//par3是半徑,par1和par2是要檢測的圓的座標。
//index(k)在hough_space中的三維位置(par1,par2,par3)
for(int i=0;i(r_min+(par3[k]-1)*step_r)^2-5))
hough_circle[location[i].row*m+location[i].col] = 1;
//列印結果
cout<<"圓點座標 "<<"半徑 "<
基於HOUGH變換的矩形的檢測
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!基於hough 變換的矩形的檢測 在影象中查詢直線 圓 橢圓的方法很多,網上也有很多類似的源 但是介紹矩形 正方形,長方形 查詢的方法很少,本文介紹基於hough 變換的矩形的檢測。1 首先介紹以下直線的極座標方程。x cos y sin 轉換k ...
Hough變換直線檢測的MATLAB實現
1.hough變換是乙個非常重要的 檢測間斷點邊界形狀的方法,它通過將影象座標空間變換到引數空間,來實現直線和曲線的擬合。2.通過hough變換,在二值影象中檢測直線需要三個步驟 a 利用hough 函式執行hough變換,得到hough矩陣 b 利用houghpeaks 函式在hough矩陣中,尋...
關於求線段和線段,線段和圓弧,圓弧與圓弧的交點演算法
1 線段與線段求交點 已知線段的起點和終點,求交點,這個比較簡單,解2個二元一次方程可以求出。a 我這裡的演算法是判斷2條線段的定義域和值域是否有重合地方,有則進行下一步判斷,沒有這返回空,表示沒有交點。b 根據直線方程2點式y y1 y2 y1 x2 x1 x x1 進行解方程,不過這之前先進行對...