2009-10-07 12 views
6

В настоящее время я работаю над репликацией некоторых функций функции regionprops в Matlab в Octave. Тем не менее, у меня немного зависает подмножество функциональности. Свойства «Эксцентриситет», «MajorAxisLength», «MinorAxisLength» и «Ориентация» - это моя точка привязки. В документации все они происходят из «... эллипса, который имеет те же самые моменты, что и регион».Каковы второстепенные моменты региона?

Итак, мой вопрос: каковы эти моменты и как их найти?

Я смотрел на эту ссылку: http://en.wikipedia.org/wiki/Image_moments

Честно говоря, это просто оставил меня больше запутывается. Может ли кто-нибудь указать мне на что-то более дружелюбное для начинающих? Благодарю.

ответ

18

Под «вторыми моментами» документация означает второй central moment.

В случае одномерных данных это будет variance (или квадрат стандартного отклонения).

В вашем случае, когда у вас есть двумерные данные, вторым центральным моментом является covariance matrix.

Если X является п-на-2 матрицы точек в вашем регионе, вы можете вычислить матрицу ковариации Sigma в MATLAB, как это (непроверенные):

mu=mean(X,1); 
X_minus_mu=X-repmat(mu, size(X,1), 1); 
Sigma=(X_minus_mu'*X_minus_mu)/size(X,1); 

Теперь, что это имеет отношение к делать с эллипсами? Ну, то, что вы здесь делаете, это, по сути, подборка multivariate normal distribution для ваших данных. Ковариационная матрица определяет форму этого распределения, а контурные линии многомерного нормального распределения - ждут его - are ellipses!

Направления и длина осей эллипса определяются собственные векторы и собственные значения матрицы ковариации:

[V, D]=eig(Sigma); 

Столбцы V являются теперь собственные векторы (т.е. направления осей) и значения по диагонали D - собственные значения (т. е. длины осей). Таким образом, у вас уже есть «MajorAxisLength» и «MinorAxisLength». Ориентация, вероятно, всего лишь угол между главной осью и горизонталью (подсказка: используйте atan2, чтобы вычислить это из вектора, указывающего вдоль главной оси). Наконец, eccentricity является

sqrt(1-(b/a)^2) 

где длина главной оси и б длина малой оси.

+0

Спасибо. Это очень хорошо написано и похоже на то, что мне нужно. – BigBeagle

+1

+1 - Для этого нужны более элегантные объяснения ..... когда дело доходит до математики, по крайней мере. – Jacob

+1

Кстати, вы можете вычислить ковариацию в MATLAB непосредственно с 'cov', но ваш код был явно более поучительным. – Jacob

0

Не тот ответ, который вы ищете, но он может помочь кому-то.

Я написал эту книгу на эту тему механики и написал м-файлы для вычисления площади момента инерции:

Mastering Mechanics using MATLAB 5

код из него можно найти здесь:

File Exchange

Глава 9 должна представлять интерес. Я подозреваю, что вы можете использовать код в качестве отправной точки.

1

Я точно не уверен, но это не относится к statistical notion из moments (как в порождающей функции моментов):

центральные моменты (моменты о среднем):
    mu_k = E[(X − E[X])^k] ,     где Е ожидаемое значение

Таким образом, первые четыре момента соответственно: {1, дисперсия, асимметрия, эксцесс}.
Но опять-таки я могу ошибаться;)

Смежные вопросы