我有一个关于指纹分类的项目,用c#和一部分计算角度。 在这部分我的项目没有回答,挂起,没有任何行动。 计算角度首先计算sobelx和sobely滤波器,然后用arctan计算角度 请帮帮我
// calcute angle***************
public void computeAngle()
{
sobelx();
sobely();
angleIMG = new double[imgsx.Width, imgsx.Height];
try
{
for(int i=10 ; i<=200 ; i++)
{
for (int j = 10; j <= 150; j++)
{
if (Oy(i, j) != 0.0)
{
angleIMG[i, j] = Math.Atan(Ox(i, j) / Oy(i, j)) / 2 + Math.PI / 2;
textBox1.Text += Math.Abs(angleIMG[i, j]).ToString();
}
else
{
angleIMG[i, j] = 0.0;
}
}
textBox1.Text = "\n";
}
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}
//get Ox(i,j)****************
public double Ox(int i, int j)
{
double wx=0.0;
for (int u = i - 1; u <= i + 1; u++)
{
for (int v = i - 1; v <= i + 1; v++)
{
Color cw = imgsx.GetPixel(u, v);
Color cw1 = imgsy.GetPixel(u, v);
wx =wx+ 2*( cw.R * cw1.R);
}
}
return wx;
}
//get Oy(i,j)****************
public double Oy(int i, int j)
{
double wy = 0.0;
for (int u = i - 1; u <= i + 1; u++)
{
for (int v = i - 1; v <= i + 1; v++)
{
Color cw=imgsx.GetPixel(u, v);
Color cw1=imgsy.GetPixel(u, v);
wy =wy+ Math.Pow (cw.R,2 )- Math.Pow(cw1.R,2);
}
}
return wy;
}
答案 0 :(得分:0)
因为红色最多可以达到255,所以你的Ox方法可以返回值高达1,170,450,而Oy是相似的,这是你的意图吗?
存储为double的角度最多可包含16个有效数字,并且您正在尝试连接其中的26,600个,这需要一段时间!为了提高性能,我建议你将角度四舍五入,例如2个小数位,然后将它们附加到StringBuilder,在将它放入文本框之前,可以将其转换回字符串。做点什么
sb.Append(angleIMG[i, j].ToString("F2"))
。