2013-06-25 4 views
1

Je souhaite classer les images en deux classes en fonction de leurs formes. Pour cela, j'ai utilisé des descripteurs de Fourier avec SVM classifer. Mon problème est que la longueur du descripteur de Fourier dépend du nombre de points limites, donc la longueur des descripteurs de différentes images est différente. Mais pour la formation SVM j'ai besoin de la matrice de formation avec des descripteurs comme des lignes de matrice (cv :: Mat). Je l'implémente en C++ en utilisant openCV. Que dois-je faire? dois-je:
1.pad les descripteurs restants à la longueur du descripteur le plus long avec des zéros
2.sample seulement nombre fixe de points de frontièreDescripteurs de Fourier avec implémentation SVM pour la reconnaissance de classe d'objet basée sur la forme

me suggérer Sinon la bonne voie.

+0

pourriez-vous partager quelle méthode vous avez utilisée pour échantillonner un nombre fixe de points et comment cela a bien fonctionné? Par exemple, comment avez-vous choisi les points à conserver? – Kittenmittons

Répondre

3

La meilleure approche dans ce cas consiste à échantillonner un nombre fixe de points à partir de la limite, afin que vos vecteurs d'entrée soient de longueur égale. Le rembourrage est une mauvaise idée parce que, ce faisant, vous modifiez implicitement la définition de la distance entre les points matelassés et les points non rembourrés.

+0

Merci Marc.J'ai encore un doute.Après l'application de dft sur les points de frontière (x + jy x-réel y-imaginaire (x, y) -coordonnées de frontière) ce que je suis est un double canal Mat qui est Mat représentant des valeurs complexes. SVM ne prend qu'une matrice à virgule flottante à canal unique comme données d'apprentissage. Devrais-je prendre l'ampleur du nombre complexe comme descripteur de valeur réelle à canal unique ou copier la partie imaginaire des descripteurs ie2ème canal dans le premier doubler la longueur de colonne de l'original tapis et réduire 1 canal ou quoi d'autre que je dois faire? – user2442331

+0

"L'invariant de rotation des FD est obtenu en ignorant les informations de phase et en ne prenant que les valeurs d'amplitude des FD." - comme écrit dans un document de recherche. Cela implique-t-il que j'ai juste besoin de prendre l'ampleur des valeurs de descripteurs de nombres complexes que j'ai, ce qui résoudra également mon problème de conversion de 2 canaux cv :: Mat en canal unique pour la formation de SVM. – user2442331

+0

@ user2442331 Je ne connais pas les détails de votre problème, mais j'imagine qu'ignorer la partie complexe de vos données est une mauvaise idée. Vous pourriez en effet utiliser deux entrées pour chaque nombre complexe comme vous le suggérez, ou peut-être opter pour la phase de magnitude + (2 entrées par nombre complexe aussi). En ce qui concerne le document de recherche: tout dépend de ses hypothèses et de ses applications. Il est probablement préférable d'essayer les deux approches et de voir ce qui fonctionne le mieux pour vous. –

Questions connexes