在Matlab中存储直方图的数组的预分配

时间:2016-04-21 20:26:57

标签: arrays matlab

X = [];
Y = [];

for i = 1:m 

    QImg = imread(fullfile(Dir2, QueryFrames(i).name),fmt);  
    Image1 = rgb2gray(QImg);
    X = [X, imhist(Image1)];       
end

for j= 1:n

     RImg = imread(fullfile(Dir1, RefFrames(j).name),fmt);
     Image2 = rgb2gray(RImg);
     Y = [Y, imhist(Image2)];     
end

任何人都可以告诉我如何预分配X和Y,两个存储直方图的数组。 Matlab建议两个阵列的预分配以提高速度。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

默认情况下,对于灰度图像(您有),imhist使用256个区域(文档here)创建直方图并输出列向量。因此,除非您在某些迭代中更改了bin的数量,否则您希望X具有256行。列数取决于您正在处理的图像数量,m变量的X图像和n变量的Y图像。

因此,您希望按如下方式初始化两个变量:

X = double(256,m);
Y = double(256,n);

此外,不建议使用ij作为循环迭代器,因为它们可能会混淆为虚构单位。

答案 1 :(得分:0)

将最后一个存储在x和y中,然后将循环存储到m-1,n-1。

QImg = imread(fullfile(Dir2, QueryFrames(m).name),fmt);  
Image1 = rgb2gray(QImg);
X(m) = imhist(Image1);

for i = 1:m-1
    QImg = imread(fullfile(Dir2, QueryFrames(i).name),fmt);  
    Image1 = rgb2gray(QImg);
    X(i) = imhist(Image1);       
end

RImg = imread(fullfile(Dir1, RefFrames(n).name),fmt);
Image2 = rgb2gray(RImg);
Y(n) = imhist(Image2);

for j= 1:n-1
    RImg = imread(fullfile(Dir1, RefFrames(j).name),fmt);
    Image2 = rgb2gray(RImg);
    Y(j) = imhist(Image2);     
end