比特平面分层
1、实现思路
对于一幅8比特的图像而言,其灰度级最大值为255(对应二进制数11111111),有8位二进制位,这8个二进制分别对应每一层比特平面的灰度值(最高位对应最高阶比特平面)。因此,只要我们将图像的每一个像素点的灰度级转换为8个二进制位的数字,然后分别提取出每个二进制位数字,按照对应的位置赋值给每一个比特平面对应位置的像素即可。
具体实现步骤如下:
- 获取输入图像的行和列(分别记为r,c),生成一个三维零矩阵 imageBit[r c 8];
- 遍历原图像每一个像素点,将其值转换为8位2进制字符串(调用dec2bin函数),然后提取转型并赋值到对应比特平面(通过一个 i=1-8 的for循环,分别提取出字符串的每一位,然后赋值到对应平面的对应位置即可)。
2、编码实现
以下是 matlab 代码:
function imageBit = myImageBitPlaneSlicing(img)
% 用于比特平面分层
% img:一幅m×n×1的8比特图像;
% imageBit:一个m×n×i (i = 1, 2, …, 8)的矩阵,第i个通道上存储第i阶比特平面图像
img_double = double(img);
[r c] = size(img_double);
imageBit = zeros(r,c,8);
% 遍历每一个像素点,将其值转换为8位2进制字符串,然后提取转型并赋值到对应比特平面
for row = 1 : r
for col = 1 : c
% 将灰度级转为8位2进制字符串
bin_str = dec2bin(img_double(row, col),8);
for i = 1