目录

一、比特平面

1st比特平面:括号里面的为比特值,前面的是原图像中对应要变为0的像素值

2nd比特平面:

3rd比特平面:

4th比特平面:

5th比特平面:

6th比特平面:

7th比特平面:

8th比特平面:

小结:第i比特平面

简单理解

二、代码实现

MATLAB代码实现

Python实现

比特图重构(重建不理想)


翻了很多博客,都没有将各个比特图说清楚,直到看了数字图像处理才明白真正的方法,因此记下来分享给大家

一、比特平面

根据冈萨雷斯的数字图像处理课本(中文第四版)P85-P86,比特平面分层我的理解是:
一幅8比特的图像,可以看作8个一比特的图像组成


一开始我的理解是简单的阈值函数,但这是完全错误的!
既然8比特图像的灰度级是256,则第一比特平面即将0-127的值映射为0,128-255映射为1。如此,那么第七比特平面0-63的映射为0,然后64-255映射为1。 然后继续推导下去在第2,第3比特进行不下去, 通过课后题答案,发现问题所在。

这是课后习题3.3(a)的答案

1st比特平面:括号里面的为比特值,前面的是原图像中对应要变为0的像素值

这是最低的比特平面,其比特值为:

0、2、4、6、8、10、...、254(0)

1、3、5、7、9、11、...、255(1)

规律:区间长为0,偶数为0,奇数为1,共有2^(8-1+1)=256个区间

2nd比特平面:

比特值为0的像素值:【0,1】【4,5】【8,9】【12,13】。。。【252,253】

比特值为1的像素值:【2,3】【6,7】【10,11】【14,15】。。。【254,255】

规律:闭区间,区间长为2,区间起始点为0或2^2的倍数时比特值为0,其他为1,一个闭区间元素有2^(2-1)=2个,共有2^(8-2+1)=128个区间

3rd比特平面:

比特值为0的像素值:【0,3】【8,11】【16,19】【24,27】.。。。【248,251】

比特值为1的像素值:【4,7】【12,15】【20,23】【28,31】。。。【252,255】

规律:闭区间,区间长为4,区间起始点为0或2^3的倍数时比特值为0,其他为1,一个闭区间元素有2^(3-1)=4个,共有2^(8-3+1)=64个区间

4th比特平面:

比特值为0的像素值:【0,7】【16,23】【32,39】【48,55】.。。。【239,247】

比特值为1的像素值:【8,15】【24,31】【40,47】【56,63】。。。【248,255】

规律:闭区间,区间长为2^(4-1)=8,区间起始点为0或2^4的倍数时比特值为0,其他为1,一个闭区间元素有2^(4-1)=8个,共有2^(8-4+1)=32个区间

5th比特平面:

比特值为0的像素值:【0,15】【32,47】【64,79】【96,111】【128,143】【160,175】【192,207】【224,239】

比特值为1的像素值:【16,31】【48,63】【80,95】【110,127】【144,159】【176,191】【208,221】【240,255】

规律:闭区间,区间长为2^(5-1)=16,区间起始点为0或2^5的倍数时比特值为0,其他为1,一个闭区间元素有2^(5-1)=16个,共有2^(8-5+1)=16个区间

6th比特平面:

比特值为0的像素值:【0,31】【64,95】【128,159】【192,207】

比特值为1的像素值:【31,63】【96,127】【160,191】【208,255】

规律:闭区间,区间长为2^(6-1)=32,区间起始点为0或2^6的倍数时比特值为0,其他为1,一个闭区间元素有2^(6-1)=32个,共有2^(8-6+1)=8个区间

7th比特平面:

比特值为0的像素值:【0,63】【128,191】

比特值为1的像素值:【64,127】【192,255】

规律:闭区间,区间长为2^(7-1)=64,区间起始点为0或2^7的倍数时比特值为0,其他为1,一个闭区间元素有2^(7-1)=64个,共有2^(8-7+1)=4个区间

8th比特平面:

比特值为0的像素值:【0,127】

比特值为1的像素值:【128,255】

规律:闭区间,区间长为2^(8-1)=128,区间起始点为0或2^8的倍数时比特值为0,其他为1,一个闭区间元素有2^(8-1)=128个,共有2^(8-8+1)=2个区间

小结:第i比特平面

闭区间,区间长为2^(i-1),区间起始点为0或2^i的倍数时比特值为0,其他为1,一个闭区间元素有2^(i-1)=128个,共有2^(8-i+1)=2个区间

简单理解

二、代码实现

自己根据上述规律写代码就不写了,大佬写出来了求分享谢谢

MATLAB代码实现

可参考:https://blog.csdn.net/be_solider/article/details/79114263

Python实现

import cv2
import numpy as np
import matplotlib.pyplot as plt#更改为需要的图片路径
img = cv2.imread(r'C:\Users\xxx\Desktop\dollar.tif',0)
h,w = img.shape[0],img.shape[1]#处理过程
new_img = np.zeros((h,w,8))#用于存放每个比特位图,行h列w高8
for i in range(h):for j in range(w):n = str(np.binary_repr(img[i,j],8))  #将图像的灰度值转化为8位二进制数值,并且以str字符串的形式返回for k in range(8):new_img[i,j,k] = n[k]#依次从二进制的高位到低位赋值给new_img中,这样就将一个灰度值用8位的二进制表达出来了#依次显示
for i in range(8):#将比特图从高到低显示出来,从第8比特图从第1比特图cv2.imshow('image',new_img[:,:,i])cv2.waitKey(0)

比特图重构(重建不理想)

重构是使用第n个平面的像素值乘以常数 2^(n-1)
用128乘以比特平面8,用64乘以比特平面7,然后将这两个平面相加,原图的主要特征便被复原了。

import cv2
import numpy as np
import matplotlib.pyplot as plt#获得二进制图三维
def eightBit(img):h,w = img.shape[0],img.shape[1]#处理过程,比特平面分层new_img = np.zeros((h,w,8))#用于存放每个比特位图,行h列w高8for i in range(h):for j in range(w):n = str(np.binary_repr(img[i,j],8))  #将图像的灰度值转化为8位二进制数值,并且以str字符串的形式返回for k in range(8):new_img[i,j,k] = n[k]#依次从二进制的高位到低位赋值给new_img中,这样就将一个灰度值用8位的二进制表达出来了return new_img#依次显示各个层的比特图
def showBitImg(new_img):for i in range(8):#将比特图从高到低显示出来,从第8比特图从第1比特图cv2.imshow('image{}'.format(i),new_img[:,:,i])#这里是三维,1表示白色,0表示黑色cv2.waitKey(0)# ##重建
def reConstruct(new_img,numOfBit):''':param new_img: :param numOfBit:指定前几个高阶比特图的和 :return: 返回叠加图'''h,w,b = new_img.shapereImg = np.zeros((h,w,1))for i in range(numOfBit):#% 对第i比特面的值乘以2 ^ (i - 1)#得到对应十进制的值l = 8 - i - 1temp = new_img[:,:,i]*(2** l)#% 累加比特面reImg = reImg + tempprint(reImg)return reImg[0,:,:]if __name__ == '__main__':# 更改为需要的图片路径img = cv2.imread(r'E:\SCUT_study_files\PYTHON\Image_Processing\colorful_lena.jpg', 0)new_img = eightBit(img)reImg = reConstruct(new_img,4)cv2.imshow('reImg',reImg)cv2.waitKey(0)

【图像处理】——比特平面原理和实现方法(全网较全面,含所有比特位图的分层方法)相关推荐

  1. 数字图像处理 - 比特平面分层 的python实现

    本文主要介绍对<数字图像处理>第三章 比特平面分层 的介绍 p70 对于8位256灰度级图像来说,如果它的每个灰度值用二进制表示,选择将这8个数字用8个字节来表示,如32的二进制表示是00 ...

  2. 图像处理:比特平面分层

    图像处理:比特平面分层 图像的深度 图像由像素构成,每个像素位数据占用位数即图像的深度,单通道(1字节)图像深度为8位对应opencv 8UC1,三通道(3字节)图像对应深度24,8UC3.1位图即二 ...

  3. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波6 - 分段线性变换 - 比特平面分层

    目录 比特平面分层 比特平面分层 在一幅256级灰度图像中,图像的值是由8比特(1字节)组成的 def convert_bin(data, n):"""convert d ...

  4. 数字图像处理实验之比特平面分层

    其实书本里讲的不是很清楚,我在这里用大白话的形式介绍一个比特平面分层的意思.这里用书中例子,100美元的图像来说明.图像是256级灰度图像,其中一个像素点是由8比特组成的,8比特图像由8个1比特平面组 ...

  5. python验证数学原理_一起学opencv-python九(性能的测量和优化与图像处理的数学原理)...

    图像混合 其实用的就是cv2.addWeighted函数,前面也介绍过这个函数.不过首先得把图片的形状搞成一样的,这个画图可以做到. 接下来是一块比较重要的内容. 性能的测量和优化 参考 https: ...

  6. 比特平面分层_平面设计中的分层

    比特平面分层 One of the first windows to pop up automatically, when I first started using Adobe Photoshop ...

  7. 【OpenCV 例程200篇】42. 图像的灰度变换(比特平面分层)

    [OpenCV 例程200篇]42. 图像的灰度变换(比特平面分层) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

  8. 灰度变换-位图切割(比特平面分层)

    目录 1. 介绍 2. 实现方法 3. code 4. 比特平面重建图像 1. 介绍 图像的像素值是由比特组成的.例如一副256级灰度图像中,图像是由8 bit组成. 与之前对比度拉伸的区别是,之前我 ...

  9. 分段线性变换函数——比特平面分层

    1.比特平面分层 比特平面,代替突出灰度级范围,突出特定比特来为整个图像外观做出贡献.(数字图像处理(中卫第3版)) 下面的例子是该书上使用的实例.这里在matlab中进行实现,帮助大家理解,同时请大 ...

最新文章

  1. 任意排列、组合终极Shell脚本
  2. 小程序语音识别+php,微信小程序之语音识别(附小程序+服务器源码)
  3. 组合查询——怎样使用窗口的继承达到事半功倍?
  4. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法
  5. mysql的collation区分大小写设置
  6. 【Finish】Python Day 2
  7. hssfworkbook 设置自适应宽度_「CSS很简单」CSS 实现宽高等比自适应容器
  8. PHP返回数据json数据样式要求是对象{},而不是[]
  9. Android之获取证书文件(pfx格式)的公钥和私钥
  10. C#——image与byte数组的转换
  11. python 线程退出_python线程退出
  12. linux_iptables 详解
  13. 最长回文(Manacher算法模板)
  14. 测试经理如何规范测试团队(测试管理篇)
  15. tsdb java_OpenTSDB 问题集锦
  16. Java单例模式简单代码
  17. 查看服务器阵列卡型号6,怎么查看 dell 阵列卡型号#如何通过服务器自检画面的信息查看当前阵列卡的型号...
  18. java speex_JAVA版-微信语音.speex转.wav(示例代码)
  19. java实现fp-growth算法
  20. Flex 桌面应用 adl 调试模式运行

热门文章

  1. C#委托之就是跟委托过不去…
  2. asp.net上传文件时提示,不支持给定路径的格式解决方法
  3. .NET平台下WEB应用程序的部署(安装数据库和自动配置)
  4. 必然的宿命,绚然的《暗花》
  5. Vue多字段下的非空判断(new Promise)
  6. 详解JDBC连接数据库
  7. 验证码何时可以退出历史舞台?
  8. vue.js devtools的安装
  9. 爬虫系统Lucene分词
  10. 【腾许Bugly干货分享】“HTTPS”安全在哪里?