Использование Opencv и C++ для поиска областей очень маленьких объектов, возможно, самопересекающихся

Как рассчитать площади очень маленьких объектов, иногда 2 пикселя в области? Регион MATLAB regionprops(), кажется, делает это хорошо, и будет возвращать значения даже 1 для точки. Я много читал по этому вопросу, и все, кажется, предостерегают от самопересекающихся контуров, но не предлагают альтернативы этому. Вот пример моего кода:

void cMcDetect::shapeFeats(vector<Point> contours, const cv::Mat &img)
{
    // % Area, Compactness, Orientation, Eccentricity, Solidity
    double A, C, O=NAN, E, S;
    vector<Point> ch; convexHull(contours, ch);
    Moments mu = moments(contours,0);
    double CHA = contourArea(ch);
    A=contourArea(contours);  // Object Area
    S = A/CHA; // Solidity
    E = (mu.m20+mu.m02 + sqrt( pow(mu.m20-mu.m02,2)+4*pow(mu.m11,2) ))/ // Eccentricity
                (mu.m20+mu.m02 - sqrt( pow(mu.m20-mu.m02,2)+4*pow(mu.m11,2) ));

    Rect boundrect = boundingRect(contours); // Compactness
    C = A/(boundrect.width*boundrect.height);

    if(contours.size()>=5){
        RotatedRect rotrect = fitEllipse(contours); // Orientation
        O = rotrect.angle;
    }
    printf("%f %f %f %f %f\n",A, C, O, E, S);

}

Я получаю очень странные значения области, такие как 0, 1,5 для областей объекта. Я не ожидаю десятичных областей, так как ожидаю, что функция вернет необработанную сумму пикселей, так что точка будет иметь площадь 1. Какие-либо события, касающиеся этой проблемы? Это также, кажется, влияет на другие производные значения, такие как эксцентриситет. Я предполагаю, что я могу суммировать вопрос следующим образом: как я могу получить необработанный подсчет пикселей для связанных компонентов и заставить Opencv использовать это для правильного вычисления моментов Ху и других производных значений там, где требуется площадь? Если это невозможно, можете ли вы предложить какие-то корректировки дизайна / подхода, чтобы обойти проблему? Мне бы хотелось, чтобы opencv сделал это, чтобы я мог воспользоваться другими его функциями, такими как моменты hu и примерка эллипса.

0 ответов

Другие вопросы по тегам