我想将m(i,j)值存储在2行的1D数组中。第一行wd是m(ij)计数器,第二行w是每次迭代的m(ij)值。我怎么能这样做,?请帮忙。 想要将2D转换为1D数组,如数组(2,count)。
[e,f] = size(outImg);
m = zeros(e,f);
counter=0
w = [1 2 4 8; 16 32 64 128; 256 512 1024 2048; 4096 8192 16384 32768];
for i = 1:e-3
for j = 1:f-3
I = double(outImg((i:i+3),(j:j+3)));
counter=counter+1;
m(i,j) = sum(sum(I .* w));
end
end
答案 0 :(得分:1)
在您的代码中,最快的方式(虽然不一定是最有效的,但与您的代码最兼容......)将分配一个2D数组并在每次迭代时填充此数组。引用my previous post to you,此循环迭代的总次数为(e-3) x (f-3)
次。因此,请按照您在帖子中的说法分配2D数组。只有这一次,将count
替换为(e-3)*(f-3)
。
如下所示:
[e,f] = size(outImg);
m = zeros(e,f);
counter=0;
counts = zeros(2, (e-3)*(f-3)); %// NEW
w = [1 2 4 8; 16 32 64 128; 256 512 1024 2048; 4096 8192 16384 32768];
for i = 1:e-3
for j = 1:f-3
I = double(outImg((i:i+3),(j:j+3)));
counter=counter+1;
m(i,j) = sum(sum(I .* w));
counts(:,counter) = [counter; m(i,j)]; %// NEW
end
end
因此,您将拥有一个名为counts
且尺寸为2 x (e-3)*(f-3)
的2D数组,其中每列表示“迭代次数”以及循环中每次迭代时每个像素邻域的总和值