2017-09-16 124 views
2

在我for循环中,我试图从局部变量中构建一个向量。但有些奇怪的事情正在发生。当我构建我的矢量时,我预计它会包含3个双打(1x3)。但相反,它包含数百个双打(1x1XX)。建立一个3列向量导致157列向量?

这是怎么回事?我误解m的范围或矢量建筑?

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 

回答

3

mode,并在MATLAB一些其它功能,如果施加到一个数组,返回沿着与第二输入到该函数提供的尺寸的结果,如果没有设置默认为你写的第一dimension.When mode(red)mode(red, 1)相同。

所以,你需要的矩阵转换成列向量:

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