当前位置: 首页 > article >正文

从LSB到MSB:位平面分割在图像隐写与压缩中的实战解析

1. 什么是位平面分割第一次听说位平面分割这个词时我也是一头雾水。直到有一天我在处理一张老照片时发现即使删除了某些数据照片看起来依然清晰这才恍然大悟。位平面分割Bit-Plane Slicing就像给图像做CT扫描让我们能一层层剖析数字图像的内部结构。在数字图像中每个像素的灰度值通常用8位二进制表示。比如数值128对应二进制10000000数值255对应11111111。位平面分割就是把每个像素的8个二进制位拆分开来形成8个独立的位平面。第0位平面LSB包含所有像素的最低位第7位平面MSB包含最高位。举个例子假设我们有个4x4的微型图像像素值如下192 128 64 32 224 160 96 16 240 176 112 8 248 184 120 0它的第7位平面MSB会是1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0而第0位平面LSB则是0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 02. 位平面的可视化实践纸上谈兵不如动手实践。让我们用Python和OpenCV来实际看看各个位平面的样子。我最近在处理一批医学影像时这个技术帮了大忙。import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图像 image cv2.imread(brain_scan.jpg, cv2.IMREAD_GRAYSCALE) plt.figure(figsize(10,5)) plt.imshow(image, cmapgray) plt.title(原始图像) plt.show() # 位平面分割函数 def extract_bit_plane(img, bit_pos): return (img bit_pos) 1 # 可视化所有位平面 plt.figure(figsize(15,10)) for i in range(8): plane extract_bit_plane(image, i) * 255 plt.subplot(2,4,i1) plt.imshow(plane, cmapgray) plt.title(f位平面 {i}) plt.tight_layout() plt.show()运行这段代码后你会发现一个有趣的现象高位平面6、7看起来几乎就是原图的简化版包含了主要轮廓而低位平面0、1则像是随机噪点。这就是为什么在图像压缩时我们可以放心地舍弃部分低位平面。3. 图像隐写术实战去年我帮朋友设计了一个有趣的生日彩蛋就是在照片里藏了一段祝福语。这就是图像隐写术的典型应用。原理很简单把秘密信息藏在人眼不敏感的低位平面中。假设我们要隐藏字母AASCII码65二进制01000001到一张图片中def embed_message(img, msg): # 将消息转换为二进制 binary_msg .join(format(ord(c), 08b) for c in msg) msg_len len(binary_msg) # 检查图像容量 if msg_len img.size: raise ValueError(消息太长图片容量不足) # 将消息嵌入到LSB flat_img img.flatten() for i in range(msg_len): flat_img[i] (flat_img[i] 0xFE) | int(binary_msg[i]) return flat_img.reshape(img.shape) # 嵌入消息 secret_img embed_message(image, Happy Birthday!) cv2.imwrite(secret.png, secret_img)提取消息时也很简单def extract_message(img, msg_length): flat_img img.flatten() binary_msg for i in range(msg_length * 8): # 每个字符8位 binary_msg str(flat_img[i] 1) # 将二进制转换为字符串 msg for i in range(0, len(binary_msg), 8): byte binary_msg[i:i8] msg chr(int(byte, 2)) return msg # 提取消息 hidden_msg extract_message(cv2.imread(secret.png, 0), 15) print(f隐藏的消息是: {hidden_msg})不过要注意这种基础方法安全性不高。在实际项目中我们通常会结合加密算法先加密消息再嵌入同时使用更复杂的嵌入策略比如随机像素选择或频域变换。4. 图像压缩中的位平面应用上个月我处理一批监控摄像头素材时发现原始视频太大存储空间告急。这时位平面压缩技术就派上用场了。原理很简单舍弃对视觉效果影响小的低位平面。让我们做个实验看看舍弃不同位平面后的图像质量def compress_image(img, keep_bits): mask 0xFF (8 - keep_bits) # 保留高keep_bits位 return img mask # 测试不同保留位数 plt.figure(figsize(15,5)) for i, bits in enumerate([8,7,6,5,4]): compressed compress_image(image, bits) plt.subplot(1,5,i1) plt.imshow(compressed, cmapgray) plt.title(f保留{bits}位) plt.tight_layout() plt.show()从实验结果看保留6位时图像质量几乎无损但数据量减少了25%保留5位时开始出现明显色带但某些监控场景仍可接受。我在实际项目中会根据应用场景做权衡医疗影像必须保留全部8位监控视频可保留5-6位缩略图保留4位就足够5. 进阶技巧与注意事项经过多个项目实践我总结出几个关键经验隐写容量计算每个像素的LSB可藏1bit数据。800x600的图片理论上可藏60KB数据但实际要考虑鲁棒性建议不超过理论值的50%。压缩质量评估不要只看PSNR指标还要考虑def quality_metrics(original, compressed): mse np.mean((original - compressed) ** 2) psnr 10 * np.log10(255**2 / mse) ssim cv2.SSIM(original, compressed) return psnr, ssim混合位平面策略在医疗图像处理中我常使用非均匀位保留def adaptive_compress(img, thresholds[0.95, 0.85, 0.7]): planes [extract_bit_plane(img, i) for i in range(8)] # 根据区域重要性保留不同位数 result np.zeros_like(img) for i in range(8): importance cv2.Canny(planes[i]*255, 100, 200) mask importance np.percentile(importance, thresholds[i]*100) result | (planes[i] i) * mask return result常见问题排查隐写后图像出现明显伪影检查是否修改了高位平面压缩后图像出现色带尝试添加少量噪声平滑过渡提取的消息错误确认使用的位平面位置一致6. 实际项目案例分享去年参与的一个安防项目让我印象深刻。客户需要在监控视频中嵌入时间戳和摄像头ID但又不能影响视频质量。我们最终采用的方案是对每帧图像进行DCT变换在中频系数的最低2位嵌入信息使用AES加密嵌入内容设置校验码防止篡改核心代码如下def dct_embed(frame, message): # 分块DCT变换 blocks [frame[i:i8, j:j8] for i in range(0, frame.shape[0], 8) for j in range(0, frame.shape[1], 8)] # 加密消息 cipher AES.new(key, AES.MODE_EAX) encrypted, tag cipher.encrypt_and_digest(message) # 嵌入到DCT中频系数 msg_bits np.unpackbits(np.frombuffer(encrypted, dtypenp.uint8)) bit_idx 0 for block in blocks: dct_block cv2.dct(np.float32(block)) # 选择中频位置嵌入 for (i,j) in [(3,4),(4,3),(4,4)]: if bit_idx len(msg_bits): # 保留整数部分修改小数部分后两位 int_part int(dct_block[i,j]) frac_part dct_block[i,j] - int_part new_frac (int(frac_part*100) 0xFC) | (msg_bits[bit_idx]1 | msg_bits[bit_idx1]) dct_block[i,j] int_part new_frac/100 bit_idx 2 block[:] cv2.idct(dct_block) return frame, cipher.nonce, tag这个方案既保证了嵌入信息的隐蔽性又能抵抗常见的图像处理攻击。在项目验收时客户对效果非常满意。

相关文章:

从LSB到MSB:位平面分割在图像隐写与压缩中的实战解析

1. 什么是位平面分割? 第一次听说"位平面分割"这个词时,我也是一头雾水。直到有一天我在处理一张老照片时,发现即使删除了某些数据,照片看起来依然清晰,这才恍然大悟。位平面分割(Bit-Plane Sli…...

第5篇 | SOA实践启示录:从信号到服务,AUTOSAR的架构跃迁

2025年底,L2级辅助驾驶渗透率已接近60%,汽车正从“功能堆叠”走向“服务化”。AUTOSAR Adaptive平台是这场变革的技术底座。 SOME/IP服务接口详解 SOME/IP将服务接口分为三类: Method:请求-响应式操作(如SetTargetTe…...

大型欧姆龙PLC NJ系列ST语言Ethercat总线24轴 伺服电池生产线欧姆龙PLC程序大...

大型欧姆龙PLC NJ系列ST语言Ethercat总线24轴 伺服电池生产线欧姆龙PLC程序大型程序NJ系列 ST语言EtherCat总 线控制24个伺服轴大型程序电池生产线 包括PLC NJ-1400和威纶通触摸屏程序 PLC通过EtherCat总线连接24个IS620N伺服 伺服轴已经写好FB块,可以直接复制粘贴 …...

第4篇 | 功能安全的底层悖论:AUTOSAR的安全机制真的足够安全吗?

ISO 26262要求ASIL C和D等级的系统必须检测:定时和执行故障、内存故障、信息交换故障。AUTOSAR 4.x提供了看门狗、E2E保护、内存分区等机制,但仍有盲区。 定时故障检测的盲区 AUTOSAR的Watchdog Manager可以监控任务是否“卡死”(长时间不喂狗),但它无法检测任务的无限期阻…...

基于Carsim与Simulink联合仿真的汽车ESP系统单侧双轮制动控制模型与说明

汽车ESP系统仿真建模,基于carsim与simulink联合仿真做的联合仿真,采用单侧双轮制动的控制方法。 有完整的模型和说明 汽车电子稳定程序(ESP)就像车辆的"防上头助手",关键时刻一把拽住快要失控的车身。但要让…...

LeetCode 最长回文子串:python 题解苑

1 实用案例 1.1 表格样式生成 本示例用于生成包含富文本样式与单元格背景色的Word表格文档。 模板内容: 渲染代码: # python-docx-template/blob/master/tests/comments.py from docxtpl import DocxTemplate, RichText # data: python-docx-template/bl…...

OpenFace 2.2.0:如何用开源工具包实现精准面部行为分析?

OpenFace 2.2.0:如何用开源工具包实现精准面部行为分析? 【免费下载链接】OpenFace OpenFace – a state-of-the art tool intended for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation. …...

Legacy-iOS-Kit:终极iOS降级与越狱完整指南

Legacy-iOS-Kit:终极iOS降级与越狱完整指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你是否有一…...

2026 AI 技术十大趋势:大模型、Agent 与边缘智能的全面爆发

前言2026 年,人工智能技术迎来前所未有的爆发式发展。从大模型能力的持续突破,到 AI Agent 的广泛应用,再到边缘智能的普及,AI 正在重塑每一个行业。一、大模型进入百万上下文时代2026 年,主流大模型的上下文窗口已突破…...

Zotero SciPDF插件终极指南:3步实现文献PDF自动下载的完整方案

Zotero SciPDF插件终极指南:3步实现文献PDF自动下载的完整方案 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 你是否曾因找不到论文PDF而焦虑&#xff1…...

Go赋值操作的关键细节

一、: 短变量声明的细节1.作用域规则2.重复声明规则3类型推断二、 赋值操作的细节1.类型必须匹配2.多重赋值特性三、 零值初始化细节1.Go为所有类型提供零值四、指针赋值的细节1.基本指针操作理解这段代码的关键在于搞清楚两个概念:普通变量、指针变量,…...

Java生产者消费者模式实战解析

Java生产者消费者模式实战解析异步模式传统版改进版阻塞队列异步模式 传统版 异步模式之生产者/消费者: class ShareData {private int number 0;private Lock lock new ReentrantLock();private Condition condition lock.newCondition();public void increm…...

linux-内核结构体

vma结构体定义在include/linux/mm_types.h中。 每一段(比如代码段、堆、栈)都由一个vma结构体来描述。 它记录了这段内存的起止地址、权限(读写执行)以及背后的存储介质(是匿名内存还是映射了文件)。 权限隔…...

告别电脑噪音!5步掌握免费风扇控制软件FanControl

告别电脑噪音!5步掌握免费风扇控制软件FanControl 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fan…...

C3D行为识别(一):UCF101视频数据集预处理实战与优化

1. UCF101数据集:行为识别的黄金标准 第一次接触行为识别任务时,我面对五花八门的视频数据集简直挑花了眼。经过多次实践对比,UCF101始终是我最推荐新手入门的"教科书级"数据集。这个包含101类人类动作的经典数据集,就像…...

Fan Control:Windows风扇控制终极指南,告别噪音与高温烦恼![特殊字符]

Fan Control:Windows风扇控制终极指南,告别噪音与高温烦恼!🔥 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址…...

如何快速获取百度网盘提取码:开源工具的终极实战指南

如何快速获取百度网盘提取码:开源工具的终极实战指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗?每次遇到需要密码的资源,你都要在多个网页间来…...

GenomicSEM实战指南:从GWAS摘要数据到复杂遗传模型的完整解析

GenomicSEM实战指南:从GWAS摘要数据到复杂遗传模型的完整解析 【免费下载链接】GenomicSEM R-package for structural equation modeling based on GWAS summary data 项目地址: https://gitcode.com/gh_mirrors/ge/GenomicSEM 在基因组学研究中,…...

模拟量采集模块:农机作业监测,传感信号稳定采集

在工业自动化领域,模拟量采集模块是连接物理世界与数字系统的核心桥梁。它的本质是将温度、压力、流量等连续变化的物理量(模拟信号),精准地转换为计算机能识别的数字信号。一、关键技术实现:从物理世界到数字决策 信号采集与转换&#xff1a…...

模拟量采集模块:多点位同步采样,数据一致性更高

无论是车间里机床的振动监测,还是智慧大棚的土壤湿度采集,亦或是变电站的电压电流监测,都离不开它的身影。模拟量采集系列模块连接着现场连续变化的物理量,一边对接着可处理分析的数字系统,默默完成“信号翻译”的核心…...

物联网养殖环控系统:科技赋能,推动传统养殖向数字转型

一、方案概述 物联网养殖环控系统,依托物联网、传感器、大数据、无线通信等核心技术,针对畜禽、水产等各类养殖场景,构建“感知-传输-分析-控制-管理”全链路智能闭环,实现养殖环境多参数实时监测、自动精准调控、远程便捷管理&am…...

OpenClaw 微信部署避坑实操:多模式部署+常见故障速解(附部署包)

前言 在微信私域运营与自动化客服场景中,OpenClaw 可打通微信客户端与后端服务的通信链路,降低接入门槛,支持本地、云端等多环境部署,兼顾数据安全与连接稳定。本文聚焦部署细节与故障排查逻辑,适配中小企业业务落地&…...

揭开推挽电路的奥秘 —— 高效功率放大的经典架构

在模拟电子技术的长河中,推挽电路(Push-Pull Circuit)无疑是功率放大领域的里程碑式设计。它如同电子世界里的 “双人接力赛”,通过两个晶体管的协同工作,高效地完成信号放大任务,彻底改变了传统单管放大电…...

算法动画图解:让复杂逻辑“活”起来的可视化秘籍

还在为算法和数据结构的抽象逻辑感到头疼吗?静态的图文讲解难以形成深刻理解,自己写代码调试又耗时费力。 想让复杂的算法过程真正“活”起来、一目了然?推荐你试试**图码这个宝藏工具。它提供了超过60种数据结构和算法的交互式动画可视化**…...

JVM学习笔记(7) 第三部分 虚拟机执行子系统 第6章 类文件结构

文章目录第6章 类文件结构6.0 个人感悟6.1 概述6.2 无关性的基石6.3 Class类文件的结构6.3.1 魔数与版本号6.3.2 常量池6.3.3 访问标志6.3.4 类索引、父类索引与接口索引集合6.3.5 字段表集合6.3.6 方法表集合6.3.7 属性表集合代码编译的结果从本地机器码转变为字节码&#xff…...

Qwen-Image-2512-SDNQ Web服务实战:支持负面提示词的精准图像生成案例分享

Qwen-Image-2512-SDNQ Web服务实战:支持负面提示词的精准图像生成案例分享 你有没有试过这样的情景:输入“一只穿着西装的柴犬在咖啡馆写代码”,结果生成的图里柴犬手里多了个汉堡、背景里突然冒出三只猫、连咖啡杯都歪着放?不是…...

linux命令的使用、bash命令的使用、ctrl+r查看历史记录、tee命令

文章目录字母表示的含义定位光标移动相关命令inputrc和ctrl退格键为什么不删除单词呢查看文件的实际路径mkdir 已存在目录会覆盖么linux 常用的颜色文件名有特殊符号的时候查看历史命令-history查看历史命令-ctrlrtee命令tee命令写内容tee命令只能替换不能追加吗?记录一些不好…...

终极指南:如何在OPPO手机上配置Salt Player流体云实现多设备音乐无缝切换

终极指南:如何在OPPO手机上配置Salt Player流体云实现多设备音乐无缝切换 【免费下载链接】SaltPlayerSource Salt Player (A local music player trusted and chosen by hundreds of thousands of users) for Android Release, Feedback. 项目地址: https://gitc…...

TrafficMonitor插件系统:打造你的个性化Windows系统监控中心

TrafficMonitor插件系统:打造你的个性化Windows系统监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 你是否厌倦了Windows任务栏上分散的系统监控工具&#x…...

从YOLO到餐桌:构建校园食堂智能结算系统的实战指南

1. 为什么选择YOLO做食堂智能结算? 在校园食堂这种特殊场景下,菜品识别面临着诸多挑战:餐盘堆叠造成的遮挡、反光餐具带来的光线干扰、相似菜品的细微差异(比如青椒炒肉和土豆炒肉)。传统图像处理方法需要针对每种菜品…...