数字图像处理/位图切割
设一幅灰度图像中的每一个像素都由 8 比特表示, 则图像转换为由 8 张 1 比特平面组成, 其范围从最低有效位的位平面 0 到最高有效位的位平面 7. 在 8 比特字节中, 平面 0 包含图像中像素的最低有效位, 而平面 7 则包含最高有效位. 较高阶位(尤其是前 4 位)包含了大多数在视觉上很重要的数据.
代码实现
import PIL.Image
import scipy.misc
import numpy as np
# 获取第 n 个位平面
flat = 7
def convert_2d(r):
s = np.empty(r.shape, dtype=np.uint8)
for j in range(r.shape[0]):
for i in range(r.shape[1]):
bits = bin(r[j][i])[2:].rjust(8, '0')
fill = int(bits[-flat - 1])
s[j][i] = 255 if fill else 0
return s
im = PIL.Image.open('/img/jp.jpg')
im = im.convert('L')
im_mat = np.asarray(im)
im_conveted_mat = convert_2d(im_mat)
im_conveted = PIL.Image.fromarray(im_conveted_mat)
im_conveted.show()
实验效果
原图
第 7 个位平面
第 6 个位平面
第 5 个位平面
第 4 个位平面
第 3 个位平面
第 2 个位平面
第 1 个位平面
第 0 个位平面