win10+Python3.7.3+OpenCV3.4.1入门学习(三)————3.4位平面分解

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm

将灰度图像中处于同一比特位上的二进制像素值进行组合,得到一幅二进制值图像,该图像被称为灰度图像的一个位平面,这个过程被称为位平面分解。例如,将一幅灰度图像内所有像素点上处于二进制位内最低位上的值进行组合,可以构成“最低有效位”位平面。
在8位灰度图中,每一个像素使用8位二进制值来表示,其值的范围在[0,255]之间。可以将其中的值表示为:
在这里插入图片描述
式中,ai的可能值为0或1。可以看出,各个ai的权重是不一样的,a7的权重最高,a0的权重最低。这代表a7的值对图像的影响最大,而a0的值对图像的影响最小。
通过提取灰度图像像素点二进制像素值的每一比特位的组合,可以得到多个位平面图像。图像中全部像素值的ai值所构成的位平面,称为第i个位平面(第i层)。在8位灰度图中,可以组成8个二进制值图像,即可以将原图分解为8个位平面。
根据上述分析,像素值中各个ai的权重是不一样的:
● a7的权重最高,所构成的位平面与原图像相关性最高,该位平面看起来通常与原图像最类似。
● a0权重最低,所构成的位平面与原图像相关性最低,该平面看起来通常是杂乱无章的。
eg:编写程序,观察灰度图像的各个位平面。
代码如下:

#图层提取
import cv2
import numpy as np
lena=cv2.imread("lena.bmp",0)
cv2.imshow("lena",lena)
r,c=lena.shape
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()

在本例中,通过两个循环提取了灰度图像的各个位平面,具体说明如下。
● 使用x=np.zeros((r, c,8), dtype=np.uint8)语句设置一个用于提取各个位平面的提取矩阵。该矩阵是“r×c×8”大小的,其中r是行高,c是列宽,8表示共有8个通道。r、c的值来源于要提取的图像的行高、列宽。矩阵x的8个通道分别用来提取灰度图像的8个位平面。例如,x[:, :,0]用来提取灰度图像的第0个位平面。
● 在第1个for循环中,使用x[:, :, i]=2**i语句设置用于提取各个位平面的提取矩阵的值。
● 在第2个for循环中,实现了各个位平面的提取、阈值处理和显示。
运行上述程序,得到如下图所示的图像,其中:
● 图(a)是原始lena图像。
● 图(b)是第0个位平面,第0个位平面位于8位二进制值的最低位,其权重最低,对像素值的影响最小,与lena图像的相关度也最低,所以显示出来的是一幅杂乱无章的图像。
● 图©是第1个位平面。
● 图(d)是第2个位平面。
● 图(e)是第3个位平面。
● 图(f)是第4个位平面。
● 图(g)是第5个位平面。
● 图(h)是第6个位平面。
● 图(i)是第7个位平面,第7个位平面位于8位二进制值的最高位,其对像素值的影响最大。第7位二进制值在8位二进制数中权重最高,与lena图像的相关度最高。所以,第7个位平面是与原始图像最接近的二值图像。
(a)在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值