比特平面分层一些基本的灰度变换函数基本原理及Python实现

1. 基本原理

在灰度图中,像素值的范围为[0,255],即共有256级灰度。在计算机中,我们使用8比特数来表示每一个像素值。因此可以提取出不同比特层面的灰度图。比特层面分层可用于图片压缩:只储存较高比特层(为什么使用较高层,而不是较低层?通过二进制转换,我们知道较高层在数值中的贡献更大);如使用高四位比特层表示原有的八层比特平面。

2. 测试结果

分享图片

图源自skimage

3. 代码

 1 def extract_bit_layer(input_image,layer_num):
 2     ‘‘‘
 3     提取比特层
 4     :param input_image: 原图像
 5     :param layer_num: 提取层
 6     :return: 提取到的比特层
 7     ‘‘‘
 8     input_image_cp = np.copy(input_image)  # 输入图片的副本
 9 
10     if layer_num == 1:
11         input_image_cp = np.where((input_image_cp >= 0) & (input_image_cp < 2),255,0)
12     elif layer_num == 2:
13         input_image_cp = np.where((input_image_cp >= 2) & (input_image_cp < 4),0)
14     elif layer_num == 3:
15         input_image_cp = np.where((input_image_cp >= 4) & (input_image_cp < 8),0)
16     elif layer_num == 4:
17         input_image_cp = np.where((input_image_cp >= 8) & (input_image_cp < 16),0)
18     elif layer_num == 5:
19         input_image_cp = np.where((input_image_cp >= 16) & (input_image_cp < 32),0)
20     elif layer_num == 6:
21         input_image_cp = np.where((input_image_cp >= 32) & (input_image_cp < 64),0)
22     elif layer_num == 7:
23         input_image_cp = np.where((input_image_cp >= 64) & (input_image_cp < 128),0)
24     elif layer_num == 8:
25         input_image_cp = np.where((input_image_cp >= 128) & (input_image_cp < 256),0)
26     else:
27         print("please enter the number of bit layers from 1 to 8")
28 
29     output_image = input_image_cp
30 
31     return output_image

相关文章

文章浏览阅读903次。文章主要介绍了收益聚合器Beefy协议在币...
文章浏览阅读952次。比特币的主要思路是,构建一个无中心、去...
文章浏览阅读2.5k次。虚拟人从最初的不温不火,到现在步入“...
文章浏览阅读1.3k次,点赞25次,收藏13次。通过调查和分析用...
文章浏览阅读1.7k次。这个智能合约安全系列提供了一个广泛的...
文章浏览阅读1.3k次。本文描述了比特币核心的编译与交互方法...