2016-12-01 40 views
0

我有一個16位/像素的圖像文件。使用Matlab,我想生成另一個數組,其中每個元素只包含位2-10。我可以做一個for循環,但它太慢了:Bitshift在Matlab中沒有循環的數組中的每個元素

if mod(j,2) ~= 0  
    image1(i,j) = bitshift(image(i,j),-2); % shift the LL bits to the left 
else    
    tmp = bitand(image(i,j),3);   % save off the lower 2 bits 00000011 
    adder = bitshift(tmp,6);    % shift to new positions in LL 
    image1(i,j) = bitshift(image(i,j),-2); % shift the UL bits to the right 
    image1(i,j-1) = bitor(image1(i,j-1),adder); add in the bits from the UL 
end 

有沒有辦法做類似以下的事情?

image1(:,1:2:end) = bitshift(image(:,1:2:end),-2); 
etc 
+0

您是否按照您發佈的方式嘗試了它? 'bitshift'和相關的函數都可以接受多維輸入。 – Suever

+0

是的,錯誤是「下標分配維度不匹配」。 – user7236719

+1

您是否在嘗試設置'image1 = image'之前確保'image1'的尺寸合適? – Suever

回答

0

bitshiftbitand,並bitor呼叫所有多維陣列作爲第一輸入操作。你遇到的問題可能是因爲你已經初始化image1是一個不同的尺寸比image,因此你會得到一個尺寸不匹配錯誤使用以下命令

image1(:,1:2:end) = bitshift(image(:,1:2:end),-2); 

爲了解決這個問題,初始化image1要麼image或在調用上述命令之前的大小爲image的零的陣列

image1 = zeros(size(image)); 
image1(:,1:2:end) = bitshift(image(:,1:2:end),-2); 
相關問題