如何将2D图像像素存储到1d数组中?

时间:2014-11-17 14:40:55

标签: arrays matlab image-processing

我想将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

1 个答案:

答案 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数组,其中每列表示“迭代次数”以及循环中每次迭代时每个像素邻域的总和值