Обнаружение внешнего круга с помощью преобразования Hough Circle - PullRequest
0 голосов
/ 02 мая 2018

Когда я применяю houghCircle к своему изображению, оно всегда обнаруживает внутренний круг, я трачу много времени на настройку параметров, но результат всегда одинаков.

Моя процедура - преобразовать изображение в HSV цветовое пространство, затем Threshold на красный цвет, чтобы получить binary изображение, затем применить houghCircle.

Мое изображение

Original

После кругооборота

After Hough

Код

Mat hsv = new Mat();
Imgproc.cvtColor(bgr, hsv, Imgproc.COLOR_BGR2HSV); //BGR to HSV

Mat mask1 = new Mat();
Mat mask2 = new Mat();

Core.inRange(hsv, new Scalar(0, 100, 100), new Scalar(10, 255, 255), mask1);
Core.inRange(hsv, new Scalar(160, 100, 100), new Scalar(179, 255, 255), mask2);

Mat hsvThres = new Mat();
Core.bitwise_or(mask1, mask2, hsvThres);
 //
Mat circles = new Mat();

int iCannyUpperThreshold = 1; //100
int iMinRadius = -1;   //20      //90
int iMaxRadius = -1;  //400 //150-1000
int iAccumulator = 1;//300

Imgproc.HoughCircles(hsvThres, circles, Imgproc.CV_HOUGH_GRADIENT, //2
         1.0, hsvThres.rows() , iCannyUpperThreshold, iAccumulator, iMinRadius, iMaxRadius);

if (circles.cols() > 0)
    for (int x = 0; x < circles.cols(); x++) 
        {
        double vCircle[] = circles.get(0,x);

        if (vCircle == null)
            break;

        Point pt = new Point(Math.round(vCircle[0]), Math.round(vCircle[1]));
        int radius = (int)Math.round(vCircle[2]);

        Core.circle(bgr, pt, radius, new Scalar(0,255,0), 4, 8, 0);
       }

Примечание 1) Когда я изменил minRadius на 90, он обнаружил внешнюю, а не внутреннюю, но я хочу что-то универсальное, что будет работать для изображений / знаков не только для этого тестового изображения.

2) Если я преобразовал Исходное изображение в Grey пространство вместо HSV, оно обнаруживает внешнее, а не внутреннее, но также это не мой случай, так как я должен преобразовать свое изображение в HSV делать Thresholding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...