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