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

Arrays 在Matlab中存储直方图的数组的预分配,arrays,matlab,Arrays,Matlab,谁能告诉我如何预先分配X和Y,这两个数组存储直方图。Matlab建议为两个阵列预先分配速度。谢谢你的帮助 默认情况下,对于灰度图像(您有),imhist使用256个存储单元(文档)创建直方图并输出列向量。因此,除非在某些迭代中更改存储箱的数量,否则您希望X有256行。列数由正在处理的图像数决定,这里是X变量的m图像和Y变量的n图像 因此,您希望按如下方式初始化这两个变量: X = []; Y = []; for i = 1:m QImg = imread(fullfile(Dir2

谁能告诉我如何预先分配X和Y,这两个数组存储直方图。Matlab建议为两个阵列预先分配速度。谢谢你的帮助

默认情况下,对于灰度图像(您有),
imhist
使用256个存储单元(文档)创建直方图并输出列向量。因此,除非在某些迭代中更改存储箱的数量,否则您希望X有256行。列数由正在处理的图像数决定,这里是
X
变量的
m
图像和
Y
变量的
n
图像

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

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

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

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

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

您知道
imhist
返回的数组的大小吗?这个大小是随着每次迭代而改变还是保持不变?保持不变,有256个箱子。很抱歉,没有说得很清楚。关于避免
i
j
的建议已经过时了。使用它们绝对没有坏处,除非你真的打算使用复杂的算术。From:为了提高复杂算法的速度和鲁棒性,请使用1i和1j代替i和j。因为i是一个函数,所以它可以被重写并用作变量。但是,如果你想在复杂的算术中使用i和j,最好避免使用i和j作为变量名。@nirvana msu这绝对不是过去的事情,从至少R13(2002年)起,文档摘录或多或少保持不变。只要MATLAB将
i
j
用作函数,用户就必须理解将它们用作迭代器的含义,这不是因为这是错误的,而是因为这可能会造成混淆。现在,JIT编译器不再试图找出
i
是否被用作函数或变量,因此性能差异基本上不存在。
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