給定4幅有3種圓形藥片的影像,要求檢測出各個藥片的位置(圓心)與每幅影像上的總藥片數量。如果可以分辨出各類藥片,并檢測出各類藥片的數量,則更好。
用C語言



uj5u.com熱心網友回復:
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;
}
uj5u.com熱心網友回復:
不會讓我猜猜
第一種
找出差異區(像素對比) 比對原始圖
第二種
直接比對原始圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77465.html
標籤:C語言
上一篇:用下面的 scanf 函式輸入資料,使 a=10,b=12,c1='B',c2='b',x=2.6,y=-3.89,z=6.7,考慮在鍵盤上如何輸入資料?
