1. 基本原理
在灰度图中,像素值的范围为[0, 255]
,即共有256级灰度。在计算机中,我们使用8比特数来表示每一个像素值。因此可以提取出不同比特层面的灰度图。比特层面分层可用于图片压缩:只储存较高比特层(为什么使用较高层,而不是较低层?通过二进制转换,我们知道较高层在数值中的贡献更大);如使用高四位比特层表示原有的八层比特平面。
2. 测试结果
图源自skimage
3. 代码
def extract_bit_layer(input_image, layer_num):
'''
提取比特层
:param input_image: 原图像
:param layer_num: 提取层
:return: 提取到的比特层
'''
input_image_cp = np.copy(input_image) # 输入图片的副本 if layer_num == 1:
input_image_cp = np.where((input_image_cp >= 0) & (input_image_cp < 2), 255, 0)
elif layer_num == 2:
input_image_cp = np.where((input_image_cp >= 2) & (input_image_cp < 4), 255, 0)
elif layer_num == 3:
input_image_cp = np.where((input_image_cp >= 4) & (input_image_cp < 8), 255, 0)
elif layer_num == 4:
input_image_cp = np.where((input_image_cp >= 8) & (input_image_cp < 16), 255, 0)
elif layer_num == 5:
input_image_cp = np.where((input_image_cp >= 16) & (input_image_cp < 32), 255, 0)
elif layer_num == 6:
input_image_cp = np.where((input_image_cp >= 32) & (input_image_cp < 64), 255, 0)
elif layer_num == 7:
input_image_cp = np.where((input_image_cp >= 64) & (input_image_cp < 128), 255, 0)
elif layer_num == 8:
input_image_cp = np.where((input_image_cp >= 128) & (input_image_cp < 256), 255, 0)
else:
print("please enter the number of bit layers from 1 to 8") output_image = input_image_cp return output_image