LHT by accord

HoughLineTransformation lineTransform = new HoughLineTransformation();

// apply Hough line transofrm
lineTransform.ProcessImage(sourceImage);
Bitmap houghLineImage = lineTransform.ToBitmap();

// get lines using relative intensity
HoughLine[] lines = lineTransform.GetLinesByRelativeIntensity(0.5);

foreach (HoughLine line in lines)
{
    // get line's radius and theta values
    int    r = line.Radius;
    double t = line.Theta;

    // check if line is in lower part of the image
    if (r < 0)
    {
        t += 180;
        r = -r;
    }

    // convert degrees to radians
    t = (t / 180) * Math.PI;

    // get image centers (all coordinate are measured relative to center)
    int w2 = image.Width / 2;
    int h2 = image.Height / 2;

    double x0 = 0, x1 = 0, y0 = 0, y1 = 0;

    if (line.Theta != 0)
    {
        // non-vertical line
        x0 = -w2; // most left point
        x1 = w2;  // most right point

        // calculate corresponding y values
        y0 = (-Math.Cos(t) * x0 + r) / Math.Sin(t);
        y1 = (-Math.Cos(t) * x1 + r) / Math.Sin(t);
    }
    else
    {
        // vertical line
        x0 = line.Radius;
        x1 = line.Radius;

        y0 = h2;
        y1 = -h2;
    }

    // draw line on the image
    Drawing.Line(sourceData,
        new IntPoint((int)x0 + w2, h2 - (int)y0),
        new IntPoint((int)x1 + w2, h2 - (int)y1),
        Color.Red);
}

댓글

  1. Detected radius and theta values (color in corresponding colors):

    Theta = 90, R = 125, I = 249;
    Theta = 0, R = -170, I = 187 (converts to Theta = 180, R = 170);
    Theta = 90, R = -58, I = 163 (converts to Theta = 270, R = 58);
    Theta = 101, R = -101, I = 130 (converts to Theta = 281, R = 101);
    Theta = 0, R = 43, I = 112;
    Theta = 45, R = 127, I = 82.

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

Draw Circle on PictureBox when Button Click - Winform

2D FFT of Gray Image by AForge