2016-10-31 2 views
2

Quelqu'un at-il l'expérience de la définition d'une fonction d'entrée comme critère de seuil pour la fonction qtdecomp dans MATLAB? J'ai essayé ce qui suit, mais cela n'a pas fonctionné:Décomposition de quadtree dans MATLAB: entrée de fonction qtdecomp

MyFunc = @(A,threshold) std2(A)>threshold; 
S = qtdecomp(Image,MyFunc,threshold); 

D'une certaine façon, pour certaines valeurs de seuil, seul le quart de la gauche quadtree est divisé en de nouvelles pièces. Est-ce que cela pourrait être une erreur dans le code qtdecomp ou est-ce qu'il y a un problème avec ma fonction?

Voir l'image ci-jointe pour plus de détails. Je reçois ce quel que soit le seuil que je choisis:

enter image description here

+0

Nous aurions vraiment besoin de voir un exemple d'image. Cela pourrait être un comportement attendu pour certaines images. Avez-vous essayé 'qtdecomp' sans la fonction personnalisée? – beaker

Répondre

2

Le problème est que l'image est transmise à votre fonction anonyme comme un tableau m x m x k représentant l'image décomposée en blocs k. La fonction doit retourner un vecteur de longueur k, mais std2 ne regarde que le premier bloc et retourne un scalaire. Je suis encore en train de trouver une approche vectorisé à cela, mais pour l'instant est ici une simple boucle dans une fonction autonome:

function v = Std2Func(A, threshold) 
    s = size(A,3); 
    v = zeros(1,s); 

    for k = 1:s 
     v(k) = std2(A(:,:,k))>threshold; 
    end 
end 

Ce itère à travers les k plans du tableau d'entrée, en appliquant std2 à chaque 2d plan et en mettant les résultats dans le vecteur de sortie. Ensuite, vous appelez simplement qtdecomp en utilisant un handle à la nouvelle fonction:

S = qtdecomp(Image,@Std2Func,threshold);