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

基于 DWT 的盲数字水印实现(嵌入与提取)

一、原理盲数字水印Blind Watermarking指提取水印时无需原始载体图像仅依靠含水印图像和密钥即可完成。DWT离散小波变换 将图像分解为LL低频近似分量能量集中稳定性强适合嵌入水印LH/HL/HH高频细节分量边缘/纹理不适合嵌入易失真嵌入逻辑修改 LL 分量的系数如奇偶性、幅度偏移隐藏水印信息提取逻辑对含水印图像做相同 DWT 分解从 LL 分量反推水印信息。二、完整 C# 实现使用 AForge.NET2.1 环境配置!-- NuGet 依赖 --PackageReferenceIncludeAForge.ImagingVersion2.2.5/PackageReferenceIncludeAForge.MathVersion2.2.5/2.2 核心类DwtBlindWatermark.csusingAForge.Imaging;usingAForge.Imaging.Filters;usingAForge.Math;usingSystem;usingSystem.Drawing;usingSystem.Drawing.Imaging;namespaceDwtWatermark{publicclassDwtBlindWatermark{// 配置参数嵌入/提取必须一致privateconststringWaveletNamehaar;// 小波基haar 计算最快privateconstintDecompositionLevels1;// DWT 分解层数1层足够privateconstdoubleEmbedStrength0.05;// 嵌入强度0.01~0.1平衡不可见性privateconstintWatermarkSize32;// 水印尺寸32x32 二值图/// summary/// 嵌入水印盲水印仅修改 LL 分量/// /summarypublicBitmapEmbedWatermark(Bitmapcarrier,Bitmapwatermark,intsecretKey){// 1. 预处理转为灰度图vargrayCarrierGrayscale.CommonAlgorithms.BT709.Apply(carrier);vargrayWatermarkGrayscale.CommonAlgorithms.BT709.Apply(watermark);// 2. 载体 DWT 分解ComplexImagecomplexCarrierComplexImage.FromBitmap(grayCarrier);complexCarrier.ForwardDWT(WaveletName,DecompositionLevels);Complex[,]llcomplexCarrier.Image;// LL 分量复数数组取实部// 3. 水印二值化并转为序列bool[,]watermarkBitsBinarizeWatermark(grayWatermark);intbitIndex0;// 4. 嵌入水印修改 LL 系数的奇偶性RandomrndnewRandom(secretKey);intstridell.GetLength(1);for(inty0;yll.GetLength(0);y){for(intx0;xll.GetLength(1);x){if(bitIndexWatermarkSize*WatermarkSize)break;// 随机选择 LL 系数增强安全性intrxrnd.Next(ll.GetLength(0));intryrnd.Next(ll.GetLength(1));doublecoeffll[rx,ry].Re;// 嵌入规则水印位 1 → 系数调整为奇数0 → 偶数boolwatermarkBitwatermarkBits[bitIndex/WatermarkSize,bitIndex%WatermarkSize];doublemodifiedCoeffcoeff;if(watermarkBit)modifiedCoeffMath.Ceiling(coeff)%20?coeffEmbedStrength:coeff;elsemodifiedCoeffMath.Floor(coeff)%21?coeff-EmbedStrength:coeff;ll[rx,ry]newComplex(modifiedCoeff,ll[rx,ry].Im);bitIndex;}}// 5. 逆 DWT 重构含水印图像complexCarrier.BackwardDWT(WaveletName,DecompositionLevels);returncomplexCarrier.ToBitmap();}/// summary/// 提取水印无需原始载体/// /summarypublicBitmapExtractWatermark(BitmapwatermarkedCarrier,intsecretKey){// 1. 预处理vargrayCarrierGrayscale.CommonAlgorithms.BT709.Apply(watermarkedCarrier);// 2. 含水印图像 DWT 分解ComplexImagecomplexCarrierComplexImage.FromBitmap(grayCarrier);complexCarrier.ForwardDWT(WaveletName,DecompositionLevels);Complex[,]llcomplexCarrier.Image;// 3. 提取水印比特bool[,]extractedBitsnewbool[WatermarkSize,WatermarkSize];RandomrndnewRandom(secretKey);intbitIndex0;for(inty0;yll.GetLength(0);y){for(intx0;xll.GetLength(1);x){if(bitIndexWatermarkSize*WatermarkSize)break;intrxrnd.Next(ll.GetLength(0));intryrnd.Next(ll.GetLength(1));doublecoeffll[rx,ry].Re;// 提取规则系数为奇数 → 1偶数 → 0extractedBits[bitIndex/WatermarkSize,bitIndex%WatermarkSize]Math.Abs(coeff%2)0.5;bitIndex;}}// 4. 比特数组转水印图像returnBitsToBitmap(extractedBits);}#region辅助方法// 水印二值化阈值 128privatebool[,]BinarizeWatermark(Bitmapwatermark){bool[,]bitsnewbool[WatermarkSize,WatermarkSize];BitmapresizednewResizeNearestNeighbor(WatermarkSize,WatermarkSize).Apply(watermark);for(inty0;yWatermarkSize;y)for(intx0;xWatermarkSize;x)bits[y,x]resized.GetPixel(x,y).R128;returnbits;}// 比特数组转图像privateBitmapBitsToBitmap(bool[,]bits){BitmapbmpnewBitmap(WatermarkSize,WatermarkSize);for(inty0;yWatermarkSize;y)for(intx0;xWatermarkSize;x)bmp.SetPixel(x,y,bits[y,x]?Color.White:Color.Black);returnbmp;}#endregion}}2.3 主程序测试Program.csusingSystem;usingSystem.Drawing;usingSystem.Drawing.Imaging;namespaceDwtWatermark{classProgram{staticvoidMain(string[]args){Console.WriteLine( DWT 盲数字水印测试 \n);// 1. 读取图像替换为你的路径BitmapcarriernewBitmap(carrier.jpg);// 载体图像如风景照BitmapwatermarknewBitmap(logo.png);// 水印图像32x32 二值图intsecretKey123456;// 密钥嵌入/提取必须一致varwatermarkernewDwtBlindWatermark();// 2. 嵌入水印Console.WriteLine(嵌入水印...);Bitmapwatermarkedwatermarker.EmbedWatermark(carrier,watermark,secretKey);watermarked.Save(watermarked.jpg,ImageFormat.Jpeg);Console.WriteLine(含水印图像保存至watermarked.jpg\n);// 3. 提取水印Console.WriteLine(提取水印...);Bitmapextractedwatermarker.ExtractWatermark(watermarked,secretKey);extracted.Save(extracted_watermark.jpg,ImageFormat.Jpeg);Console.WriteLine(提取的水印保存至extracted_watermark.jpg\n);// 4. 评估PSNR峰值信噪比30dB 说明不可见性好doublepsnrCalculatePSNR(carrier,watermarked);Console.WriteLine($载体与含水印图像的 PSNR:{psnr:F2}dB);Console.WriteLine((PSNR 30dB 表示水印不可见));Console.WriteLine(\n测试完成按任意键退出...);Console.ReadKey();}// 计算 PSNR评估不可见性staticdoubleCalculatePSNR(Bitmaporiginal,Bitmapcompressed){doublemse0;for(inty0;yoriginal.Height;y){for(intx0;xoriginal.Width;x){Colorc1original.GetPixel(x,y);Colorc2compressed.GetPixel(x,y);mseMath.Pow(c1.R-c2.R,2)Math.Pow(c1.G-c2.G,2)Math.Pow(c1.B-c2.B,2);}}mse/(original.Width*original.Height*3);return10*Math.Log10(255*255/mse);}}}三、参数说明参数作用建议值WaveletName小波基haar计算快稳定性好DecompositionLevelsDWT 分解层数1层数过多易失真EmbedStrength嵌入强度0.01~0.1越大鲁棒性越强但易失真secretKey密钥整数嵌入/提取必须一致参考 盲水印嵌入提取www.youwenfan.com/contentcsu/63122.html四、鲁棒性测试对含水印图像进行以下攻击验证水印是否可提取JPEG 压缩质量 50%→ 水印应仍可识别高斯噪声均值 0方差 0.01→ 轻微影响裁剪裁剪 10% 边缘→ 依赖 LL 分量仍可能提取旋转±5°→ 需结合几何校正本示例未实现可扩展。

相关文章:

基于 DWT 的盲数字水印实现(嵌入与提取)

一、原理 盲数字水印(Blind Watermarking)指提取水印时无需原始载体图像,仅依靠含水印图像和密钥即可完成。 DWT(离散小波变换) 将图像分解为: LL:低频近似分量(能量集中&#xff0c…...

如何高效获取网盘直链:8大平台的完整解决方案

如何高效获取网盘直链:8大平台的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...

RootlessJamesDSP:无Root环境下的Android全局音频处理方案解析

1. 项目概述:在无根环境中驯服音频的“魔法师”如果你是一个对手机音质有追求的安卓用户,或者是一个喜欢折腾音频处理插件的玩家,那么你很可能听说过或者用过 JamesDSP。它是一款功能强大的音频处理引擎,能够通过复杂的算法&#…...

交完Essay才发现Turnitin更新了AI检测?我是这么应对的

上学期我的一个朋友被约谈了。 教授发邮件说:"你的Essay和AI生成文本相似度过高,请来办公室解释。" 他确实用了AI——谁没用呢——但他也认真改写了好几遍。问题是,Turnitin在2025年更新了AI检测模型,现在它不只看词汇…...

WIZnet-EVB-Pico2开始,用MicroPython玩转以太网开发

大家好呀,好久没跟大家唠唠我最近捣鼓的嵌入式小玩意儿了! 这段时间一直在折腾 MicroPython 的网络开发,踩了不少 “入门劝退坑”,也挖到了个让我直呼 “相见恨晚” 的宝藏 ——​WIZnet EVB-Pico2 系列开发板​。说真的&#xf…...

ARM GICv4.1 GICD_TYPER2寄存器详解与虚拟化应用

1. GICD_TYPER2寄存器概述 GICD_TYPER2是ARM GICv4.1架构中引入的关键寄存器,属于中断控制器类型寄存器家族。作为GIC Distributor的一部分,它专门用于增强虚拟化场景下的中断管理能力。这个32位寄存器位于内存映射地址Dist_base 0x000C处,仅…...

重磅!移远通信旗下物联网智能品牌 艾络迅™ 正式发布

物联网技术正深刻重塑产业格局,智能化转型已成为企业核心竞争力的关键。然而,企业在推进物联网项目时普遍面临技术门槛高、开发周期长、系统对接难、全球连接复杂等核心挑战。为破解行业智能化转型难题,帮助更多企业提升物联网开发效率&#…...

我花三天实测了DeepSeek V4,发现它根本不是来跟GPT-4o打架的

2026年4月24号,DeepSeek V4发布。 同一天,GPT-5.5也发布了。 这不是巧合,这是宣战。 但测了三天之后,我发现一个反直觉的结论,DeepSeek V4的真正对手根本不是GPT-4o,也不是Claude 3.5。 它要干掉的&#xf…...

uniapp中获取APP应用签名信息

/*** 获取应用签名MD5* returns {Promise<unknown>}*/ function getAppSignatureMD5() {return new Promise((resolve) > {// 1. 环境检查if (typeof plus "undefined" || uni.getSystemInfoSync().platform ! "android") {resolve(null);return…...

Java基础全套教程(三)—— 控制语句、方法、递归算法

Java基础全套教程&#xff08;三&#xff09;—— 控制语句、方法、递归算法 本章是Java编程从基础语法走向逻辑编程的核心转折点。前面我们学习了变量、数据类型、运算符&#xff0c;只能实现简单的顺序执行代码。而真正的程序&#xff0c;需要具备判断能力、重复执行能力、代…...

宁波市新房装修推荐

好的&#xff0c;根据您的要求&#xff0c;我为您生成一篇关于宁波市新房装修的推荐文章&#xff0c;着重推荐宿迁市三色雨装饰材料有限公司的墙布产品&#xff0c;语言力求自然、真实&#xff0c;避免营销话术。宁波新房装修&#xff0c;墙面选择不妨多看看“三色雨”在宁波&a…...

码森防伪溯源系统:一站式构建产品信任桥梁,赋能品牌全流程数字化管理

在假冒伪劣产品屡禁不止、消费者对产品来源与真实性日益关注的今天&#xff0c;如何高效实现防伪、溯源、营销、管理一体化&#xff0c;已成为品牌方与技术开发者共同关注的核心问题。 防伪溯源系统&#xff0c;正是这样一套集低成本、易操作、强扩展性于一体的综合性解决方案。…...

ARM架构CNTHP_CTL_EL2寄存器详解与虚拟化应用

1. ARM架构中的CNTHP_CTL_EL2寄存器深度解析在ARMv8-A架构的虚拟化环境中&#xff0c;定时器管理是Hypervisor实现高效资源调度和时间隔离的关键组件。作为EL2特权级的物理定时器控制寄存器&#xff0c;CNTHP_CTL_EL2为虚拟化软件提供了精确的计时控制能力。本文将深入剖析该寄…...

LeetCode 1665.完成所有任务的最少初始能量:排序(贪心)

【LetMeFly】1665.完成所有任务的最少初始能量&#xff1a;排序(贪心) 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-initial-energy-to-finish-tasks/ 给你一个任务数组 tasks &#xff0c;其中 tasks[i] [actuali, minimumi] &#xff1a; actuali 是完…...

硬件项目规划:从确定性预测到适应性导航的思维重构

1. 项目概述&#xff1a;硬件项目规划的“信心危机”“计划失败就是计划失败”&#xff0c;这个标题乍一看像是一句绕口令&#xff0c;但当你身处一个硬件开发团队&#xff0c;尤其是负责ASIC、FPGA或复杂嵌入式系统时&#xff0c;这句话背后的沉重感会瞬间变得无比真实。我们常…...

2026年主流地图API AI功能开发与零代码工具横评

核心观点摘要 行业趋势判断&#xff1a;AI与零代码正深度融合地图API开发&#xff0c;推动位置智能从专业编码向业务自助快速演进&#xff0c;2026年主流平台将在多模态数据融合与行业化场景能力上形成分水岭。选型关键维度&#xff1a;需综合考量数据覆盖广度、模型智能水平、…...

PP 蜂窝板挤出成型核心原理与关键设备解析

PP 蜂窝板挤出成型核心原理与关键设备解析一、PP 蜂窝板材料特性与成型难点PP&#xff08;聚丙烯&#xff09;蜂窝板兼具质轻、高刚性、耐水防潮、可循环四大优势&#xff0c;在物流、建筑、车厢、包装领域替代传统实心板材趋势明显。 其成型难点集中在&#xff1a;蜂窝芯超薄、…...

基础模型全生命周期管理的混合架构实践与优化

1. 基础模型全生命周期管理的架构挑战基础模型&#xff08;Foundation Models&#xff09;正在重塑AI技术栈的每个环节&#xff0c;从预训练到推理部署的全生命周期管理面临前所未有的系统架构挑战。传统HPC&#xff08;高性能计算&#xff09;集群和云原生平台各自为政的局面&…...

AI-Native数据分析:43 次工具调用,蒸馏成 1 张可复用的知识卡片

很多人最近都在聊 AI-native 工作流, 也在聊"蒸馏"自己的知识库. 但聊得多, 真正落地的人少 —— 因为大家手里的 AI 工具大多停留在 "AI-enabled" 阶段: 一次性问答工具, 用完即弃, 每次重新对一遍口径.这篇文章想用一条真实的 InfiniSynapse 任务回放, 把…...

2026出海技术观察:云API接口迭代的能力边界与业务增量空间

摘要&#xff1a;2026年AI出海告别粗放扩张&#xff0c;底层技术适配能力成为竞争核心。云API接口迭代持续优化跨境对接、算力调度与合规适配体系&#xff0c;补齐传统出海技术短板&#xff0c;为企业全球化精细化运营提供坚实支撑。一、2026 AI出海新格局&#xff1a;底层接口…...

从AI概念到落地:传统AI与生成式AI的技术分野与实战选型

1. 从“谈AI色变”到“用AI解题”&#xff1a;我们到底在讨论什么&#xff1f;如果你最近两年没在火星上度假&#xff0c;那你肯定被“AI”这个词全方位轰炸过。从科技媒体的头条&#xff0c;到投资机构的报告&#xff0c;再到你手机里突然冒出的各种“智能”功能&#xff0c;A…...

基于Helm Chart在Kubernetes中部署docker-mailserver邮件服务器

1. 项目概述与核心价值最近在折腾自建邮件服务器&#xff0c;发现了一个宝藏项目&#xff1a;docker-mailserver。它把邮件服务里那些复杂的组件&#xff0c;比如 Postfix、Dovecot、SpamAssassin、ClamAV 这些&#xff0c;全都打包进了一个 Docker 镜像里&#xff0c;开箱即用…...

告别答辩PPT噩梦:百考通AI如何帮你高效搞定毕业答辩

写了大半年的论文&#xff0c;却在最后一步的答辩PPT上栽了跟头&#xff1f;这可能是许多毕业生的真实写照。 01 毕业季的隐形杀手&#xff1a;PPT焦虑症 五月&#xff0c;校园里的玉兰花开得正盛&#xff0c;图书馆的灯光却依然亮到深夜。论文查重通过了&#xff0c;导师点头…...

开源提示词库:提升AI协作效率的实战指南与核心设计解析

1. 项目概述&#xff1a;一个开源提示词库的价值与定位如果你也经常使用大型语言模型&#xff0c;无论是用于编程辅助、内容创作还是日常问答&#xff0c;那么你一定遇到过这样的困境&#xff1a;面对一个空白的输入框&#xff0c;明明心里有明确的需求&#xff0c;却不知道如何…...

DLP Pico技术与近眼显示系统设计解析

1. DLP Pico技术解析&#xff1a;微镜阵列如何重塑显示未来 在2014年&#xff0c;德州仪器(TI)推出了一项颠覆性的显示技术——基于DLP TRP架构的Pico芯片组。这项技术的核心是一块布满微小铝镜的芯片&#xff0c;每个微镜尺寸仅5.4微米&#xff0c;比人类头发直径的十分之一还…...

OpenClaw近一月版本更替讲解

如果你最近没追 OpenClaw 的更新&#xff0c;最容易产生一种错觉&#xff1a;它是不是又只是多接了几个模型、多加了几个花哨功能&#xff1f; 我看完最近一个月的变化后&#xff0c;感觉不是这样。 OpenClaw 这一个月真正值得关注的地方&#xff0c;不是“它更炫了”&#xff…...

如何使用日志实现业务全链路追踪

在现代分布式系统架构中&#xff0c;一个业务请求往往需要经过多个服务节点的协同处理&#xff0c;涉及网关、微服务、数据库、缓存、消息队列等多个组件。传统的日志记录方式通常局限于单个服务或模块&#xff0c;难以还原一个完整请求的流转路径&#xff0c;给问题排查、性能…...

AI智能体交互体验优化:从对话管理到个性化记忆的工程实践

1. 项目概述&#xff1a;从“Agent Experience”看智能体交互体验的演进最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“agent-experience”&#xff0c;作者是dhruvvsukhadia。光看这个名字&#xff0c;可能很多人会有点懵——这到底是做什么的&#xff1f;是开发AI智能…...

[STM32U3] 【每周分享】【STM32U385RG 测评】+串口发送、接收数据

上篇串口通讯只是打印叔数据&#xff0c;这篇更进一步&#xff0c;将串口发送什么&#xff0c;就打印什么出来 一、查看原理图&#xff0c;确定自己需要的串口信息 还是一样的串口1 二、开始配置软件 上面基础配置结束之后&#xff0c;增加DMA以及NVIC配置 时钟可以根据自…...

维他动力获5亿Pre-A轮启动人形研发;优必选与日立达成合作人形机器人赋能制造; 前小米高管创业工业通用具身大脑小雨智造获B+轮融资

1. 维他动力获5亿Pre-A轮启动人形研发牛喀网获悉&#xff0c;Vbot维他动力正式完成近5亿元Pre-A轮融资&#xff0c;创下当前消费级具身智能领域的最大单笔融资纪录&#xff0c;本轮由东方嘉富、华泰紫金、复星锐正联合领投&#xff0c;上汽旗下尚颀资本等机构参投。技术层面&am…...