比特平面分層(一些基本的灰度變換函數)基本原理及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), 255, 0)
14     elif layer_num == 3:
15         input_image_cp = np.where((input_image_cp >= 4) & (input_image_cp < 8), 255, 0)
16     elif layer_num == 4:
17         input_image_cp = np.where((input_image_cp >= 8) & (input_image_cp < 16), 255, 0)
18     elif layer_num == 5:
19         input_image_cp = np.where((input_image_cp >= 16) & (input_image_cp < 32), 255, 0)
20     elif layer_num == 6:
21         input_image_cp = np.where((input_image_cp >= 32) & (input_image_cp < 64), 255, 0)
22     elif layer_num == 7:
23         input_image_cp = np.where((input_image_cp >= 64) & (input_image_cp < 128), 255, 0)
24     elif layer_num == 8:
25         input_image_cp = np.where((input_image_cp >= 128) & (input_image_cp < 256), 255, 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM