我想知道如何在MATLAB中提取图像的位平面以进行图像压缩?
答案 0 :(得分:2)
在MATLAB中获取单个位平面非常简单。使用bitget
功能。
bitget
接受一个整数类型(uint8, uint16
等)的数组/矩阵,它返回一个相同大小的数组/矩阵,它给出了指定位置的位。 / p>
例如,假设您的图片大小为A
M x N
并且您想要最低位,您可以这样做:
B = bitget(A, 1);
B
将是M x N
矩阵,其中每个位置为您提供图像中相应像素的最低有效位。您可以将第二个参数从1更改为支持的位数,以获得所需的位位置,从1,最低有效位,最高有效位K
。
如果您想在单个3D矩阵中使用所有位平面,假设存储在A
中的8位无符号整数灰度图像,可以通过以下方式轻松完成:
B = zeros(size(A, 1), size(A, 2), 8, 'uint8');
for idx = 1 : 8
B(:,:,idx) = bitget(A, idx);
end
这将生成8个切片的3D矩阵B
,其中第一个切片(B(:,:,1)
)表示每个像素位置的LSB,直到最后一个切片(B(:,:,8)
),表示每个像素位置的MSB。
在MathWorks上阅读有关bitget
的更多信息'关于该职能的官方文件:http://www.mathworks.com/help/matlab/ref/bitget.html