Контур функции, как я могу получить площадь и центр тяжести различных объектов

Я использую функцию контура с бинарным изображением. У меня проблема, как я могу получить площадь и центр тяжести другой поверхности на изображении, мне нужна эта задача для классификации объектов.


person nizar sassi    schedule 25.10.2015    source источник
comment
как насчет кода, чтобы проиллюстрировать, что вы имеете в виду?   -  person Benoit_11    schedule 26.10.2015


Ответы (1)


Вам необходимо использовать выходные данные Contour Matrix.

Вот пример:

function data = ContourInfo(C)

data = [];

if isempty(C)
    return
end

k = 1;
j = 1;
while j < size(C,2);
    data(k).numxy = C(2,j);
    data(k).x = C(1,j+1:j+data(k).numxy);
    data(k).y = C(2,j+1:j+data(k).numxy);
    data(k).level = C(1,j);

    [data(k).centroid(1) data(k).centroid(2) data(k).area] = ... 
          polycentroid(data(k).x, data(k).y);
    data(k).area = polyarea(data(k).x, data(k).y);
    data(k).centroid = polycentroid(data(k).x, data(k).y);

    j = j + data(k).numxy + 1;
    k = k+1;
end

function [x0,y0,a] = polycentroid(x,y)

[m1,n1] = size(x); [m2,n2] = size(y);
n = max(m1,n1);
x = x(:); y = y(:);
x2 = [x(2:n);x(1)];
y2 = [y(2:n);y(1)];
a = 1/2*sum (x.*y2-x2.*y);
x0 = 1/6*sum((x.*y2-x2.*y).*(x+x2))/a;
y0 = 1/6*sum((x.*y2-x2.*y).*(y+y2))/a;

Звоните следующим образом:

Z = peaks(20);
[C, h] = contourf(Z,10);
contourData = ContourInfo(C)

disp('Area of contour 1:');
disp(contourData(1).area
disp('Centroid of contour 1:');
disp(contourData(1).centroid);
person gregswiss    schedule 26.10.2015