c#在指纹图像中的角度检测

时间:2015-03-11 06:08:46

标签: c#

我有一个关于指纹分类的项目,用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;
    }

1 个答案:

答案 0 :(得分:0)

因为红色最多可以达到255,所以你的Ox方法可以返回值高达1,170,450,而Oy是相似的,这是你的意图吗? 存储为double的角度最多可包含16个有效数字,并且您正在尝试连接其中的26,600个,这需要一段时间!为了提高性能,我建议你将角度四舍五入,例如2个小数位,然后将它们附加到StringBuilder,在将它放入文本框之前,可以将其转换回字符串。做点什么 sb.Append(angleIMG[i, j].ToString("F2"))