關於hough圓弧檢測C 程式的問題

2021-08-14 10:22:33 字數 1572 閱讀 8621

需要用到乙個圓弧檢測的程式,苦於網上沒有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 進行解方程,不過這之前先進行對...