【python】OpenCV—Bitplane

在这里插入图片描述

学习来自:

  • 位平面分割(Bit-Plane Slicing)
  • 使用OpenCV+Python进行图像处理的初学者指南

位平面

位平面(bitplane)是一个在计算机科学中用于描述图像数据的概念,具体定义如下:

  • 【定义】:位平面是用图像作为底面,用表示像素亮度大小的二进制数(通常为8位)作为高度,所形成的一个立体直方图。在这个直方图中,各像素位置相同的位会形成一个平面,这个平面就被称为“位平面”。
  • 【解释】:
    • 对于一个灰度图像,每个像素的亮度通常由一个8位的二进制数表示,这个二进制数的范围是00000000(亮度为0)到11111111(亮度为255)。
    • 如果我们将这些二进制数的每一位(从最低位到最高位)分别提取出来,并单独处理,那么就可以得到8个位平面。每个位平面都是一个二值图像,其中像素值要么是0,要么是1。
    • 最低位(Least Significant Bit,LSB) 的位平面通常包含图像中的噪声和细节信息,而 最高位(Most Significant Bit,MSB) 的位平面则包含图像的主要轮廓和形状信息。
  • 【用途】:位平面的概念在图像处理、压缩和传输中有重要应用。通过分析或修改不同的位平面,我们可以对图像进行各种操作,如降噪、增强、压缩等。

综上所述,位平面是图像处理中的一个重要概念,它通过将图像的每个像素的二进制表示进行分解,得到一系列的二值图像,这些二值图像就是位平面。每个位平面都包含了图像的不同信息,通过处理这些位平面,我们可以对图像进行各种操作。

在这里插入图片描述

位平面分割

位平面分割(Bit-Plane Slicing)是一种在数字图像处理中分析图像各个位级的方法。具体来说,位平面分割是指将图像的灰度值(通常是一个8位的二进制数)按照每一位(从最低位到最高位)进行拆解,从而得到多个独立的位平面。

  • 【基本概念】:

    • 位平面:一个灰度图像的每个像素值通常由一个8位的二进制数表示,这个二进制数的每一位都可以视为一个独立的平面,称为位平面。
    • 位平面分割:将灰度图像的每个像素值的二进制表示中的每一位单独提取出来,形成独立的位平面图像。
  • 【分割过程】:

    • 对于一个8位深度的灰度图像,可以将其分割为8个位平面。
    • 每个位平面上的像素值只有0或1,代表原图像在该位上的值。
    • 最高位(MSB)的位平面通常包含图像的主要轮廓和形状信息,而最低位(LSB)的位平面则包含噪声和细节信息。
  • 【应用】:

    • 位平面分割在图像压缩中有着重要的应用,因为它可以有效减少图像的存储大小。例如,如果一个图像的最高位平面存储的是图像的主要信息,那么将其单独存储可以大大减小图像的大小
    • 位平面分割也广泛应用于数字水印、特征提取等领域,通过对每个位平面进行单独处理,可以更加精细地处理图像信息,提高图像处理的效率和精度。
  • 【操作步骤】:

    • 读入灰度图像并将其转换为二进制形式,即将每个像素点的灰度值表示成8位二进制数。
    • 对于每个像素点的二进制数,将它们按位拆分为8个二进制数,每个数表示一个位平面。
    • 对于每个位平面,将其转换为0或255的二值图像。具体方法是将每个像素点的该位的二进制数值提取出来,然后将该值赋为0或255。
    • 保存每个位平面的二值图像,以便后续使用。

总之,位平面分割是一种有效的图像处理技术,它通过将图像的灰度值按照每一位进行拆解,得到多个独立的位平面,从而可以对图像进行更精细的分析和处理。

应用例子

实现一

利用 bitwise_and

import cv2
import numpy as np
import matplotlib.pyplot as pltimage = cv2.imread("1.jpg", cv2.IMREAD_GRAYSCALE)bit_planes = []for i in range(8):bit_plane = cv2.bitwise_and(image, 1 << i)bit_plane *= 255bit_planes.append(bit_plane)# for i, plane in enumerate(bit_planes):
#     cv2.imshow(f'Bit plane {i}', plane)
#     # cv2.imwrite(f"bitplane{i}.jpg", plane)
# cv2.waitKeyEx(0)
# cv2.destroyAllWindows()fig, axes = plt.subplots(nrows=2, ncols=4, figsize=(10, 8),subplot_kw={'xticks':[], 'yticks':[]})
fig.subplots_adjust(hspace=0.05, wspace=0.05)
for ax, img in zip(axes.flat, bit_planes):ax.imshow(img, cmap="gray")
plt.tight_layout()
plt.show()

原图

在这里插入图片描述
各级位平面图

在这里插入图片描述

下面仔细看看

bitplane1
在这里插入图片描述

bitplane2
在这里插入图片描述

bitplane3
在这里插入图片描述

bitplane4
在这里插入图片描述

bitplane5

在这里插入图片描述

bitplane6

在这里插入图片描述

bitplane7

在这里插入图片描述

bitplane8

在这里插入图片描述

实现二

暴力,获取每位二进制数值

import cv2
import numpy as np
import matplotlib.pyplot as pltgray = cv2.imread("1.jpg", cv2.IMREAD_GRAYSCALE)c1 = np.mod(gray, 2)
c2 = np.mod(np.floor(gray/2), 2)
c3 = np.mod(np.floor(gray/4), 2)
c4 = np.mod(np.floor(gray/6), 2)
c5 = np.mod(np.floor(gray/8), 2)
c6 = np.mod(np.floor(gray/16), 2)
c7 = np.mod(np.floor(gray/64), 2)
c8 = np.mod(np.floor(gray/128), 2)# reconstructing image with 3 most significant bit planes
cc = 2 * (2 * (2 * c8 + c7) + c6)bit_planes = [gray, c1, c2, c3, c4, c5, c6, c7, c8, cc]fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(10, 8),subplot_kw={'xticks':[], 'yticks':[]})
fig.subplots_adjust(hspace=0.05, wspace=0.05)
for ax, img in zip(axes.flat, bit_planes):ax.imshow(img, cmap="gray")
plt.tight_layout()
plt.show()

输入
在这里插入图片描述
输出

第一张图是原图的灰度图

第二张到第九张即为 8 层位平面可视化结果

最后一张图是合并了 6、7、8 三层位平面尝试还原原图,效果还是可以接受的
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《手把手教你》系列练习篇之10-python+ selenium自动化测试(详细教程)

1. 简介 今天我们继续前边的练习&#xff0c;学习和练习一下&#xff1a;如何使用webdriver方法获取当前测试页面的URL、如何获取当前页面的title、如何打开浏览器的一个新建页面、如何操作单选按钮等等&#xff0c;这些小练习&#xff0c;来巩固基础。 2. webdriver方法获取…

​谁用谁知道,教师实用工具分享​

老师们面临着日益增长的教学和管理任务。为了有效提升工作效率&#xff0c;一些实用的工具成为了老师们不可或缺的助手。给大家分享几款教师必备的工具&#xff0c;帮助教师们在教学和管理工作中更加得心应手。 1. 知乎&#xff1a;知识的海洋 知乎是一个中文问答社区&#xf…

Docker-compose安装、使用,容器化部署springboot项目

一、docker-compose的安装 1、按官网的方式去安装 1&#xff09;下载docker-compose curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 若…

【微机原理及接口技术】中断系统

【微机原理及接口技术】中断系统 文章目录 【微机原理及接口技术】中断系统前言一、中断概述中断的基本概念中断处理过程 二、8086/8088中断系统中断类型中断响应过程中断向量表内部中断服务程序 总结 前言 本篇文章我们会讲到中断的概述&#xff0c;8086/8088中断系统。 一、…

bootstrap5-学习笔记3-文字格式+表格+徽章

参考&#xff1a; Bootstrap5 教程 | 菜鸟教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Bootstrap 入门 Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 https://v5.bootcss.com/docs/getting-started/introduction/ 之前用bootstrap2和3比较多&#x…

微软云计算Windows Azure(三)

目录 五、Windows Azure Marketplace六、Windows Azure服务平台&#xff08;一&#xff09;网站&#xff08;二&#xff09;虚拟机&#xff08;三&#xff09;云服务&#xff08;四&#xff09;移动服务&#xff08;五&#xff09;大数据处理&#xff08;六&#xff09;媒体支持…

点赋科技:在招聘会上绽放光彩,助力青春梦想起航

在近日举行的青年企业家协会招聘会暨长江大学就业实习双选会上&#xff0c;点赋科技以其独特的魅力和强大的实力吸引了众多求职者的关注。 点赋科技的展位前人头攒动&#xff0c;公司的招聘团队热情地与每一位求职者交流。他们详细介绍了公司的发展历程、业务范围、企业文化以及…

LeetCode-704. 二分查找【数组 二分查找】

LeetCode-704. 二分查找【数组 二分查找】 题目描述&#xff1a;解题思路一&#xff1a;注意开区间和闭区间背诵版&#xff1a;解题思路三&#xff1a; 题目描述&#xff1a; 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xf…

杨校老师项目之基于52单片机的霍尔自行车码表【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 本项目基于单片机设计了一款霍尔自行车码表。该系统实现了骑行过程中即时显示行驶速度、行径里程、显示当前时刻以及超速危险报警等功能。有助于骑行者在骑行过…

“解锁财富新密码:订单共享商业模式的革命性力量“

在当前的商业环境中&#xff0c;创新和效率是企业生存和发展的关键。今天&#xff0c;我们向您介绍一种革命性的商业模式——订单共享商业模式&#xff0c;它正在改变企业家们对新零售的理解和实践。 订单共享商业模式&#xff0c;是一种通过整合和优化不同商家的订单资源&…

从零开始:如何用Electron将chatgpt-plus.top 打包成EXE文件

文章目录 从零开始&#xff1a;如何用Electron将chatgpt-plus.top 打包成EXE文件准备工作&#xff1a;Node.js和npm国内镜像加速下载初始化你的Electron项目创建你的Electron应用运行你的Electron应用为你的应用设置图标打包成EXE文件结语 从零开始&#xff1a;如何用Electron将…

【动手学深度学习】使用块的网络(VGG)的研究详情

目录 &#x1f30a;1. 研究目的 &#x1f30a;2. 研究准备 &#x1f30a;3. 研究内容 &#x1f30d;3.1 多层感知机模型选择、欠拟合和过拟合 &#x1f30d;3.2 练习 &#x1f30a;4. 研究体会 &#x1f30a;1. 研究目的 理解块的网络结构&#xff1b;比较块的网络与传统…

Qt如何让按钮的菜单出现在按钮的右侧

直接上代码&#xff0c;我们用到了一个eventfilter的函数功能。这个函数比较厉害和重要&#xff0c;大家务必经常拿出来看看。 void MainWindow::initMenu() { QMenu* menuLiXiang new QMenu; QAction* actXiangMuZhangCheng new QAction("项目章程"); …

【Cesium4UE】使用问题及解法统计

本期作者&#xff1a;尼克 易知微3D引擎技术负责人 1.加载3dtiles模型很慢 1.3dtiles是否做了重建顶层处理。如果3dtiles的tiles块太多使用CesiumLab重建顶层。 2.将3dtiles模型放置到固态硬盘中 3.如果有多块3dtiles&#xff0c;考虑使用CesiumLab合并3dtiles处理 4.如果不需…

OSG天空图代码

osgEarth // 创建天空选项osgEarth::Util::SkyOptions skyOptions;// 设置天空的坐标系统&#xff08;可选&#xff09;skyOptions.coordinateSystem() osgEarth::Util::SkyOptions::COORDSYS_ECEF;// 设置一天中的小时数&#xff08;可选&#xff09;skyOptions.hours() 12.…

基于springboot实现社区养老服务系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现社区养老服务系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本社区养老服务系统就是在这样的大环境下诞生&#xff0c;其可以帮助…

Al2O3/SiC纳米复相陶瓷力学性能显著提升 我国研究机构数量较多

Al2O3/SiC纳米复相陶瓷力学性能显著提升 我国研究机构数量较多 Al2O3/SiC纳米复相陶瓷&#xff0c;是以氧化铝&#xff08;Al2O3&#xff09;为基体相&#xff0c;以纳米碳化硅&#xff08;SiC&#xff09;为第二相&#xff0c;将第二相纳米颗粒弥散进入基体相&#xff0c;经高…

Google Inventor一款适合儿童的趣味APP编程开发平台

Google Inventor 其实是指 App Inventor&#xff0c;这是由 Google 开发并由麻省理工学院&#xff08;MIT&#xff09;继续维护和发展的一个应用程序开发平台。 App Inventor 的主要特点和用途如下&#xff1a; 什么是 App Inventor&#xff1f; App Inventor 是一个基于 W…

uni-app基础框架搭建(vue3+ts+vite)

1.基础准备 uni-app官网uni-app,uniCloud,serverless,环境安装,创建uni-app,自定义模板,国内特殊情况,更新依赖到指定版本,运行、发布uni-app,运行并发布快应用,运行并发布快应用(webview),运行并发布快应用(webview)-华为,cli创建项目和HBuilderX可视化界面创https://uniapp.…

中科数安 | 透明加密防泄密系统!如何有效防止企业内部核心数据资料外泄?

中科数安提供的透明加密防泄密系统是一种专为企业设计的数据保护解决方案&#xff0c;它通过以下关键特性有效防止企业内部核心数据资料外泄&#xff1a; PC地址&#xff1a;——www.weaem.com 自动智能透明加密&#xff1a;系统能够在操作系统级别无缝集成&#xff0c;对指定类…