图像的位平面分解一般分为5个步骤:
1.图片预处理
2.构造提取矩阵
3.提取位平面
4.阈值处理
5.显示图像
以灰度图像的位平面分解为例,代码如下:
import cv2
import numpy as np
demo = cv2.imread("demo.jpg", 0)
cv2.imshow("demo", demo)
r, c = demo.shape # 图像预处理
x = np.zeros((r, c, 8), dtype=np.uint8) # 构造提取矩阵
for i in range(8):
x[:,:,i] = 2**i
#print(x)
w = np.zeros((r, c, 8), dtype=np.uint8)
#print(r)
for i in range(8):
w[:,:,i] = cv2.bitwise_and(demo, x[:,:,i]) # 提取位平面
mask = w[:,:,i]>0 # 阈值处理
w[mask] = 255
cv2.imshow(str(i), w[:,:,i]) # 显示图片
cv2.waitKey()
cv2.destroyAllWindows()
从图中可以看出左上角位原图,从上至下从左至右依次对应为第0-7个位平面,第0个位平面显示原图信息的效果最差权值最低,第7个权值最高。通常情况下第0层能量最低,在显示图像的时候作用最小,可以选择该层制作数字水印保存秘密信息。