1


0

Vous ne savez pas comment fonctionne la fonction hist dans MATLAB

Je ne sais pas très bien comment fonctionne la fonction hist dans MATLAB. Je semble avoir peu de problèmes avec ça.

Fondamentalement, dans le code ci-dessous, j’essaie d’exécuter le code LBP (Invariant Uniform Local Binary Pattern). Je n’ai aucun problème avec le code LBP mais le problème est avec la fonction hist (indiquée dans le code ci-dessous).

Le problème est que la plage que je devrais obtenir est de 0: 9 mais lorsque j’applique la fonction d’histogramme, j’obtiens des valeurs supérieures à 9 telles que 35, 27 et même des valeurs telles que 178114.Pas très sûr de savoir comment le corriger.

I2 = imread('test.png');
RIUniformHist=[];
m=size(I2,1);
n=size(I2,2);
for i=1:10:m
    for j=1:10:n
        for k=i+1:i+8
           for l=j+1:j+8
             J0=I2(k,l);
             I3(k-1,l-1)=I2(k-1,l-1)>J0;
             I3(k-1,l)=I2(k-1,l)>J0;
             I3(k-1,l+1)=I2(k-1,l+1)>J0;
             I3(k,l+1)=I2(k,l+1)>J0;
             I3(k+1,l+1)=I2(k+1,l+1)>J0;
             I3(k+1,l)=I2(k+1,l)>J0;
             I3(k+1,l-1)=I2(k+1,l-1)>J0;
             I3(k,l-1)=I2(k,l-1)>J0;
             LBP=I3(k-1,l-1)*2^7+I3(k-1,l)*2^6+I3(k-1,l+1)*2^5+I3(k,l+1)*2^4+I3(k+1,l+1)*2^3+I3(k+1,l)*2^2+I3(k+1,l-1)*2^1+I3(k,l-1)*2^0;
             bits = bitand(LBP, 2.^(7:-1:0))>0;
             if nnz(diff(bits([1:end, 1]))) <= 2
                RIULBP(k,l)=abs(I3(k-1,l-1)-I3(k-1,l))+ abs(I3(k-1,l)-I3(k-1,l+1))+ abs(I3(k-1,l+1)-I3(k,l+1))+ abs(I3(k,l+1)-I3(k+1,l+1))+abs(I3(k+1,l+1)-I3(k+1,l))+abs(I3(k+1,l)-I3(k+1,l-1))+abs(I3(k+1,l-1)-I3(k,l-1));
             else
                RIULBP(k,l)=9;
             end
           end
        end
        RIULBP=uint8(RIULBP);
        RIULBPv=reshape(RIULBP,1,size(RIULBP,1)*size(RIULBP,2));
        RIUHist=hist(RIULBPv,0:9); % problem
        RIUniformHist = [RIUniformHist RIUHist];
    end
end

1 Answer


1


Le vecteur retourné par

RIUHist=hist(data, bins)

est le décompte du nombre d’éléments de data qui sont les plus proches du point identifié par le vecteur` bins`. Donc, si vous avez une valeur de 178114, cette saillie signifie qu’il y avait des éléments de` 178114` de données qui étaient les plus proches de l’index correspondant dans` bins`.

Vous pouvez utiliser

[RIUHist, binsOut] = hist(data)

laisser Matlab choisir les bacs (je crois qu’il utilise 20 bacs) ou

[RIUHist, binsOut] = hist(data, binCount)

Pour laisser Matlab choisir les bacs, mais forcer un certain nombre de bacs (j’utilise souvent 100 ou 200).