构建3列向量会产生157列向量?

时间:2017-09-16 01:20:01

标签: matlab octave m

在我的for循环中,我试图从局部变量构建一个向量。但奇怪的事情正在发生。当我构建我的矢量时,我希望它包含3个双打(1x3)。但它包含数百个双打(1x1XX)。

到底出了什么问题?我是否误解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

1 个答案:

答案 0 :(得分:3)

mode和MATLAB中的一些其他函数,如果应用于数组,则返回结果沿着作为函数的第二个输入提供的维度,如果未提供,则默认为第一维。当您编写时mode(red)它与mode(red, 1)相同。

所以你需要将矩阵转换为列向量:

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