日期:2014-05-17 浏览次数:20841 次
private GraphDataset DesignTimeDatasetTestSine ( int cPoints ) { float fxMin = 0; float fxMax = (float) (Math.PI * 2); float fxInc = (fxMax - fxMin) / (float)(cPoints + 1); GraphDatastream gstrm = GraphDatastream.FromFunction( SineFunction, fxMin, fxMax, fxInc ); GraphDatasetXY<float,float> gds = new GraphDatasetXY < float,float >("Angle", "Sine",gstrm); return gds; } private void SineFunction ( float fx, out float fxOut, out float fyOut ) { fxOut = fx; fyOut = (float) Math.Sin( (double) fx ); }
------解决方案--------------------
这里API和源码例子
一个英文的,一个翻译的:
http://apicode.gicp.net/class.do?api=selectByfatherIndex&father=255
http://apicodecn.gicp.net/class.do?api=selectByfatherIndex&father=255
------解决方案--------------------
下面是我的一个优化过的Hough变换检测直线的函数(C++写的,在VC6.0中调试的)。希望对你检测圆有帮助。拟合方法的最大弱点在于野点对于拟合结果的影响巨大。
void HoughTransform_Line(BYTE *pImg,int width,int height,int step_theta,int &theta, double &dthro) //用(ρ,θ)空间实现直线霍夫变换,假设原点在图像左上角,x轴横向往右,y轴纵向往下。 //参数中的theta和dthro为检测得到的直线的(ρ,θ)值 { unsigned long *count; int theta1=-90,theta2=180; int numtheta=(theta2-theta1)/step_theta+1; int numthro=4*int(sqrt(width*width+height*height)+2); count=new unsigned long[numtheta*numthro]; memset(count,0,sizeof(unsigned long)*numtheta*numthro); int size=width*height; BYTE *pCur,*pEnd=pImg+size; int *x=new int[size]; int *y=new int[size]; memset(x,0,sizeof(int)*size); memset(y,0,sizeof(int)*size); int n=0,i=0,j=0; for(pCur=pImg;pCur<pEnd;) { if((*(pCur++))==255) { x[n]=j; y[n]=i; n++; } j++; if(j==width) { i++; j=0; } } int thro; for(theta = theta1; theta<theta2; theta+=step_theta) { for(i=0; i<n; i++) { thro = (x[i]*cosV[theta+90] + y[i]*sinV[theta+90]) >>9; // 相当于除以512 if(thro>=0) count[thro*numtheta+(theta+90)/step_theta]++; } } int num=numtheta*numthro; unsigned long max=0,index=0; for(i=0;i<num;i++) { if(count[i]>max) { max=count[i]; index=i; } } theta=(index%numtheta)*step_theta-90; dthro=(double)index/numtheta/4; delete count; delete x; delete y; return; }
------解决方案--------------------
拟合的原理很简单的,就是一个平方误差最小化的最优化问题,这个问题的解我想参考资料上应该可以查到了。楼主何不按照解的公式自己去实现一下呢?我想有公式的话,一个熟悉C#编程的人。可能10分钟不到就写好了。
------解决方案--------------------
没有,帮顶,希望楼主能早日解决问题
------解决方案--------------------
http://shwang112.blog.163.com/blog/static/447121012008102021445971/里有这个解的推导过程,具体的解析解。有了这些楼主不是可以实现了吗?
------解决方案--------------------