Как рассчитать площади очень маленьких объектов, иногда 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 и примерка эллипса.
Задача ещё не решена.
Других решений пока нет …