【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.rhkb.cn/news/342678.html

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

相关文章

SpringBoot实现发送邮件功能

目录 一、开启邮件服务 二、导入pom依赖 三、配置yml文件 四、发送邮件 4.1、发送文字邮件 4.2、发送html邮件 4.3、发送附件邮件 4.4、发送图片邮件 一、开启邮件服务 这里拿QQ邮箱举例。 翻到下面进行开启,之后获取授权码。 二、导入pom依赖 <dependency><…

kotlin 调用java的get方法Use of getter method instead of property access syntax

调用警告 Person.class public class Person {private String name;Person(String name) {this.name name.trim();}public String getName() {return name;}public void setName(String name) {this.name name;}public String getFullName() {return name " Wang&quo…

【漏洞复现】用友NC downCourseWare 任意文件读取漏洞

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具&#xff0c;用友NC提供了一系列业务管理模块&#xff0c;包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等&#xff0c;帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC …

使用python优雅的将PDF转为Word

使用python优雅的将PDF转为Word 先装这个优雅的库 pip install pdf2docx然后运行下面优雅的代码&#xff0c;将pdf路径和docx路径修改 from pdf2docx import Converter # path pdf_file C:\\Users\\phl\\Desktop\\软件工程期末\\软件工程模拟试题5.pdf docx_file C:\\User…

Python 识别图片形式pdf的尝试(未解决)

想识别出pdf页面右下角某处的编号。pdf是图片形式页面。查了下方法&#xff0c;有源码是先将页面提取成jpg&#xff0c;再用pytesseract提取图片文件中的内容。 直接用图片来识别。纯数字的图片&#xff0c;如条形码&#xff0c;可识别。带中文的不可以&#xff0c;很乱。 识别…

pESC-HIS是什么,怎么看?-实验操作系列-2

01 典型的pESC-HIS质粒遗传图谱 02 介绍 质粒类型&#xff1a;酿酒酵母蛋白表达载体 表达水平&#xff1a;高拷贝 诱导方法&#xff1a;半乳糖 启动子&#xff1a;GAL1和GAL10 克隆方法&#xff1a;多克隆位点&#xff0c;限制性内切酶 载体大小&#xff1a;6706bp 5 测…

国产工业级实时数据库

项目功能描述 Mars数据库的核心功能在于其能够高效地处理来自工业现场的大量传感器数据。它通过简化的可视化配置&#xff0c;允许用户轻松接入各种传感器&#xff0c;并进行数据记录和逻辑处理。Mars数据库在单机模式下支持高达120万个传感器信号的接入&#xff0c;而其分布式…

LeetCode 算法:合并区间c++

原题链接&#x1f517;&#xff1a;合并区间 难度&#xff1a;中等⭐️⭐️ 题目 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰…

C语言实现教学计划编制问题,Dev C++编译器下可运行(240606最新更新)

背景&#xff1a; 问题描述 大学的每个专业都要编制教学计划。假设任何专业都有固定的学习年限&#xff0c;每学年含两学期&#xff0c; 每学期的时间长度和学分上限都相等。每个专业开设的课程都是确定的&#xff0c;而且课程的开设时间的安排必须满足先修关系。每个课程的先…

搜索与图论:图中点的层次

搜索与图论&#xff1a;图中点的层次 题目描述参考代码 题目描述 输入样例 4 5 1 2 2 3 3 4 1 3 1 4输出样例 1参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e[N]…

Softing工业助力微软解锁工业数据,推动AI技术在工业领域的发展

一 概览 Softing作为全球先进工业通信解决方案供应商之一&#xff0c;与微软合作共同推出了众多工业边缘产品&#xff0c;以实现工业应用中OT和IT的连接。这些产品可在基于微软Azure云平台的IIoT解决方案中轻松集成和运行&#xff0c;并为AI解锁工业数据&#xff0c;还可通过A…

Android——热点开关演讲稿

SoftAP打开与关闭 目录 1.三个名词的解释以及关系 Tethering——网络共享&#xff0c;WiFi热点、蓝牙、USB SoftAp——热点(无线接入点)&#xff0c;临时接入点 Hostapd——Hostapd是用于Linux系统的软件&#xff0c;&#xff0c;支持多种无线认证和加密协议&#xff0c;将任…

Nginx实战:LUA脚本_环境配置安装

目录 一、什么是LUA脚本 二、Nginx中的LUA脚本 1、主要特点 2、用途 三、如何在nginx中使用LUA脚本 1、原生nginx 2、OpenResty 3、nginx lua配置验证 一、什么是LUA脚本 Nginx Lua 脚本是 Nginx 与 Lua 语言集成的结果&#xff0c;它允许你使用 Lua 语言编写Nginx 模块…

05-控制流(分支结构)

05-控制流(分支结构) 一、二路分支 程序中某一段代码需要满足一定的条件才会被执行。 if 语句&#xff1a;用于表达一种条件&#xff0c;如果条件满足则执行某个代码块。if-else 语句&#xff1a;用于表达一种条件&#xff0c;如果条件满足则执行某个代码块&#xff0c;否则…

带你了解消防安全与应急救援,2024北京消防展6月盛大开启

带你了解消防安全与应急救援&#xff0c;2024北京国际消防展6.26盛大开启 在日益关注安全问题的今天&#xff0c;消防安全与应急救援已经成为社会发展的重要一环。为了提高全民消防安全意识&#xff0c;推动应急救援技术的发展&#xff0c;2024年北京国际消防展将于6月26日盛大…

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测 目录 区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现QRCNN-GRU-…

0基础学习区块链技术——推演猜想

大纲 去中心预防篡改付出代价方便存储 在《0基础学习区块链技术——入门》一文中&#xff0c;我们结合可视化工具&#xff0c;直观地感受了下区块的结构&#xff0c;以及链式的前后关系。 本文我们将抛弃之前的知识&#xff0c;从0开始思考和推演&#xff0c;区块链技术可能是如…

暑期来临,AI智能视频分析方案筑牢防溺水安全屏障

随着夏季暑期的来临&#xff0c;未成年人溺水事故频发。传统的防溺水方式往往依赖于人工巡逻和警示标识的设置&#xff0c;但这种方式存在人力不足、反应速度慢等局限性。近年来&#xff0c;随着视频监控智能分析技术的不断发展&#xff0c;其在夏季防溺水中的应用也日益凸显出…

Vue3——实现word,pdf上传之后,预览功能(实测有效)

vue-office/pdf - npm支持多种文件(**docx、excel、pdf**)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。. Latest version: 2.0.2, last published: a month ago. Start using vue-office/pdf in your project by running npm i vue-office/pdf. There are …

kafka安装流程

安装kafka前需要安装zookeeper zookeeper安装教程 1.新建一个logs文件夹 2.修改配置文件 3.修改listeners参数 4.以管理员身份启动kafka服务 .\bin\windows\kafka-server-start.bat .\config\server.properties 如果报 输入行太长。 命令语法不正确。 解决方案如下&#x…