2017-09-16 3 views
2

Dans ma boucle for, j'essaie de construire un vecteur à partir de variables locales. Mais quelque chose de bizarre se passe. Quand je construis mon vecteur, je m'attends à ce qu'il contienne 3 doubles (1x3). Mais à la place, il contient des centaines de doubles (1x1XX).La construction d'un vecteur à 3 colonnes donne un vecteur de 157 colonnes à la place?

Que diable se passe-t-il? Suis-je mal compris m la portée ou la construction de vecteur?

for i=0:ncols 
    for j=0:nrows 

    ... 

    roi = imcrop(img, [cx, cy, cw, ch]); 

    %Extract 3 channels 
    red = roi(:,:,1); 
    green = roi(:,:,2); 
    blue = roi(:,:,3); 

    %Get most frequent colour 
    [freqR, f, c] = mode(red); 
    [freqG, f, c] = mode(green); 
    [freqB, f, c] = mode(blue); 
    freqR = double(freqR)/255; 
    freqG = double(freqG)/255; 
    freqB = double(freqB)/255; 

    %ERROR OCCURS ON BELOW LINE 
    %Build vector representing most common colour in cell 
    col = [freqR, freqG, freqB]; 

    %Intended usage of col 
    rectangle('Position', [cx, cy, cw, ch], 'EdgeColor', col, 'LineWidth', 3, 'LineStyle','-'); 
    endfor 
endfor 

Répondre

3

mode, et d'autres fonctions dans MATLAB, si elle est appliquée à un tableau, renvoie le résultat le long de la dimension prévue comme la deuxième entrée à la fonction si est pas fourni par défaut à la première dimension.When vous écrivez mode(red) c'est le même que mode(red, 1).

Vous avez donc besoin de convertir la matrice à un vecteur de colonne:

[freqR, f, c] = mode(red(:));