У меня есть файл изображения с 16 бит/пиксель. Используя Matlab, я хочу создать другой массив, в котором каждый элемент содержит только биты 2-10. Я могу сделать это в петле цикла, но это слишком медленно: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
Вы попробовали так, как вы разместили? 'bithift' и связанные с ними функции принимают многомерный вход. – Suever
Да, ошибка - это «несоответствие размеров подзапросов». – user7236719
Вы пытались установить 'image1 = image' перед тем, как позвонить ему, чтобы убедиться, что 'image1' соответствует размеру? – Suever