Domanda

Al momento sto lavorando su replicare alcune delle funzionalità della funzione regionprops di Matlab in Octave. Tuttavia, ho un po 'di un hangup su un sottoinsieme delle funzionalità. Il 'eccentricità', 'MajorAxisLength', 'MinorAxisLength' e le proprietà di 'orientamento' sono il mio punto di stallo. Nella documentazione, tutti derivano da "... l'ellisse che ha le stesse secondo più momenti come la regione".

Quindi la mia domanda è, che cosa sono queste seconde momenti, e come faccio a trovare loro?

stavo guardando questo link: http://en.wikipedia.org/wiki/Image_moments

Onestamente, è solo mi ha lasciato più confuso. Qualcuno mi può puntare verso qualcosa di un po 'più principiante amichevole? Grazie.

È stato utile?

Soluzione

Con "seconde momenti", la documentazione significa che il secondo momento centrale .

Nel caso di dati monodimensionali, questo sarebbe il varianza (o quadrata di la deviazione standard).

Nel tuo caso, in cui si dispone di dati bidimensionali, il secondo momento centrale è la matrice di covarianza .

Se X è una matrice n-by-2 dei punti nella vostra regione, è possibile calcolare la matrice di covarianza Sigma in MATLAB come questo (non testata):

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

Ora, cosa ha a che fare con puntini di sospensione? Beh, quello che stai facendo qui è, in effetti, il montaggio di una multivariata normale distribuzione per i dati . La matrice di covarianza determina la forma di tale distribuzione, e le linee di contorno di una distribuzione normale multivariata - attendere che - sono ellissi !

Le indicazioni e lunghezze degli assi dell'ellisse sono dati dai autovettori e autovalori della matrice di covarianza:

[V, D]=eig(Sigma);

Le colonne V ora sono gli autovettori (cioè le direzioni degli assi), ed i valori sulla diagonale D sono gli autovalori (cioè le lunghezze degli assi). Quindi hai già il 'MajorAxisLength' e 'MinorAxisLength'. L'orientamento è probabilmente solo l'angolo tra l'asse maggiore e l'orizzontale (suggerimento: utilizzare atan2 per calcolare questo dal puntamento vettore lungo l'asse maggiore). Infine, il eccentricità è

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

dove a è la lunghezza dell'asse maggiore e b è la lunghezza dell'asse minore.

Altri suggerimenti

Io non sono esattamente sicuro, ma non si riferisca alla statistiche nozione di (come in funzione generatrice):

  

momenti centrali (momenti intorno alla media):
   mu_k = E[(X − E[X])^k], dove E è il valore atteso

Così i primi quattro momenti sono rispettivamente: {1, varianza , asimmetria, curtosi}
. Ma ancora una volta Potrei sbagliarmi;)

Non è esattamente la risposta che cercate, ma potrebbe aiutare qualcuno.

Ho scritto questo libro sul tema della meccanica e scrissi m-file per calcolare il momento di inerzia zona:

Mastering Meccanica con MATLAB 5

Il codice da esso può essere trovato qui:

File Exchange

Capitolo 9 dovrebbe essere di interesse. Ho il sospetto che si potrebbe usare il codice come punto di partenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top