Мне было интересно, как можно извлечь битовые плоскости изображения для сжатия изображений в MATLAB?Разбиение битовой плоскости изображения
ответ
Получение индивидуальных бит-плоскостей очень просто в MATLAB. Используйте функцию bitget
.
bitget
принимает матрицу/матрицу интегрального типа (uint8, uint16
и т. Д.) И возвращает массив/матрицу того же размера, которая дает бит в указанной позиции.
Например, предположим, что ваш образ был A
размера M x N
и вы хотите наименее значимый бит, вы могли бы сделать это:
B = bitget(A, 1);
B
будет M x N
матрица, где каждое место дает наименее значимый бит для соответствующих пикселей на изображении. Вы изменили бы второй параметр от 1 до нескольких бит, как и тип, поддерживаемый для получения желаемого местоположения бит, которого вы хотите, от 1, младшего значащего бита, до K
, самого значимого бита.
Если вы хотите, чтобы все битовые плоскости в одной 3D-матрицы, которая может быть легко сделать следующим образом, предполагая 8-разрядное целое без знака полутоновое изображение, сохраненное в A
:
B = zeros(size(A, 1), size(A, 2), 8, 'uint8');
for idx = 1 : 8
B(:,:,idx) = bitget(A, idx);
end
Это будет производят 3D-матрицу B
из 8 срезов, где первый срез (B(:,:,1)
) обозначает LSB в каждом местоположении пикселя вплоть до последнего фрагмента (B(:,:,8)
), который обозначает MSB в каждом местоположении пикселя.
Подробнее о bitget
на официальной документации MathWorks' на функцию: http://www.mathworks.com/help/matlab/ref/bitget.html