基于DCT的数字水印算法

news2024/11/5 16:39:37

摘要

数字水印技术近年来得到了较大的发展,基于变换域的水印技术是目前研究的热点。数字水印是利用数字作品中普遍存在的冗余数据和随机性,把标识版权的水印信息嵌入到数字作品中,从而可以起到保护数字作品的版权或其完整性的一种技术。

一个有效的数字水印系统至少具备以下三个最基本的特性:1.安全性:数据信息隐藏于数据图像中,不是文件头中,文件格式的变换不应导致水印信息的丢失。2.隐蔽性:在数字图像作品中嵌入数字水印不会引起图像明显的降质,即含水印的图像与原始图像对人的感觉器官的刺激应该是无差别或差别很小,主观感觉变化很小。3.鲁棒性:是指在经历有意或无意的信号处理过程后,水印信息仍能保持完整性或仍能被准确鉴别。另外还有通用性、惟一性等特性。数字水印的基本应用领域是版权保护、隐藏标识、认证和安全不可见通信等。                                                  

本文提出了一种基于dct域的Matlab水印算法,实验结果表 明这种算法具有较好的性能,实现的水印具有不可见性,而且具有较好的鲁棒性。

关键词:数字水印;DCT变换;Matlab程序

目录

摘要

Abstract

引言

第一章   数字水印基本理论及其在通信工程中的应用

1.1数字水印的历史及国内外发展现状

1.2数字水印的定义和基本特点

1.3数字水印的一般模型

1.4各种数字水印算法

1.5数字水印技术的一些局限

第二章  可实现数字水印技术的高效实用工具——MATLAB

2.1 Matlab简介

2.2  Matlab的应用

2.3  Matlab函数介绍

第三章  离散余弦变换(DCT)算法介绍

3.1  离散余弦叶变换的简介

3.2  离散余弦变换水印嵌入算法

3.3  离散余弦变换水印提取算法

3.4  离散余弦变换水印算法原理框图

3.5分块的离散傅里叶变换

第四章   离散余弦变换(DCT)算法的MATLAB程序及运行结果比较

4.1  MATLAB程序

4.2  运行结果比较

4.3  实验结果总结分析

参考文献

  

引言

随着计算机网络通信技术的发展,信息媒体的数字化为信息的存取提供了极大的便利性,同时也显著提高了信息表达的效率和准确性;数据的交换和传输变成了一个相对简单的过程,人们借助于计算机、数字扫描仪、打印机等电子设备可以方便、迅速地将数字信息传输到任何地方。

随之而来的副作用是这些数字形式的数据文件或作品使另有意图的个人和团体有可能在没有得到作品所有者的许可下复制和传播有版权的信息,例如,现代盗版者仅需轻点几下鼠标就可以获得与原版一样的复制品,并以此获取暴利;而一些具有特殊意义的信息,如涉及司法诉讼、政府机要等信息,则会遭到恶意攻击和篡改伪造等等。这一系列数字化技术本身的可复制和广泛传播的特性所带来的负面效应,已成为信息产业健康持续发展的一大障碍,目前,数字媒体的信息安全、知识产权保护和认证问题变得日益突出,且已成为数字世界中一个非常重要和紧迫的议题。

密码技术是信息安全技术领域的主要传统技术之一,它是基于香农信息论及密码学理论的技术,现有的数字内容的保护多采用加密的方法来完成,即首先将多媒体数据文件加密成密文后发布,使得其在传递过程中出现的非法攻击者无法从密文获取机要信息,从而达到版权保护和信息安全的目的。但这并不能完全解决问题:一方面加密后的文件因其不可理解性而妨碍多媒体信息的传播;另一方面多媒体信息经过加密后容易引起攻击者的好奇和注意,并有被破解的可能性,而且当信息被接收并进行解密后,所有加密的文档就与普通文档一样,将不再受到保护,无法幸免于盗版。换言之,密码学只能保护传输中的内容,而内容一旦解密就不再有保护作用了。

因此,迫切需要一种替代技术或是对密码学进行补充的技术,它应该甚至在内容被解密后也能够继续保护内容。这样,人们提出了一种新兴的信息隐藏的概念——数字水印(digital watermarking)。数字水印技术是目前信息安全技术领域的一个新方向,是一种可以在开放网络环境下保护版权和认证来源及完整性的新型技术,创作者的创作信息和个人标志通过数字水印系统以人所不可感知的水印形式嵌入在多媒体中,人们无法从表面上感知水印,只有专用的检测器或计算机软件才可以检测出隐藏的数字水印。

在多媒体中加入数字水印可以确立版权所有者、认证多媒体来源的真实性、识别购买者、提供关于数字内容的其它附加信息、确认所有权认证和跟踪侵权行为。它在篡改鉴定、数据的分级访问、数据跟踪和检测、商业和视频广播、Internet数字媒体的服务付费、电子商务认证鉴定等方面具有十分广阔的应用前景。自1993年以来,该技术已经引起工业界的浓厚兴趣,并日益成为国际上非常活跃的研究领域。数字水印技术还处于发展之中,数字水印技术未来的通信应用市场将会更加广阔。

第一章   数字水印基本理论及其在通信工程中的应用

1.1数字水印的历史及国内外发展现状

一般认为,数字水印起源于古老的水印技术。这里提到的“水印”技术是指传统水印,即印在传统载体上的水印,如纸币上的水印、邮票股票上的水印等,将它们对着光照我们可以看到其中隐藏的图像。这些传统的“水印”用来证明其内容的合法性。大约700年前,纸水印便在意大利的Fabriano镇出现,这些纸水印是通过在纸模中加细线模板制造出来的。纸在存在细线的区域会略微薄一些,这样也会更透明一些。到了18世纪,在欧洲和美国制造的产品中,纸水印已经变得相当的实用了。水印被用作商标,记录纸张的生产日期,显示原始纸片的尺寸。大约也是这个时期,水印开始用于钱和其它文件的防伪措施。纸水印的存在既不影响美感,也不影响纸张的使用。中国是世界上最早发明造纸术的国家,也是最早使用纸币的国家。宋真宗在位时(公元998-1021年),四川民间发明了“交子”。交子正面都有票人的印记,有密码画押,票面金额在使用时填写,可以兑换,也可以流通。可以说交子上的印文既包含水印技术也包含消隐技术。

事实上,正是由于纸张水印和消隐技术的特性才真正地启发了在数字环境下水印的首次使用。数字水印的产生最早可追溯到1954年,它的产生源于对数字产品的保护。在1954年,Muzak公司的埃米利.希姆布鲁克(Emil Hembrooke)为带有水印的音乐作品申请了一项专利。在这项专利中,通过间歇性地应用中心频率为1kHz的窄带陷波器,认证码就被插入到音乐中。该频率上能量的缺失表征使用了陷波滤波器,而缺失的持续时间通常被编码为点或长划,此认证码使用了莫尔斯电码。此系统被Muzak公司用到了1984年前后。

 从那时起,人们开始发展大量的水印技术并由此展开了各种各样的应用,人们对于嵌入信号的兴趣就这样持续了35年,此期间水印被应用于广告认证和设备控制上。例如,在1979年,Szepanski描述了一种机械探测模式,它可以用在文件上起到防伪效果。九年后Holt等人阐述了一种在音频信号中嵌入认证码的方法。但这时的数字水印只是作为一种版权认证的工具,并没有成为一门科学。直到20世纪90年代初期,数字水印才作为一个研究课题受到了足够的重视。1993年A. Z. Tirkel等所撰写的“Electronic water mark”一文中首次使用了“water mark”这一术语。这一命名标志着数字水印技术作为一门正式研究学科的诞生。后来二词合二为一就成为“watermark”,而现在一般都使用“digital watermarking”一词来表示“数字水印”。现在我们所说的“水印”一般指的都是数字水印。

数字水印技术自1993年被提出以来,由于其在信息安全和经济上的重要地位,发展较为迅速,世界各国的科研机构、大学和商业集团都积极的参与或投资支持此方面的研究。如美国财政部、美国版权工作组、美国洛斯阿莫斯国家实验室、美国海陆空研究实验室、欧洲电信联盟、德国国家信息技术研究中心、日本NTT信息与通信系统研究中心、麻省理工学院、南加利福尼亚大学、剑桥大学、瑞士洛桑联邦工学院、微软公司、朗讯贝尔实验室等都在进行这方面的研究工作。IBM公司、日立公司、NEC公司、Pioneer电子公司和Sony公司等五家公司还宣布联合研究基于信息隐藏的电子水印。

国际学术界陆续发表了许多关于数字水印技术方面的文章,几个有影响的国际会议(例如IEEE,SPIE等)及一些国际权威学术期刊(例如Signal Processing等)相继出版了有关数字水印技术的专题。1996年5月,国际第一届信息隐藏学术讨论会(International Information Hiding Workshop, IHW)在英国剑桥牛顿研究所召开,至今该研讨会已举办了五届。在1999年第三届信息隐藏国际学术研讨会上,数字水印成为主旋律,全部33篇文章中有18篇是关于数字水印的研究。1998年的国际图像处理大会(ICIP)上,还开辟了两个关于数字水印的专题讨论。由Martin Kutter创建的WatermarkingWorld已成为一个关于数字水印的著名网上论坛。

在20世纪90年代末期一些公司开始正式地销售水印产品。在图像水印方面,美国的Digimarc公司率先推出了第一个商用数字水印软件,而后又以插件形式将该软件集成到Adobe公司的Photoshop和Corel Draw图像处理软件中。该公司还推出了媒体桥(Mediabridge)技术,利用这项技术用户只要将含有Digimarc水印信息的图片放在网络摄像机(web camera)前,媒体桥技术就可以直接将用户带到与图像内容相关联的网络站点。AlpVision公司推出的LavelIt软件,能够在任何扫描的图片中隐藏若干字符,这些字符标记可以作为原始文件出处的证明,也就是说,任何电子图片,无论是用于Word文档、出版物,还是电子邮件或者网页,都可以借助于隐藏的标记知道它的原始出处。AlpVision的SafePaper是专为打印文档设计的安全产品,它将水印信息隐藏到纸的背面,以此来证明该文档的真伪。SafePaper可用于证明一份文件是否为指定的公司或组织所打印,如医疗处方、法律文书、契约等,还可以将一些重要或秘密的信息,如商标、专利、名字、金额等,隐藏到数字水印中。欧洲电子产业界和有关大学协作开发了采用数字水印技术来监视复制音像软件的监视系统,以防止数字广播业者的不正当复制的行为。该开发计划名称为《TALISMAN(Tracing Authors’ Rights by Labeling Image Service and Monitoring Access Networks)》。此开发计划作为欧洲电子产业界等组织的欧共体项目于1995年9月开始进行,1998年8月结束,法国、比利时、德国、西班牙、意大利和瑞士等在内的11个通信与广播业者、研究单位和大学参加。

随着技术信息交流的加快和水印技术的迅速发展,国内一些研究单位也已逐步从技术跟踪转向深入系统研究,各大研究所和高校纷纷投入数字水印的研究,其中比较有代表性的有哈尔滨工业大学的孙圣和、牛夏牧、陆哲明等,天津大学的张春田、苏育挺等,北京邮电大学的杨义先、钮心忻等,中国科学院自动化研究所的刘瑞祯、谭铁牛等,他们是国内较早投入水印技术研究且取得较好成绩的科研单位。我国于1999年12月11日,由北京电子技术应用研究所组织,召开了第一届信息隐藏学术研讨会(CIHW),至今已成功的举办了四届,很大程度地推进了国内水印技术的研究与发展。同时,国家对信息安全产业的健康发展也非常的重视,在2003年的《科技型中小企业技术创新基金若干重点项目指南》中,明确指出了对于“数字产品产权保护(基于数字水印、信息隐藏、或者网络认证等先进技术)”和“个性化产品(证件)的防伪(基于水印、编码、或挑战应答等技术)”等多项防盗版和防伪技术予以重点支持。现在国内已经出现了一些生产水印产品的公司,其中比较有代表性的是由中科院自动化研究所的刘瑞祯、谭铁牛等人于2002年在上海创办了的一家专门从事数字水印、多媒体信息和网络安全、防伪技术等软硬件开发的公司——上海阿须数码技术有限公司,公司现从事数字证件、数字印章、PDF文本、分块离散图像、视频、网络安全等多方面数字水印技术的研究,现在这家公司已申请了一项国际和三项国家数字水印技术专利。虽然数字水印在国内的应用还处于初级阶段,但水印公司的创办使得数字水印技术在国内不仅仅只停留在理论研究的层面上,而是从此走上了实用化和商业化的道路,这样会更加推动国内水印技术的蓬勃发展,为国内的信息安全产业提供有效的、安全的保障。

1.2数字水印的定义和基本特点

目前虽有许多文献讨论有关数字水印技术的问题,但数字水印始终没有一个明确统一的定义。Cox等把水印定义为“不可感知地在作品中嵌入信息的操作行为”;杨义先等认为“数字水印是永久镶嵌在其它数据(宿主数据)中具有鉴别性的数字信号或模式,而且并不影响宿主数据的可用性”。我个人认为后一种说法更为确切一些,因为可见水印是可以感知到的,但它的存在并不影响宿主数据的可用性,嵌入的水印同样可以起到鉴别的目的。

不同的应用对数字水印的要求不尽相同,一般认为数字水印应具有如下特点:

(1) 不可见性。在宿主数字媒体中嵌入一定数量的附加信息后,不能引起明显的将质现象,隐藏的数据不易觉察,即无法人为的看见或听见。

(2) 稳健性。数字水印必须对施加于宿主媒体的变化或操作具有一定的免疫力,不能因为某种变换操作导致水印信息的丢失,即水印被迫坏,从而失去商用价值。常用的变换操作有:信道噪声、滤波、有损压缩、重采样等。

(3) 安全性。数字水印应该能够抵抗各种蓄意的攻击,同时应很难被他人复制和伪造。

(4) 有效性。水印提取算法应高效,提取出的水印应能唯一标识版权所有者。

(5)抗窜改性。 与抗毁坏的鲁棒性不同,抗窜改性是指水印一旦嵌入到载体中,攻击者就很难改变或伪造。鲁棒性要求高的应用,通常也需要很强的抗窜改性,在版权保护中,要达到好的抗窜改性是比较困难的。

1.3数字水印的一般模型

   数字水印的一般模型如图1-3-1所示

 

1-3-1 数字水印嵌入过程

频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有DWT、DCT、DFT、WP和分形。然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。

  1-3-2 数字水印检测/抽取过程

如上图1.3.2所示,频域法检测水印的原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结束点。

1.4各种数字水印算法

近几年来数字水印技术研究取得了很大的进步,见诸于文献的水印算法很多,这里对一些典型的算法进行了分析。

1. 空间域算法

数字水印直接加载在原始数据上,还可以细分为如下几种方法:

(1) 最低有效位方法(LSB)

这是一种典型的空间域数据隐藏算法,L.F.Tumer与R.G.VanSchyadel等先后利用此方法将特定的标记隐藏于数字音频和数字图像内。该方法是利用原始数据的最低几位来隐藏信息(具体取多少位,以人的听觉或视觉系统无法察觉为原则)。LSB方法的优点是有较大的信息隐藏量,但采用此方法实现的数字水印是很脆弱的,无法经受一些无损和有损的信息处理,而且如果确切地知道水印隐藏在几位LSB中,数字水印很容易被擦除或绕过。

(2) Patchwork方法及纹理块映射编码方法

这两种方法都是Bender等提出的。Patchwork是一种基于统计的数字水印,其嵌入方法是任意选择N对图像点,在增加一点亮度的同时,降低另一点的亮度值。该算法的隐藏性较好,并且对有损的JPEG和滤波!压缩和扭转等操作具有抵抗能力,但仅适用于具有大量任意纹理区域的图像,而且不能完全自动完成。

2.变换域算法

基于变换域的技术可以嵌入大量比特数据而不会导致可察觉的缺陷,往往采用类似扩频图像的技术来隐藏数字水印信息。这类技术一般基于常用的图像变换,基于局部或是全部的变换,这些变换包括离散余弦变换(DCT)、小波变换(WT)、傅氏变换(FT或FFT)以及哈达马变换(Hadamardtransform)等等。其中基于分块的DCT是最常用的变换之一,现在所采用的静止图像压缩标准JPEG也是基于分块DCT的。最早的基于分块DCT的一种数字水印技术方案是由一个密钥随机地选择图像的一些分块,在频域的中频上稍稍改变一个三元组以隐藏二进制序列信息。选择在中频分量编码是因为在高频编码易于被各种信号处理方法所破坏,而在低频编码则由于人的视觉对低频分量很敏感,对低频分量的改变易于被察觉。该数字水印算法对有损压缩和低通滤波是稳健的。另一种DCT数字水印算法是首先把图像分成8×8的不重叠像素块,在经过分块DCT变换后,即得到由DCT系数组成的频率块,然后随机选取一些频率块,将水印信号嵌入到由密钥控制选择的一些DCT系数中。该算法是通过对选定的DCT系数进行微小变换以满足特定的关系,以此来表示一个比特的信息。在水印信息提取时,则选取相同的DCT系数,并根据系数之间的关系抽取比特信息。除了上述有代表性的变换域算法外,还有一些变换域数字水印方法,它们当中有相当一部分都是上述算法的改进及发展,这其中有代表性的算法是I.Podichuk和ZengWenjun提出的算法。他们的方法是基于静止图像的DCT变换或小波变换,研究视觉模型模块返回数字水印应加载在何处及每处可承受的JND(JustNoticeableDifference,恰好可察觉差别)的量值(加载数字水印的强度上限),这种水印算法是自适应的。

3.NEC算法

该算法由NEC实验室的Cox[等人提出,该算法在数字水印算法中占有重要地位,其实现方法是:首先以密钥为种子来产生伪随机序列,该序列具有高斯N(0,1)分布,密钥一般由作者的标识码和图像的哈希值组成,其次对图像做DCT变换,最后用伪随机高斯序列来调制(叠加)该图像除直流分量外的1000个最大的DCT系数。该算法具有较强的鲁棒性、安全性、透明性等。由于采用特殊的密钥,故可防止IBM攻击,而且该算法还提出了增强水印鲁棒性和抗攻击算法的重要原则,即水印信号应该嵌入源数据中对人感觉最重要的部分,这种水印信号由独立同分布随机实数序列构成,且该实数序列应具有高斯分布N(0,1)的特征。随后Podilchuk等利用人类视觉模型又对该算法进行了改进,从而提高了该算法的鲁棒性!透明性等。

4.其他一些水印算法

近年来利用混沌映射模型实现数字水印、保密通信等成为混沌应用研究的热点。特别是自从Cox等借用通信技术中的扩频原理将水印信号嵌入到一些DCT变换系数或者多层分解的小波变换系数以来,人们已经提出了一些混沌数字水印方法。水印的嵌入与检测是基于人类视觉系统(HVS)的亮度掩蔽特性和纹理掩蔽特性,折衷水印的不可见性和鲁棒性之间的矛盾.结果表明:该方法嵌入的水印具有不可见性和鲁棒性,并且这种基于密钥的混沌水印方法更好的抗破译性能。

目前比较流行的还有一种基于盲水印检测的DWT算法,该算法首先对原始图像进行小波变换,根据人类具有的视觉掩蔽特性对低频分量进行一定的量化,同时可不影响视觉效果,并对作为水印的图像进行压缩和二值化处理,形成一维的二值序列,根据二值序列的值对上述量化后的原始信号的低频分量进行视觉阈值范围内允许的修改,从而实现水印的嵌入。水印提取过程是对含有水印的图像进行小波变换,对低频分量同样进行量化处理,为了增大算法的安全性,可以对水印形成的二值0,1序列在嵌入前进一步进行伪随机序列调制,相应的在水印提取过程需要增加用伪随机序列解调的步骤。这样不知道伪随机序列的攻击者即使推测出水印的嵌入规律,也无法提取水印,大大增加了水印系统的透明性和鲁棒性。

1.5数字水印技术的一些局限

1.不知道能够隐藏多少位。

尽管非常需要知道指定大小载体信息上可以隐藏多少比特的水印信息,但这个问题还没有得到圆满解决。事实上,对给定尺寸的图像或者给定时间的音频,可以可靠隐藏信息量的上界,目前还不清楚。对图像水印,只能说目前使用的算法可以隐藏几百比特位的水印信息。

2.还没有真正健壮的盲图像水印算法。

对图像水印鲁棒性还是个问题,目前还没有能够在经过所有普通图像处理变换后,仍能幸免的盲水印算法。尤其是能够抵抗几何处理的攻击,被认为是很难实现的目标。

3.所有者能去除标记。

迄今为止提出的所有盲图像水印,实际上都是可逆的。已知水印的准确内容!以及水印的嵌入和检测算法,则总能在没有严重损坏资料的前提下,使水印不可读取。目前还不清楚这个缺点在将来还是否存在;同时在设计版权保护系统时,必须考虑如下问题:一旦水印内容已知,则有可能去除水印或者部分水印。此外,迄今为止提出的水印算法,其可逆性使人们提出极大的疑问,即设计能够抗篡改的健壮公开水印技术是否可能?事实上,如果允许任何人读取水印,则任何人只要知道水印嵌入算法,就可以消除水印。

1.6数字水印在图像通信系统中的应用

1.图像通信系统的组成

按照所传输图像信号的性质,基本的图像通信系统可分为模拟系统和数字系统。

(1) 模拟图像通信系统的组成框图

在模拟图像通信系统中,图像信源是以一定的扫描方式产生电信号,模拟调制器通常有模拟调幅、调频、调相等方式,实际的系统通常还有对图像信号的滤波、电平调整等处理电路,以及产生载波的振荡电路和对已调波的放大电路等。一个典型的模拟图像通信系统的组成框图如下图1-6-1:

                图1-6-1  模拟图像通信系统

(2)数字图像通信系统的组成框图

在数字图像通信系统中,作为信源的输入图像是数字的,然后由信源编码器进行压缩编码,以减少其数据量。信道编码器则是为了提高图像在信道上的传输质量,减小误码率而采取的有冗余的编码。由于数字图像通信系统具有传输质量好、频带利用率高、易于小型化、稳定性好和可靠性强等特点,正在逐步取代模拟图像通信系统。一个典型的数字图像通信系统框图如下图1-6-2:

                      图1-6-2  数字图像通信系统

2.基于通信的水印模型

图1-6-3 水印模型

                       图1-6-4   基本通信模型

体的要求。比如,在高斯噪声攻击强度太大时,图象的质量就很差了,这样的图象就不能供人的感官欣赏。复接通信模型更强调的是水印和载体的对等性(Symmetry),即它们是同等重要的。这种对等性在数字水印中的一个体现就是对“信噪比”的两种解释:在讲到保真度时,“信号”指载体,“噪声”指水印;在讲到有效性和稳健性时,“信号”指水印,“噪声”指载体。这样的模型说明,在解决水印稳健性时,同时需要考虑载体保真度问题。这促使水印算法在提高稳健性时,还要考虑PSNR值、SNR值以及HVS/HAS(Human Vision System/Human Auditory System)模型。

图1-6-6  复接通信模型

3. 通信理论在数字水印中的应用现状

从通信理论的角度研究数字水印,一般可以导出具体的水印嵌入、检测算法,稳健性一般用相关系数或者误码率来度量。通信理论在数字水印中的应用包括:均匀量化和矢量量化、调制、信道编码、信源编码、调制和编码的权衡、扩频、加密解密等。

均匀量化和矢量量化一般用于设计水印的嵌入方式,即如何依据以{0,1}或

者{-1,+1}形式存在的信息比特来修改指定的载体数据(或特征)。均匀量化在数字水印中的典型应用是基于量化的水印算法,这样的算法对抗JPEG压缩和高斯噪声都有不错的效果。基于量化的算法一般都是在载体的变换域进行数据嵌入的,因为变换域的低频、中频系数都比较大,可以修改的余地也比较大。矢量量化一般用于图象水印、音频水印等。

调制水印中的应用有相位调制、幅度调制,即分别改变载体的相位信息和幅度信息。幅度调制一般是通过直接修改载体特征值的大小来实现的。幅度调制的典型应用是把水印(或水印的模板)嵌入离散傅立叶变换(DFT)的幅值。相位调制用于音频水印和图象水印等,有的算法通过改变载体DIST域系数的正负来实现相位调制。

信道编码是指为了提高通信性能而设计信号变换,以使传输信号更好地抵抗各种信道损伤的影响,例如噪声、干扰以及衰落等。它在数字水印中的应用有:线性分组码(BCH码、重复码、R S码、汉明码等)、卷积码T urbo码、LDPC码、交织码等。信道编码的基本思路是在信息比特中加入冗余比特,通过仔细设计的冗余比特,就可以纠正误码,实现纠错功能。交织码的主要功能是把信道中的突发错误转化为随机错误。因为信道编码在通信领域中非常有效,人们直接了当地在数字水印中引入信道编码,而只有少数文献研究水印信道的特殊性,试图给出应用信道编码的条件。

信源编码在数字水印中的应用主要是分布式信源编码。这种编码主要是用来解决传感器网络、分布式数据库和交互式通信系统中的问题。在这些应用中,虽然各个信源的位置不同,但是它们传给解码器的是高度相关的信息,而解码器的任务就是把这些信息中共同的东西提取出来。在数字水印中,把水印

和水印信道的输出

看作两个分布式信源、把水印检测器看作解码器,就可以在水印中利用从分布式信源编码研究中得到的分析和结论了,从而在一定程度上改善了水印的稳健性。

调制和编码的权衡在数字水印中的应用有:TCM码,T urbo-TCM码等。在通信领域,网格编码调制(Trellis-Coded Modulation, TCM)自从1984年以来就越

来越受到重视,它可以在不扩展带宽的情况下提高纠错能力。Ungerboeck证明了在AWGN信道中,TCM方式可以产生相对于无编码系统大约3db的编码增益,若编码复杂度增大,则还可以获得6db的增益。 Turbo-TCM码就是把Turbo码和TCM结合起来,用Turbo码作为TCM中的纠错码,从而进一步提高了纠错能力。扩频数字水印中的应用主要有:CDMA、跳频、直接序列扩频等,用到的

扩频序列有:M序列,Walsh序列,Gold序列等。加密解密利用一段看似随机的序列来保证信息的安全性。在数字水印中,这方面的技术一般用于认证水印的研究。

第二章  可实现数字水印技术的高效实用工具——MATLAB

2.1 Matlab简介

Matlab是当前在国内外十分流行的工程设计和系统仿真软件包。它是Math-Works公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一人方便的、界面友好的用户环境。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连 接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

Matlab的推出得到了各个领域专家、学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础。由各个专家学者相继推出了MATLAB工具箱,其中的信号处理(signal processing)、控制系统(control system)、神经网络(neural network)、图像处理(image processing)、鲁棒控制(robust control)、非线性系统控制设计(nonlinear system control design)、系统辨识(system identification)、最优化(optimization)、模糊逻辑(fuzzy logic)、小波(wavelet)、通信(communication)、统计(statistics)等工具箱,这些工具箱给各个领域的研究和工程应用提供了有力的工具,借助于这些“巨人肩上的工具”,各个层次的研究人员可直观、方便地进行分析、计算及设计工作,从而大大地节省了时间。

2.2  Matlab的应用

MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。

1.数字水印技术

a.集成了DFT、DCT、DWT等函数有丰富的小波函数和处理函数,这不仅方便了研究人员,而且使源程序简洁明了、易于实现。

b.强大的数学运算功能。能够方便、高效地实现音频、视频中的大量矩阵运算。提供了图像处理工具箱、小波分析工具箱、数字信号处理工具箱。

c.用来编制跨数字图像处理技术、数字信号处理等多学科的数字水印技术是非常好的选择。MATLAB与目前最强大的编程工具——Visual C++具有良好的接口。

2.图像分析处理

   Matlab的ImageProcessingToolbox提供了大量用于图像处理的工具函数,利用这些函数,可以分析图像数据,获取图像细节信息,并且设计相应的滤波算法,滤出图像数据所包含的噪声。当然,滤波器的设计是通过Matlab产品提供的交互式工具完成的,这些工具还能够完成选取图像区域,测量图像误差和获取、统计像素信息等功能。

    图象处理工具箱还提供了Radon变换来重够图像,而离散余弦变换可以作为实现新的压缩算法的核心。工具箱中还包含了边缘检测算法,用于表示图像中具体物体的边缘等。

在图象处理工具箱还包含了众多数学形态学函数,这些函数可以用于处理灰度图像或二值图像,可以快速实现边缘检测、图像去噪、骨架抽取等算法。此外还包含一些专用的数学形态学函数,例如填充处理、峰值检测等

2.3  Matlab函数介绍

在介绍函数之前,我们必须明确一点:作水印程序时,处理的图像数据是二维信号,而声音信号是一维信号。这里,我们仅仅简单介绍与水印有关的函数,具体函数的用法请读者参考相关文献。

1.图像显示

imshow( ):显示一幅图像;

imfinfo( ):可以得到读入图像的信息。如文件的大小、格式、格式版本号、图像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等

2.变换频函数

对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB中对一维信号和二维信号分别提供了各种变换和逆变换函数。

(1) 离散余弦变换(DCT)

dct( ),dct2( ):分别实现一维信号和二维信号的DCT(离散余弦变换);

idct( ),idct2( ):分别实现一维信号和二维信号的IDCT(逆向离散余弦变换);

(2) 离散傅里叶变换(DFT)

fft( ),fft2( ):分别实现一维信号和二维信号的DFT(离散傅里叶变换);

ftshift:实现快速傅里叶变换的直流组件移到光谱中心;

ifft( ),ifft2( ):分别实现一维信号和二维信号的IDFT(逆向离散傅里叶变换);

(3) 离散小波变换(DWT)

dwt( ),dwt2( ):分别实现一维信号和二维信号的DWT(离散小波变换);

idwt( ),idwt2( ):分别实现一维信号和二维信号的IDWT(离散小波变换);

Wavedec2( ):多级二维小波分解函数;

Waveinfo( ):提供小波包中所有的小波信息;

3.攻击函数

对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测试才能对之做出客观的评价。MATLAB中的许多函数可以直接用来做的攻击测试。

(1) 旋转:rotate( )可以对图像进行任意角度的旋转;

(2) 剪裁:imcrop( )可以按精确定位的各点坐标进行剪裁;

(3) 滤波:filter( )filter2( )可实现对一维信号和二维信号的滤波;

(4) 抖动:dither( )对图像进行抖动;抖动攻击考验水印鲁棒性的一个很好的攻击;

(5) 压缩:imwrite( )jpgquality参数能对图像进行可控jpg压缩;

(6) 加各种噪声:imnoise( )可以对图像加入各种噪声,如白噪声、椒盐噪声等,加入噪声是对水印鲁棒性考验的一种常见的攻击;

(7) 放大/缩小:imresize( )可以以指定的插值方法来对图像进行放大和缩小。

4.图像文件输入输出函数

    

(1) imread:从图形文件中读取图像;可以读bmp,jpg/jpeg, tif/tiff, png, hdf, pcx, wxd格式文件。读索引文件时,还可以得到相应的调色板数据。

    (2) imwrite:把图像写入图形文件中;

    (3) imcrop:剪切图像;

    (4) imresize:改变图像大小;

    (5) imrotate:旋转图像;

5.图像颜色及类型转换函数

    a. im2bw:转换图像为二进制图像;

    b. rgb2gray:转换RGB图像或颜色映象表为灰度图像;

    c. unit8:转换数据为八位无符号整型;

    e. double:转换数据为双精度类型

第三章  离散余弦变换(DCT)算法介绍

3.1  离散余弦叶变换的简介

  1. DCT 变换公式

因为DCT 变换公式是这一算法的核心,有必要先了解一下DCT 正反变换公式。DCT 正反变换公式的核心是余弦变换,计算速度比较快,因图像处理所用的是二维变换,这里只给出二维的DCT 正反变换公式,二维DCT 正变换公式为:

二维DCT反变换公式为:

      

其中x,y 为空间采样值,u,v 为频域采样值。

因为数字图像多用像素方阵来标识,即M=N,此时,二维DCT 正反变换可以简化为:

 

  1. 二维DCT的性质

离散余弦变换是图像处理技术中几种最基本的酉变换之一。酉变化是线性变化的一种特殊形式,其基本线性运算式是严格可逆的,并且满足一定的正交条件。图像的酉变换可以被理解为分解图像数据为广义的二维频谱,变换域中每一分量对应于原图频谱函数的能量。

设IM´N 为M´N 的图像矩阵则该图像的二维DCT 变换可由下式表示:

经过二维DCT 变换得到的DCT 系数矩阵GDCT 指示了一系列频率中每一个频率所对应的变化程度,即频率的高低。其中低频分量将集中在矩阵的左上角,高频分量则集中在右下角。图像的低频分量反映图像慢变化,即图像整体部分;图像的高频分量代表图像跳变的地方,即图像细节部分,如轮廓、边缘。根据人类视觉系统,图像整体比细节部分更为重要,若一幅图像经过处理后而视觉改变不大,则其低频分量必定改变程度不大。此算法采用了将数字水印的灰度值植入DCT 域的低频分量中的方法。

二维离散余弦变换是一种严格可逆的酉变换。它的两个矩阵AM´M BN´N 满足以下的正交条件:

               

由此,易得到离散余弦逆变换(IDCT):

             

正因为DCT 是一种严格可逆的正交变换,才可能对基于DCT 的植入算法实现准确的数字水印滤波。

  1. 二维DCT的实现

数字图像水印算法选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将载体图像进行8×8的分块,将数字水印的灰度值直接植入到载体灰度图像的DCT变换域中,实现水印的嵌入。具体方法如下:

设I是M×N大小的原始图像,J是水印图像大小为P×Q,M和N分别是P和Q的偶数倍,把水印J加载到图像I中,算法分以下几步进行:

1. 将I分解为(M/8)×(N/8)个8×8大小的方块B;同时,J也分解为 (M/8)×(N/8)个(8P/M)×(8Q/N)大小的方块V;

2. 对每一个B进行DFT变换:DB=DFT(B);

3. 加载水印对每一个DB和V,s(i)为从DB的中频选出的加载的位置 ,        1≤i≤(8P/M)×(8Q/N), t(i)为水印V的位置坐标 , 1≤i≤(8P/M)×(8Q/N),DB’(s)=A×V,其中A是加权系数,用DB’(s)来代替DB,得到加载水印后的图像DBC;

4. 对以上得到的每一个DBC进行逆DCT变换:IDBC=IDCT(DBC)并将各方块IDBC合并为一个整图I’,即加载了水印的新图像。

3.2  离散余弦变换水印嵌入算法 

数字图像水印算法选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将载体图像进行8×8的分块,将数字水印的灰度值直接植入到载体灰度图像的DCT变换域中,实现水印的嵌入。具体方法如下:

设I是M×N大小的原始图像,J是水印图像大小为P×Q,M和N分别是P和Q的偶数倍,把水印J加载到图像I中,算法分以下几步进行:

1. 将I分解为(M/8)×(N/8)个8×8大小的方块B;同时,J也分解为 (M/8)×(N/8)个(8P/M)×(8Q/N)大小的方块V;

2. 对每一个B进行DCT变换:DB=DCT(B);

3. 加载水印对每一个DB和V,s(i)为从DB的中频选出的加载的位置 ,        1≤i≤(8P/M)×(8Q/N), t(i)为水印V的位置坐标 , 1≤i≤(8P/M)×(8Q/N),DB’(s)=A×V,其中A是加权系数,用DB’(s)来代替DB,得到加载水印后的图像DBC;

4. 对以上得到的每一个DBC进行逆DCT变换:IDBC=IDCT(DBC)并将各方块IDBC合并为一个整图I’,即加载了水印的新图像。

3.3  离散余弦变换水印提取算法

设图像D为已经加载了水印的载体图像,现要将所加载的水印从D中提取出来,其过程为上述加载水印算法的逆运算:

1. 将D分解为(M/8)×(N/8)个8×8大小的方块BD;

2. 对每一个BD进行二维DFT变换:DBD=DCT(BD);

3. 提取数据对每一个DBD,按照式V’=1/A×DBD得到V’;

4. 将上面得到的所有V’合并成一个水印整图J’。

3.4  离散余弦变换水印算法原理框图

  3.5分块的离散傅里叶变换

1. 离散傅里

在图象处理的广泛领域中,傅里叶变换起着非常重要的作用,包括图象增强、图象分析、图象复原和图象压缩等。在图象数据的数字处理中常用的是二维离散傅里叶变换,它能把空间时域的图象变换到空间频域上进行研究,从而能很容易的了解到图象的各个空间频域成分,进行相应的处理。

2.水印嵌入算法 

数字图像水印算法选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将载体图像进行8×8的分块,将数字水印的灰度值直接植入到载体灰度图像的DFT变换域中,实现水印的嵌入。具体方法如下:

设I是M×N大小的原始图像,J是水印图像大小为P×Q,M和N分别是P和Q的偶数倍,把水印J加载到图像I中,算法分以下几步进行:

1. 将I分解为(M/8)×(N/8)个8×8大小的方块B;同时,J也分解为 (M/8)×(N/8)个(8P/M)×(8Q/N)大小的方块V;

2. 对每一个B进行DFT变换:DB=DFT(B);

3. 加载水印对每一个DB和V,s(i)为从DB的中频选出的加载的位置 ,        1≤i≤(8P/M)×(8Q/N), t(i)为水印V的位置坐标 , 1≤i≤(8P/M)×(8Q/N),DB’(s)=A×V,其中A是加权系数,用DB’(s)来代替DB,得到加载水印后的图像DBC;

4. 对以上得到的每一个DBC进行逆DFT变换:IDBC=IDFT(DBC)并将各方块IDBC合并为一个整图I’,即加载了水印的新图像。

3.水印提取算法

设图像D为已经加载了水印的载体图像,现要将所加载的水印从D中提取出来,其过程为上述加载水印算法的逆运算:

1. 将D分解为(M/8)×(N/8)个8×8大小的方块BD;

2. 对每一个BD进行二维DFT变换:DBD=DFT(BD);

3. 提取数据对每一个DBD,按照式V’=1/A×DBD得到V’;

4. 将上面得到的所有V’合并成一个水印整图J’。

第四章   离散余弦变换(DCT)算法的MATLAB程序及运行结果比较

4.1  MATLAB程序

1  size=512; N=32;K=8; D=zeros(size);E=0.01;

2  I=imread('f:\lena.bmp');

3  subplot(2,2,1);

4  imshow(I);

5  title('原始图像');

6  I=double(I)/512;

%读入水银

7  J=imread('f:\1234.bmp');

8  subplot(2,2,2);

9  imshow(J);

10 title('水印图像');

11 %对水印缩放

12 J=double(imresize(J,[64,64]));

13 subplot(2,2,3);

41 imshow(J);

15 title('缩放水印图像');

16 %嵌入水印

17 for p=1:size/K

18     for q=1:size/K

19         x=(p-1)*K+1; y=(q-1)*K+1;

20         I_dct=I(x:x+K-1,y:y+K-1);

 21       I_dct1=dct2(I_dct);

 22       if J(p,q)==0

 23           alfa=-1;

 24       else

 25          alfa=1;

 26       end

 27      I_dct2=I_dct1+alfa*E;

 28       I_dct=idct2(I_dct2);

 29       D(x:x+K-1,y:y+K-1)=I_dct;

 30   end

31 end

 32 subplot(1,3,3);

 33 imshow(D,[]);

 34 Title('含水印的图象');

 35 %%%%%%对加入水印的图像进行各种攻击

 36 %%%低通滤波攻击

 37 %hh=fspecial('gaussian',3,0.2);

 38 %hh=fspecial('gaussian',3,0.35);

 39 %hh=fspecial('gaussian',3,0.4);

 40 QQ=filter2(hh,D);

 41%%%旋转攻击

 42 R=imrotate(D,10,'bilinear','crop');

 43 %R=imrotate(D,20,'bilinear','crop');

 44 %R=imrotate(D,45,'bilinear','crop');

 45 %%%%%剪切攻击

  46 %D(1:32,1:32)=0;   Q2=D;

  47 %D(1:64,1:64)=0;   Q2=D;

  48 %D(1:128,1:128)=0;  Q2=D;

  49 % 提取水印

  50 for  p=1:size/K

  51 for  q=1:size/K

  52       x=(p-1)*K+1;

  53       y=(q-1)*K+1;

  54       I1=I(x:x+K-1,y:y+K-1);

  55       I2=QQ(x:x+K-1,y:y+K-1);

  56       I_dct1=dct2(I1);

  57       I_dct2=dct2(I2);

  58       if  I_dct2>I_dct1

  59         W(p,q)=1;

  60       else

  61          W(p,q)=0;

  62       end     

  63  end

  64 end

  65 figure,subplot(1,2,1);imshow(R,[]);title('低通滤波攻击');

  66 subplot(1,2,2);imshow(W,[]);title('图像中提取的水印');

  67  %%%%%%前后水印相似比较

  68 J=double(J);W=double(W);

  69 sumJ=0;sumW=0;

  70 for  j=1:N

   71 for  i=1:N

   72     sumJ=sumJ+J(j,i)*W(j,i);

   73     sumW=sumW+W(j,i)*W(j,i);

   74  end

   75 end

   76 CH=(sumW-sumJ)/sumJ

4.2  运行结果比较

1.1---34行程序运行结果如下:

2.不同程度的低通滤波攻击图像及提出的水印信息:

(1)hh=fspecial('gaussian',3,0.2)攻击与提取

  

 (2)hh=fspecial('gaussian',3,0.35) 攻击与提取

(3)hh=fspecial('gaussian',3,0.4)攻击与提取

3.不同程度的旋转攻击图像及提出的水印信息:

(1)R1=imrotate(D,10,'bilinear','crop')的攻击与提取:

(2) R2=imrotate(D,20,'bilinear','crop') 的攻击与提取:

(3) R3=imrotate(D,45,'bilinear','crop') 的攻击与提取:

4. 不同程度的剪切攻击图像及提出的水印信息:

(1)D(1:32,1:32)=0 

(2)D(1:64,1:64)=0 

(3)D(1:128,1:128)=0 

5. 不同嵌入深度的图像的比较:

             E=0.01                E=0.1               E=1

6. 提取水印与原始水印的相似程度比较

各种攻击                  

相似程度

             旋转攻击               

旋转10度                

0.9955

低通滤波攻击

hh=fspecial('gaussian',3,0.2)

0.9955

               剪切攻击

            D(1:32,1:32)=0

0.9955

4.3  实验结果总结分析

   首先,离散余弦变换在图像处理中的作用非常重要,在本设计中,运用离散余弦变换嵌入水印,是嵌入在原图像的低频部分。本文提出的水印算法的鲁棒性虽然不及一些需要原图的水印算法,但是相比而言不需要未加水印的原始图像,而且这种算法可以抵抗一些常见的攻击方法,如:旋转、裁减。低通滤波等等。如果通过直方图均衡的预处理,还可以提高算法的性能,实验证明此算法有较好的鲁棒性。本实验采用的仿真软件是MATLAB7.0,此版本与较高版本相比会缺少一些函数,但对本次设计不会有太大影响。

    其次,应该说嵌入水印的图像还是比较清晰的,这说明离散余弦变换法还是具有实用价值的。当不加任何攻击时,提取的水印是非常清晰的,和源图像相似程度高达99.55%!这种算法对低通滤波攻击和剪切攻击来说,提取水印的效果还是比较好的;但对于旋转攻击和剪切攻击来说,效果却并不理想。当旋转和剪切攻击,水印就提不出来了。这证明离散余弦变换还是具有一定的局限性的。数字水印的方法有很多,但是每一种单独的方法都无法禁得起多种方法的图像处理,只有组合不同的方法才能达到更好的效果。

   最后,程序使用了最一般的循环语句,而没有考虑到代码的优化。在本论文中,程序的执行花销时间很少,但若是图像比较大的话,是一定要考虑代码优化问题的。特别是for循环,当采用向量化循环方法将使运行时间成百上千倍的缩减!另外也没有考虑预分配数组的问题,当加入预分配数组后,运行时间也会明显缩短,而且会使内存有较大的连续空间,而不会使存储器出碎片。

参考文献

1. R.C.冈萨雷斯等著,阮秋琦等译.  数字图像处理(MATLAB版)   北京:电子工业出版社,2005

2. 孙圣和等著.  数字水印技术及应用.  北京:科学出版社, 2004

3. 罗军辉等著.  MATLAB7.0在图像处理中的应用. 北京:机械出版社,2005

4. 王家文等著.  MATLAB7.0编程基础. 北京:机械出版社,2005

5. 钟麟等著.    MATLAB仿真技术与应用教程. 北京:国防工业出版社,2004

6. 丁玉美等著.  数字信号处理.  西安:西安电子科技大学出版社,2004

7. 樊昌信等著.  通信原理.  北京:国防工业出版社,2004

8. 吴成柯等著.  图像通信.  西安:西安电子科技大学出版社,1990

9. 谭浩强著.    C程序设计. 北京:清华大学出版社,2002

10. 孙圣和.     数字水印处理技术.  电子学报. 2000,28(8):85~90

11. 李永全.     基于MATLAB的DCT域数字水印技术实现.  信息技术.2005,4

12. 朱秀昌      数字图像处理     北京邮电大学出版社

13. 朱秀昌      数字图像处理与图像通信    北京邮电大学出版社

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

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

相关文章

【Linux指令】---获取进程的PID

获取进程的PID getpid()函数

李红《复变函数与积分变换》第五版课后习题答案PDF

《复变函数与积分变换(第五版)学习辅导与习题全解》是与《复变函数与积分变换(第五版)》(华中科技大学数学与统计学院)配套的学习辅导书, 全书共八章:复数与复变函数, 解析函数,复变函数的积分, 解析函数的级数表示&am…

Zypher Network:全栈式 Web3 游戏引擎,服务器抽象叙事的引领者

近期,《黑神话:悟空》的爆火不仅让 AAA 游戏重回焦点,也引发了玩家与开发者的热议。Web2 游戏的持续成功导致部分 Web3 玩家们的倒戈,对比之下 Web3 游戏存在生命周期短且商业模式难以明确的问题,尤其在当前加密市场环…

【Linux】利用 <信号量> 实现 <生产者-消费者模型-线程同步 >(思维导图&代码演示&思路解析)

前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图

Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆形、路径和文本的实例。 关键词 Canvas 组件…

spark-on-k8s 介绍

spark-on-k8s 介绍 摘要 最近一段时间都在做与spark相关的项目,主要是与最近今年比较火的隐私计算相结合,主要是在机密计算领域使用spark做大数据分析、SQL等业务,从中也了解到了一些spark的知识,现在做一个简单的总结&#xff…

【运动的&足球】足球场地区域图像分割系统源码&数据集全套:改进yolo11-RFAConv

改进yolo11-ContextGuidedDown等200全套创新点大全:足球场地区域图像分割系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.28 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展…

C语言 | Leetcode C语言题解之第525题连续数组

题目: 题解: struct HashTable {int key, val;UT_hash_handle hh; };int findMaxLength(int* nums, int numsSize) {int maxLength 0;struct HashTable* hashTable NULL;struct HashTable* tmp malloc(sizeof(struct HashTable));tmp->key 0, tm…

Java JUC(四) 自定义线程池实现与原理分析

目录 一. 阻塞队列 BlockingQue 二. 拒绝策略 RejectPolicy 三. 线程池 ThreadPool 四. 模拟运行 在 Java基础(二) 多线程编程 中,我们简单介绍了线程池 ThreadPoolExecutor 的核心概念与基本使用。在本文中,我们将基于前面学…

金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现

0x01 产品简介 金华迪加现场大屏互动系统是一种集成了先进技术和创意设计的互动展示解决方案,旨在通过大屏幕和多种交互方式,为观众提供沉浸式的互动体验。该系统广泛应用于各类活动、展览、会议等场合,能够显著提升现场氛围和参与者的体验感。 0x02 漏洞概述 金华迪加 现…

2024年系统架构师---下午题目真题

1. 数据仓库架构风格的优缺点: 优点: 1)数据统一保存在中央数据仓库,数据处理流程相对独立,支持交互式处理。 缺点: 1)仓库风格不支持并行,效率低。 2)仓库风格容错性和健…

JVM、JRE、JDK区别和联系

JVM(java virtual machine):Java虚拟机主要包括类加载器、执行引擎、本地接口和运行时数据区,其中运行时数据区是JVM的主要部分。JVM的主要作用是将class文件中的二进制数据加载到运行时数据区的方法区,在堆区生成相应的java.lang.Class对象&…

Vue中ref、reactive、toRef、toRefs的区别

一、ref、reactive setup 函数中默认定义的变量并不是响应式的(即数据变了以后页面不会跟着变),如果想让变量变为响应式的变量,需要使用 ref 和 reactive 函数修饰变量。 ref 函数可以把基本类型变量变为响应式引用reactive 函数…

Linux安装es和kibana

安装Elasticsearch 参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html#targz-enable-indices 基本步骤下载包,解压,官网提示: wget https://artifacts.elastic.co/downloads/elasticsearc…

spreadjs实现类似于企业微信的协同提示

核心代码 import * as GC from "grapecity-software/spread-sheets";function HighlightLayout(name:string){this.name name;this._eventNs ".HighlightLayout" name || "";this._sheetRangesInfo {} } HighlightLayout.prototype.bind f…

Linux云计算 |【第五阶段】PROJECT3-DAY1

主要内容: 跳板机(堡垒机)的概念、部署JumpeServer 一、跳板机(堡垒机)的概念 跳板机(Jump Server 或 Bastion Host)是一种网络安全设备或服务器,也称堡垒机,是一类可作…

PAT甲级-1133 Splitting A Linked List

题目 题目大意 给定一个链表的首节点地址和节点个数&#xff0c;以及一个数k。要求重新排列该链表&#xff0c;使其按<0 &#xff0c;> 0 && < k&#xff0c;>k 的顺序排序。但是不改变原有顺序&#xff0c;比如-4 -> -6 -> -2&#xff0c;不需要再…

重新回顾反向传播与梯度下降:训练神经网络的基石

有关反向传播与梯度下降&#xff1a;流程与公式推导 背景前向传播反向传播 背景 反向传播则是一种训练神经网络的算法&#xff0c;目前我们使用的深度学习模型大都是通过这种方法训练的。它的核心思想是通过计算损失函数相对于每个参数的导数&#xff0c;来更新神经网络中的权重…

Java | Leetcode Java题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; class Solution {public String findLongestWord(String s, List<String> dictionary) {int m s.length();int[][] f new int[m 1][26];Arrays.fill(f[m], m);for (int i m - 1; i > 0; --i) {for (int j 0; j < 26; j) {…

PHP合成图片,生成海报图,poster-editor使用说明

之前写过一篇使用Grafika插件生成海报图的文章&#xff0c;但是当我再次使用时&#xff0c;却发生了错误&#xff0c;回看Grafika文档&#xff0c;发现很久没更新了&#xff0c;不兼容新版的GD&#xff0c;所以改用了intervention/image插件来生成海报图。 但是后来需要对海报…