目录

  • 1 OpenCV入门
    • 1.1 如何使用
    • 1.2 图像读入、显示与保存
  • 2 图像处理基础
    • 2.1 图像处理入门基础
    • 2.2 像素处理
    • 2.3 numpy访问像素
    • 2.4 获取图像属性
    • 2.5 感兴趣区域ROI
    • 2.6 通道操作
  • 3 图像运算
    • 3.1 图像加法
    • 3.2 图像融合
    • 3.3 位平面分解
    • 3.4 图像加密和解密
    • 3.5 数字水印
  • 4 色彩空间类型转换
    • 4.1 色彩类型转换
  • 5 几何变换
    • 5.1 图像缩放
    • 5.2 图像翻转
  • 6 阈值处理
    • 6.1 阈值理论知识
    • 6.2 阈值处理实践
  • 7 图像平滑处理
    • 7.1 均值滤波
    • 7.2 方框滤波
    • 7.3 高斯滤波
    • 7.4 中值滤波
  • 8 形态学操作
    • 8.1 图像腐蚀
    • 8.2 图像膨胀
    • 8.3 开运算
    • 8.4 闭运算
    • 8.5 梯度运算
    • 8.6 礼帽操作
    • 8.7 黑帽图像处理
  • 9 图像梯度
    • 9.1 Sobel理论基础
    • 9.2 Sobel算子及函数使用
    • 9.3 Scharr算子及函数使用
    • 9.4 Sobel算子和Scharr算子的比较
    • 9.5 Laplacian算子及函数使用
  • 10 canny边缘检测
    • 10.1 Canny边缘检测原理
    • 10.2 Canny函数及使用
  • 11 图像金字塔
    • 11.1 理论基础
    • 11.2 pyrDown函数及使用
    • 11.3 pyrUp函数及使用
    • 11.4 采样可逆性的研究
    • 11.5 拉普拉斯金字塔
  • 12 图像轮廓
    • 12.1 图像轮廓操作
  • 13 直方图
    • 13.1 直方图的概念
    • 13.2 绘制直方图
    • 13.3 使用OpenCV统计直方图
    • 13.4 绘制OpenCV统计直方图
    • 13.5 使用掩膜的直方图
    • 13.6 掩膜原理及演示
    • 13.7 直方图均衡化原理
    • 13.8 直方图均衡化函数equalizeHist
    • 13.9 subplot函数的使用
    • 13.10 matplotlib.pyplot.imshow函数的使用
    • 13.11 直方图均衡化对比
  • 14 傅里叶变换
    • 14.1 傅里叶变换的理论基础
    • 14.2 numpy实现傅里叶变换
    • 14.3 numpy实现逆傅里叶变换
    • 14.4 高通滤波演示
    • 14.5 OpenCV实现傅里叶变换
    • 14.6 OpenCV实现逆傅里叶变换
    • 14.7 低通滤波示例
位平面分解

3.6位平面分解

将灰度图像中处于同一比特位上的二进制像素值进行组合,得到一副二进制值图像,该图像被称为灰度图像的一个位平面,这个过程被称为位平面分解。例如,将一副灰度图像内所有像素点上处于二进制位内最低位上的值进行组合,可以构成“最低有效位”位平面。

Value=ɑ7×276×265×254×243×232×221×210×20

ɑi的可能值为01,各个ɑi 的权重是不一样的,ɑ7 的权重最高,ɑ0 的权重最低,这代表

ɑ7 的值对图像的影响最大,而ɑ0的值对图像的影响最小。
 
灰度图像O的像素值:                              对应的二进制值为:

                                                                 

209
197
163
193

1101 0001
1100 0101
1010 0011
1100 0001
125
247
160
112
0111 1101
1111 0111
1010 0000
0111 0000
161
137
243
203
1010 0001
1000 1001
1111 0011
1100 1011
39
82
154
127
0010 0111
0101 0010
1001 1010
0111 1111
 
 
第0个位平面图

                               

1
1
1
1
1
1
0
0
1
1
1
1
1
0
0
1
    

                               

1101 0001
1100 0101
1010 0011
1100 0001
0111 1101
1111 0111
1010 0000
0111 0000
1010 0001
1000 1001
1111 0011
1100 1011
0010 0111
0101 0010
1001 1010
0111 1111
     
 
其它位平面分解,依次类推。
位平面分解过程:
原图O像素值:                            原图对应的二进制图RB

                                                                 

209
197
163
193

1101 0001
1100 0101
1010 0011
1100 0001
125
247
160
112
0111 1101
1111 0111
1010 0000
0111 0000
161
137
243
203
1010 0001
1000 1001
1111 0011
1100 1011
39
82
154
127
0010 0111
0101 0010
1001 1010
0111 1111
 
如果要提取第3个位平面,
则先构造值均为23的数组BD                所对应二进制的形的BT

                                                                 

 

8

 
 

8

 
 

8

 
 

8

 
 

 
 

0000 1000

 
 

0000  1000

 
 

0000  1000

 
 

0000  1000

 
 

8

 
 

8

 
 

8

 
 

8

 
 

0000  1000

 
 

0000  1000

 
 

0000  1000

 
 

0000  1000

 
 

8

 
 

8

 
 

8

 
 

8

 
 

0000  1000

 
 

0000  1000

 
 

0000  1000

 
 

0000  1000

 
 

8

 
 

8

 
 

8

 
 

8

 
 

0000  1000

 
 

0000  1000

 
 

0000  1000

 
 

0000  1000

 
 
将RB与BT进行按位与运算,得到RE
 

                                                                                                     

RB
11010001
11000101
10100011
11000001
01111101
11110111
10100000
01110000
10100001
10001001
11110011
11001011
00100111
01010010
10011010
01111111
BT
 

0000 1000

 
 

00001000

 
 

00001000

 
 

00001000

 
 

0000 1000

 
 

00001000

 
 

0000 1000

 
 

00001000

 
 

0000 1000

 
 

00001000

 
 

0000 1000

 
 

00001000

 
 

0000 1000

 
 

00001000

 
 

0000 1000

 
 

00001000

 
RE
 

00000000

 
 

00000000

 
 

0000 0000

 
 

0000 0000

 
 

00001000

 
 

00000000

 
 

0000 0000

 
 

0000 0000

 
 

00000000

 
 

00001000

 
 

0000 0000

 
 

00001000

 
 

00000000

 
 

00000000

 
 

00001000

 
 

00001000

 
 
 
 
 
 
RE所对应的十进制标记为RD:

                               

0
 

0

 
 

0

 
 

0

 
8
 

0

 
 

0

 
 

0

 
 

0

 
8
0
8
 

0

 
0
8
8
 
阈值处理:
通过计算得到的位平面是一个二值图像,如果直接将上述得到的平面显示出来,则会得到近似黑色的图像。因为默认当前显示的图像是8位灰度图,而当其中的像素值较小时,显示的近乎黑色。例如,在图像RD中,最大像素值是8,几乎是黑色,要让8显示为白色,必须将8处理为255。
 
将得到的位平面RD进行阈值处理,将其中的8调整为255,具体语句为:
mask=RD[:,:,i]>0
RD[mask]=255
首先使用mask = rd[:,:,i]>0rd进行处理:
rd中大于0的值处理为真true,将rd中小于或等于0的值处理为假false
 
#3.13编写程序,观察灰度图像的各个位平面
import cv2
import numpy as np
lena=cv2.imread("lena.bmp",0)
cv2.imshow("lena",lena)
r,c=lena.shape
print(r)
print(c)
x=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
    x[:,:,i]=2**i
r=np.zeros((r,c,8),dtype=np.uint8)
for i in range(8):
    r[:,:,i]=cv2.bitwise_and(lena,x[:,:,i])
    mask=r[:,:,i]>0
    r[mask]=255
    cv2.imshow(str(i),r[:,:,i])
cv2.waitKey()
cv2.destroyAllWindows()