2016-12-01 3 views
0

16ビット/ピクセルの画像ファイルがあります。 Matlabを使って、各要素がビット2〜10だけを含む別の配列を生成したい。私はforループでそれをすることができますが、遅すぎます: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'が適切なサイズであることを確認するために' image1 = image'を呼び出す前にそれを試しましたか? – Suever

答えて

0

bitshiftbitand、及びbitorコール全ては、第1の入力として多次元配列で動作します。あなたはimageとは異なるサイズであるため、あなたがこの問題を解決するには、以下のコマンド

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

を持つディメンションの不一致エラーを取得し、imageのいずれかにimage1を初期化するためにimage1を初期化してきたので、あなたが見ている問題がありそうですまたは上記のコマンドを呼び出す前にimageのサイズの0の配列

image1 = zeros(size(image)); 
image1(:,1:2:end) = bitshift(image(:,1:2:end),-2); 
関連する問題