如何从256位单色图像生成最高有效二进制及格雷编码位平面?
复现《Digital Image Processing》中的二进制/格雷编码位平面提取
核心原理
256级灰度图的每个像素值对应8位二进制数,最高4位是第7、6、5、4位(从0开始计数,第7位为权重128的最高有效位)。格雷编码位平面的生成逻辑是:先将像素值转换为格雷码(转换公式:格雷码 = 二进制值 ^ (二进制值 >> 1),^为异或操作),再提取对应位平面。
步骤1:提取二进制位平面
以Python结合numpy和PIL实现,代码简洁直观:
- 读取图像并转为灰度数组:
from PIL import Image import numpy as np img = Image.open("your_image.png").convert("L") img_arr = np.array(img, dtype=np.uint8)
- 提取指定高位的位平面(以第7位为例):
def extract_binary_bit_plane(arr, bit): # 提取第bit位,将0/1转为0/255以便可视化 bit_plane = ((arr >> bit) & 1) * 255 return Image.fromarray(bit_plane.astype(np.uint8)) # 生成最高4位(7、6、5、4)的二进制位平面 for bit in [7,6,5,4]: plane = extract_binary_bit_plane(img_arr, bit) plane.save(f"binary_bit_{bit}.png")
步骤2:提取格雷编码位平面
先将像素值批量转为格雷码,再复用二进制位平面的提取逻辑:
- 像素值转格雷码:
def pixel_to_gray_code(arr): return arr ^ (arr >> 1)
- 提取格雷编码的高位平面:
gray_arr = pixel_to_gray_code(img_arr) for bit in [7,6,5,4]: gray_plane = extract_binary_bit_plane(gray_arr, bit) gray_plane.save(f"gray_bit_{bit}.png")
补充说明
- 生成的位平面以0(黑色)和255(白色)显示,和教材中的可视化效果完全匹配。
- 该内容出现在块变换编码章节,是因为位平面分析能直观展示图像的冗余分布:高位平面保留了图像的核心轮廓信息,低位平面对应细节与噪声,这正是变换编码实现压缩的核心依据。
内容的提问来源于stack exchange,提问作者nic
相关产品推荐
相关产品推荐

