Ellipse Detection using Hough Transform

前端 未结 4 1672
南笙
南笙 2020-12-06 06:49

using Hough Transform, how can I detect and get coordinates of (x0,y0) and \"a\" and \"b\" of an ellipse in 2D space?

This is ellipse01.bmp:

4条回答
  •  孤街浪徒
    2020-12-06 07:43

    If you know the 'a' and 'b' of an ellipse then you can rescale the image by factor of a/b in one direction and look for circle. I am still thinking about what to do when a and b are unknown.

    If you know that it is circle then use Hough transform for circles. Here is a sample code:

    int accomulatorResolution  = 1;  // for each pixel
        int minDistBetweenCircles  = 10; // In pixels
        int cannyThresh            = 20;
        int accomulatorThresh      = 5*_accT+1;
        int minCircleRadius        = 0;
        int maxCircleRadius        = _maxR*10;
        cvClearMemStorage(storage);
        circles = cvHoughCircles( gryImage, storage,
                                  CV_HOUGH_GRADIENT, accomulatorResolution, 
                                  minDistBetweenCircles,
                                  cannyThresh , accomulatorThresh,
                                  minCircleRadius,maxCircleRadius );    
        // Draw circles
        for (int i = 0; i < circles->total; i++){
            float* p = (float*)cvGetSeqElem(circles,i);
            // Draw center
            cvCircle(dstImage, cvPoint(cvRound(p[0]),cvRound(p[1])),
                               1, CV_RGB(0,255,0), -1, 8, 0 );
            // Draw circle
            cvCircle(dstImage, cvPoint(cvRound(p[0]),cvRound(p[1])),
                               cvRound(p[2]),CV_RGB(255,0,0), 1, 8, 0 );
        }    
    

提交回复
热议问题