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

im = zeros(501,400);
im(200:300,100:300) = ones(101,201);
%Sum the moments in a for loop for clarity
for v = 1:rows  
  for u = 1:cols
    val = im(v,u);
    %zeroth moment is just the total pixel count
    m00 = m00 + val;        
    %First moments. pixel value times position is the m10 and m01
    m01 = m01 + (val * v);
    m10 = m10 + (val * u);
   end
end
%centers of mass
uc = m10/m00;
vc = m01/m00;
%Now I find the second central moments wrt centroid 
for v = 1:rows  
  for u = 1:cols
    val = im(v,u);
    u02 = u02 + (v - vc)^2 * val;
    u20 = u20 + (u - uc)^2 * val;
  end
end
hold on;
plot(uc,vc, 'r+');
text(uc + 5,vc + 5,strcat('X:',num2str(uc)),'Color','green','FontSize',12);
text(uc + 5,vc + 20,strcat('Y:',num2str(vc)),'Color','green','FontSize',12);

enter image description here

Мое значение u02 составляет 17255850, квадратный корень из которого равен 4154. Есть ли способ напрямую получить приблизительный размер моего прямоугольника, используя дисперсию? Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: экспериментируя с подгонкой эллипса с использованием ковариационной матрицы и пытаясь вычислить размер с использованием дисперсии, как описано в комментариях, я получаю изображение ниже. Размеры желтого прямоугольника рассчитывались с помощью

  %can we estimate size based on standard deviation?
stdX = sqrt(u20/m00);
stdY = sqrt(u02/m00);
rectangle('Position',[uc-2*stdX vc-2*stdY 4*stdX 4*stdY],'EdgeColor','yellow');

enter image description here

1
mash 22 Фев 2021 в 05:01

1 ответ

Лучший ответ

После вычисления нормализованных центральных моментов второго порядка вы получите такую ​​матрицу:

| u20/m00  u11/m00 |
| u11/m00  u02/m00 |

Два собственных значения этой матрицы обеспечивают вращательно-инвариантную меру размеров объекта.

%Normalized second order central moment tensor
mu = [u02/m00, u11/m00; u11/m00, u20/m00];
%The eigenvalues relate to the size
[V,D] = eig(mu);
l1 = D(1,1);
l2 = D(2,2);
%The eigenvectors relate to the orientation
phi = atan2(V(1,2),V(1,1));

Зная собственные значения, мы можем определить радиусы эллипса с теми же нормализованными центральными моментами второго порядка:

a = 2*sqrt(l1);
b = 2*sqrt(l2);

Обратите внимание, что это верно только для сплошного эллипса.

Можно считать это эллипсом наилучшего соответствия для некоторого определения слова «наилучший».

Мы не можем определить размер произвольной формы для этих значений, но если мы знаем, что наша форма является прямоугольником, то мы можем определить его размеры, зная, что моменты инерции прямоугольника в 2D равны (см. Википедия, сравните моменты трехмерного кубоида ):

| 1/12 m h^2       0     |
|      0      1/12 m w^2 |

Где m - масса, которая в нашем случае равна 1, поскольку мы уже нормализовали моменты.

Таким образом,

w = sqrt(12*l1);
h = sqrt(12*l2);

Что дает нам w = 100.9950 и h = 200.9975 для случая в OP.

1
Cris Luengo 22 Фев 2021 в 16:28