?? hole.txt
字號:
1、先求出邊緣 ,然后擬合迭代。所有的邊緣上的點形成一個集合。以邊緣上的每一個點作圓心,r為半徑(可根據圖像選取一個范圍: 如從10—30),a為角度(從0到360度),畫圓。各個圓相交最多的點為圓心。這種算法有很強的抗干擾性。
2、可以分割出這些圓后,分別進行著色(給每個圓不同的顏色值),然后利用其顏色值去計算其圓心坐標!
3、hough檢測圓
根據園的方程(x-a)×(x-a)+(y-b)×(y-b)=R×R,將參數空間增加到a,b,R三維空間.
常用的hough變換計算量太大,然而隨機hough變換雖然計算量相對小點,但是準確率沒有前者高.現在使用
一種改進的方法:提取邊緣圖像,然后邊緣跟蹤,在邊緣曲線上進行hough變換檢測圓.
double x=0.0,y=0.0,x0=0.0,y0=0.0,cc=0.0,ss=0.0,temp1,temp2;
int aa=0,bb=0,rr=0,saveaa=0,savebb=0,saverr=0,savexx0=0,saveyy0=0,saveQ=0;
int pos = ptNumber/3;
int i = 0,off = 0,k = 0,iBaseFlag = 100,jj = 0;
int tt = 0,m=0,n=0;
int firstBase = 5;
int secendBase = (2*firstBase+1);
int aaBase = (R.right+R.left)/2 - firstBase,bbBase = (R.bottom+R.top)/2 -firstBase;
LONG minrr = 0;
minrr = (R.right - R.left)>(R.bottom - R.top)?(R.bottom - R.top):(R.right - R.left);
int memsize = (int)(minrr+2*firstBase) * secendBase *secendBase;
BYTE * lpabr = new BYTE[memsize];
memset(lpabr,0,sizeof(BYTE)*memsize);
int maxcount = -1;
/* 局部hough變換檢測圓曲線段的一部分*/
for(k=0;k <ptNumber;k+=pos)
{
for(aa=(int)(R.left+R.right)/2 - firstBase;aa <=(int)(R.left+R.right)/2 + firstBase;aa++)
{
if(aa <0)
continue;
if(aa>ImageWidth)
break;
for(bb=(int)(R.top+R.bottom)/2 -firstBase;bb <=(int)(R.top+R.bottom)/2 + firstBase;bb++)
{
if(bb <0)
continue;
if(bb>ImageHeight)
break;
temp1 = (pt[k].x-aa)*(pt[k].x-aa) + (pt[k].y-bb)*(pt[k].y-bb);
rr = (int)sqrt(temp1);
if(rr>=10&&rr <=(int)(minrr/2) + firstBase)
lpabr[rr*secendBase*secendBase+(aa-aaBase)*secendBase+(bb-bbBase)]++;
}
}
}
for(rr=10;rr <=(int)(minrr/2) + firstBase;rr++)
for(aa=(int)(R.left+R.right)/2 - firstBase;aa <=(int)(R.left+R.right)/2 + firstBase;aa++)
{
if(aa <0)
continue;
if(aa>ImageWidth)
break;
for(bb=(int)(R.top+R.bottom)/2 - firstBase;bb <=(int)(R.top+R.bottom)/2 + firstBase;bb++)
{
if(bb <0)
continue;
if(bb>ImageHeight)
break;
if(maxcount <lpabr[rr*secendBase*secendBase+(aa-aaBase)*secendBase+(bb-bbBase)])
{
maxcount = lpabr[rr*secendBase*secendBase+(aa-aaBase)*secendBase+(bb-bbBase)];
saverr = rr;
saveaa = aa;
savebb = bb;
}
}
}
if(maxcount>=4)
{
//記錄保存中心,半經
saverr = rr;
saveaa = aa;
savebb = bb;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -