精华内容
下载资源
问答
  • 数字水印技术对于噪音叠加和常见的图像处理操作具有较强的稳健性。该技术根据光学级联分数傅里叶变换系统,利用两个随机相位分布函数对水印信息编码并经过迭代分数傅里叶变换嵌入到变换域的载体图像中。在水印检测...
  • 随着网络技术与数字技术的发展,数字水印技术成为数字信息技术领域近年来研究的热 点之一。简要介绍了数字水印的背景知识、特征、研究现状,以及对常见的水印攻击方法,并分析了未 来数字水印技术发展的趋势。
  • 数字水印概念是Tirkel等人在1993年发表一篇名为“A digital watermark”文章中正式提出来。他们提出了两种在灰度图像最低有效位(Least Significant Bit,简称LSB)上添加水印方法,这种方法虽然简单易行,...

        数字水印概念是Tirkel等人在1993年发表的一篇名为“A digital watermark”的文章中正式提出来。他们提出了两种在灰度图像最低有效位(Least Significant Bit,简称LSB)上添加水印的方法,这种方法虽然简单易行,但是它的水印鲁棒性很差,对于常见的缩放、滤波等攻击都提取不出水印。
        随后,在1995年,Cox等人提出了一种基于扩频通信思想的水印方案,大大提高了水印的鲁棒性。他们将水印信息添加到离散余弦变换域中,以提高水印对图像处理的鲁棒性。这一水印方案也成为了数字水印技术中的一个经典方案。但是方案在提取水印时,需要原始图像的参与,是一种非盲提取水印算法。1996年,Pitas[4]提出了一种空间域水印算法,提取水印时不需要原始图像的参与,实现了盲提取。
        1996年5月,第一届信息隐藏国际学术研讨会在英国剑桥牛顿研究所召开,使得数字水印技术的研究得到了迅速的发展,像麻省理工学院、剑桥大学、朗讯公司贝尔实验室、德国国家信息技术研究中心、微软公司、NEC公司和IBM公司等许多著名的大学、科研机构和公司纷纷开展了这方面的研究,大量的数字水印方案不断被提出,大量的数字水印方面的论文发表在有关信息安全的国际会议杂志和刊物上,同时每年也举行了各种相关的学术会议和研讨会。
        我国在数字水印技术领域开展研究工作起步相对比较晚,但是政府研究机构和大学都非常重视这一新兴的技术,投入了大量的研究资金和研究人员。如中国科学院自动化研究所、清华大学、北京邮电大学、哈尔滨工业大学、北京电子技术应用研究所等多家知名机构,而且还有许多新的研究机构不断的加入到此研究领域中。1999年12月,我国成功的在北京召开了第一届信息隐藏学术研讨会(CHIW),至此已经成功的召开了八届。2009年3月,由北京电子技术研究所和湖南大学共同在湖南大学召开了第八届全国信息隐藏学术研讨会,此次会议聚集国内众多从事多媒体信息安全技术研究的专家学者和权威人士,大会就数字隐写、数字水印、数字取证等信息隐藏领域内的热点理论与关键技术展开学术交流,并邀请国内外信息安全领域的著名专家学者做了专题报告,同时,本次会议还邀请了一些信息安全领域知名企业进行了参展。此次会议的成功召开,标志着我国在该领域的研究已经接近世界水平,并且具有自己独特的研究思路。
        数字水印技术在初期注重的是理论研究,但随着理论研究的更深入、更成熟,使得该技术在实际应用也得到了飞速的发展。早在1995年,美国就出现了第一家专业从事数字水印技术应用的企业——Digimarc公司,它的产品主要面向金融文档、身份证件、数字图片等多媒体的版权保护、认证和操作跟踪等安全管理。主要产品有:ImageBridge(在公共网和指定的目标站点上搜索和跟踪含有水印信息图像的使用情况)、IDMarc(为图像嵌入水印信息,实现所有者鉴别和防伪保护)、MarcSpider(一种水印代理,能够自动的在网络上搜索嵌有水印图像的拷贝)等,并成功的将数字水印软件以插件的形式集成到Adobe Photoshop 4.0和Corel Draw7.0中。荷兰Philips公司成功开发了基于视频内容操作跟踪的数字视频水印软件——RepliTrack,并已成功应用于防止电影评审期间的盗版发生。美国Activated Content公司的ActivatedAudio系列软件是能够自同步和基于密钥加密的数字音频软件,它在设计时就结合了音频技术的基本原理和心理声学的压缩技术,能够满足数字音频的版权保护要求。此外还有英国Signum公司的SureSign和VeriData系列软件、美国Alpha公司的EIKONAmark软件、MediaSec公司的SysCop系列软件、以色列Aliroo公司的ScarLet等等。 国内从事数字水印产品技术开发的公司相对来说比较少,主要有上海阿须数码技术有限公司、北京中科模识科技有限公司、成都宇飞信息工程有限责任公司和四川联讯科技有限责任公司这四家。其中阿须数码开发了阿须数字印章、阿须数字水印条码、阿须数字手写签名、阿须PDF认证系统、阿须数字证书和阿须多媒体版权保护系统等数字安全方面的系统软件;模识科技主要从事数字音频版权保护的数字音频水印软件;宇飞信息和联讯科技都各自开发了数字水印印刷防伪系统。

     

    来源:http://netedu.xauat.edu.cn/mcourse/10/jxsj/sztxcl/news/shuiyin2.html

    转载于:https://www.cnblogs.com/wpjamer/articles/10480908.html

    展开全文
  • 介绍了混沌数字水印的定义及常见分类,从混沌序列数字水印、混沌映射数字水印和混沌系统数字水印三个方面介绍了国内外研究情况,从文本水印、图形水印、音频水印、视频水印等领域详细综述了混沌数字水印研究理论和...
  • 在分析视觉系统特征基础上提出了一种新型Contourlet域分层数字水印技术。该方法利用视觉系统对不同区域、不同局部特征噪声敏感性不同设置相应区域水印权重和局部水印权重,将水印按照设置分层权重嵌入到...
  • 常见的水印攻击方法进行了研究,建立了水印攻击规则库和质量评估指标库,在此基础上,进一步建立了数字图像水印的产生、嵌入、提取、验证的理论体系。利用智能分析和辨识的方法,实现了对水印系统可能发生的攻击...
  • 分类论述了目前常见的一些数字水印攻击技术,并给出了相应的解决对策,对研究新型数字水印系统有一定的借鉴作用。
  • 数字水印技术作为信息隐藏技术一种,不可见性和鲁棒性是它两个主要特点,通常在水印嵌入时需要确定水印嵌入量,来平衡不可见性和鲁棒性之间关系,若嵌入量过小,不可见性好而鲁棒性差,若嵌入量过大,则不...

    数字水印技术作为信息隐藏技术的一种,不可见性和鲁棒性是它的两个主要特点,通常在水印嵌入时需要确定水印的嵌入量,来平衡不可见性和鲁棒性之间的关系,若嵌入量过小,不可见性好而鲁棒性差,若嵌入量过大,则不可见性差而鲁棒性强,嵌入量最佳的取值可以通过遗传算法来确定,现在常用的有蚁群算法,果蝇算法,粒子群算法等等。对于不可见性,我们可以直观地用视觉来判断,而对于鲁棒性,我们无法直接的判断一个水印算法的鲁棒性强弱,需要进行一系列的攻击测试,来判断其鲁棒性。下面,我将介绍数字水印常见的几种攻击类型,分别从理论,代码和实例来展开。

    1. 常见的攻击类型

    按照攻击原理可以将攻击类型分为四大类:简单攻击,同步攻击,削去攻击,混淆攻击。

    (1) 简单攻击
    简单攻击是试图对整个水印化数据(嵌入水印后的载体数据)进行操作来削弱嵌入的水印的幅度(而不是试图识别水印或分离水印),导致数字水印提取发生错误,甚至根本提不出水印信号。
    常见的有:压缩(JPEG,MPEG)、噪声

    (2)同步攻击
    同步攻击是试图破坏载体数据和水印的同步性,被攻击的数字作品中水印仍然存在,而且幅度没有变化,但是水印信号已经错位,不能维持正常水印提取过程所需要的同步性。同步攻击通常采用几何变换方法。同步攻击比简单攻击更加难以防御。因为同步攻击破坏水印化数据中的同步性,使得水印嵌入和水印提取这两个过程不对称。
    常见的有:缩放,剪切,旋转

    (3)削去攻击
    削去攻击试图通过分析水印化数据,估计图像中的水印,将水印化数据分离成为载体数据和水印信号,然后抛弃水印,得到没有水印的载体数据,达到非法盗用的目的。
    常见的有:合谋攻击

    (4)混淆攻击
    混淆攻击是试图生成一个伪源数据、伪水印化数据来混淆含有真正水印的数字作品的版权
    常见的有:IBM攻击

    (这里主要介绍前两种,简单攻击和同步攻击。)

    2. 理论知识及代码

    2.1 压缩

    图像的JPEG压缩内容比较多,后面有机会了单独开一个帖子写吧。在处理数字水印的压缩攻击时,我用的最多的是Stirmark工具,一个专门做水印攻击的工具,操作方便简单,可以直接得到压缩后的图,具体的操作步骤可以参考我之前的帖子,链接在这里:数字水印攻击测试工具——Stirmark的使用介绍

    2.2 噪声

    常见的几种噪声:
    (1)高斯噪声
    (2)椒盐噪声
    (3)泊松噪声
    (4)乘性噪声
    在matlab中,可以通过imnoise()函数给图像添加这四种噪声,imnoise()函数的调用格式为:
    J=imnoise(I,type,parameters)
    I:要添加噪声的图像
    type:添加的噪声类型,‘gaussian’为高斯噪声,‘localvar’为0均值白噪声,‘poisson’为泊松噪声,‘salt & pepper’为椒盐噪声,‘speckle’为乘性噪声
    parameters:噪声的参数,不设置采用默认值。不同的噪声类型,需要设定的参数也不同,下面会针对每一种噪声具体介绍

    ①高斯噪声
    J=imnoise(I,‘gaussian’,m,v)
    m:高斯噪声的均值,默认为0
    v:高斯噪声的方差,默认为0.01

    附上高斯噪声代码:

    clear all; close all;
    I=imread('coins.png');
    J=imnoise(I, 'gaussian', 0, 0.01);%方差为0.01的高斯噪声
    K=imnoise(I, 'gaussian', 0, 0.03);%方差为0.03的高斯噪声
    figure;
    subplot(121);  imshow(J);title('方差为0.01的高斯噪声')
    subplot(122);  imshow(K);title('方差为0.03的高斯噪声')
    

    在这里插入图片描述
    ②椒盐噪声
    J=imnoise(I,‘salt & pepper’,d)
    d:噪声的密度,默认为0.05

    附上椒盐噪声的代码:

    clear all; close all;
    I=imread('cameraman.tif');
    I=im2double(I);
    J=imnoise(I, 'salt & pepper', 0.01);%添加密度为0.01的椒盐噪声
    K=imnoise(I, 'salt & pepper', 0.03);%添加密度为0.03的椒盐噪声
    figure;
    subplot(121);  imshow(J);title('%添加密度为0.01的椒盐噪声');
    subplot(122);  imshow(K);title('%添加密度为0.03的椒盐噪声');
    

    在这里插入图片描述
    ③泊松噪声
    J=imnoise(I,‘poisson’)
    d:噪声的密度,默认为0.05

    附上泊松噪声代码:

    clear all; close all;
    I=imread('cameraman.tif');
    J=imnoise(I, 'poisson');%添加泊松噪声
    figure;
    subplot(121);  imshow(I);title('原图');
    subplot(122);  imshow(J);title('添加泊松噪声后的图像');
    

    在这里插入图片描述
    ④乘性噪声
    J=imnoise(I,‘speckle’,v)
    v:方差,默认为0.04

    附上乘性噪声代码:

    clear all; close all;
    I=imread('cameraman.tif');
    J=imnoise(I, 'speckle');%添加方差为0.04的乘性噪声
    K=imnoise(I, 'speckle', 0.5);%添加方差为0.5的乘性噪声
    figure;
    subplot(121);  imshow(J);title('添加方差为0.04的乘性噪声');
    subplot(122);  imshow(K);title('添加方差为0.5的乘性噪声');
    

    在这里插入图片描述

    2.3 缩放

    这里用imresize()函数,调用格式可以用最基础的:
    B=imresize(A,m)
    m大于1,图像放大;m小于1,图像缩小

    clear all; close all;
    I=imread('lena.png');
    J=imresize(I,2);
    K=imresize(J,0.5);
    figure;
    subplot(131);  imshow(I);title('原图');
    subplot(132);  imshow(J);title('原图放大');
    subplot(133);  imshow(K);title('放大后缩小');
    

    在这里插入图片描述

    2.4 剪切

    这里要注意的是,matlab中有自带的剪切函数,imcrop()函数是我们对一幅图中的某个区域感兴趣需要将这部分剪切下来时使用的,保留的是剪切下来的那部分。而对于数字水印的剪切攻击而言,我们并不是直接调用imcrop()函数,因为我们要保留的是原图“剪切”后剩下的那部分,用图表示就是下面的阴影部分。这里的剪切我用了引号,是因为这里并不是真正的剪切,只是将选中的部分调为白色,也就是像素调为255,(0表示黑色,255表示白色),若原图为灰度图像,直接调为255即可,若原图为RGB彩色图像,需要三色通道都调为255。

    在这里插入图片描述
    下面附上RGB图“剪切”的代码,对于灰度图只用剪切一次即可:

    clear all; close all;
    I=imread('lena.png');
    %原图进行分色并剪切
    I_r= I(:,:,1);
    I_r(1:128,1:128)=255;
    I_g =I(:,:,2);
    I_g(1:128,1:128)=255;
    I_b =I(:,:,3);
    I_b(1:128,1:128)=255;
    figure(1)
    subplot(221),imshow(I_r,[]),title('R通道剪切后图像');
    subplot(222),imshow(I_g,[]),title('G通道剪切后图像');
    subplot(223),imshow(I_b,[]),title('B通道剪切后图像');
    %三色通道合并
    I(:,:,1) = I_r;
    I(:,:,2) = I_g;
    I(:,:,3) = I_b;
    subplot(224),imshow(I,[]),title('RGB图像剪切后');
    

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

    2.5 旋转

    针对图像旋转,我之前有过一个帖子专门讲图像的旋转,需要的朋友可以去翻翻看看,链接在这里:
    图像的旋转,imrotate函数的应用
    在旋转时,尽量保持尺寸不变,因为在数字水印提取过程,需要保持原图像的尺寸大小
    也就是说,尽量使用B=imrotate(A,angle,method,‘crop’)
    这里举个例子:
    原图大小为512×512,经过逆时针30度旋转,还要保持512×512的大小

    clear all; close all;
    I=imread('lena.png');
    J=imrotate(I,30,'nearest','crop');
    figure;
    subplot(121);  imshow(I);title('原图');
    subplot(122);  imshow(J);title('逆时针旋转30度');
    

    在这里插入图片描述
    以上就是数字水印常见的一些简单攻击和几何攻击,具体在数字水印当中的应用,就是用这些攻击方法对嵌入水印后的图像进行攻击,保存受攻击后的图,再进行水印的提取,若能提取出水印,则说明水印算法能够抵抗这种攻击,若提取不出来,说明鲁棒性有待提高。具体的应用下次再开帖子介绍吧~

    本人还在学习阶段,若有错误和问题,欢迎给我留言呀~

    展开全文
  • 本文提出一种基于小波变换图像数字水印算法,通过将低频子图分块并量化其小波系数,实现水印嵌入和提取,并对其进行抗噪声、JPEG压缩、旋转等实验。对于旋转攻击,该算法结合了图像归一化技术。实验结果表明,...
  • 提出了一种基于纹理子块小波变换数字水印算法。先将原始图像水印构造成另一个大小相同虚假水印,然后将此虚假信息进行纠错编码,嵌入到小波变换后中频子带纹理区内,分析和实验结果表明,构造虚假水印使原始水印...
  • 数字水印技术由很多,基于多媒体图片,音频以及视频等技术研究比较深入,受限制于文本的特性,单独对文本的数字水印技术研究比较少,一般需要结合特定的文本格式进行解析。 如下是比较常见的文本水印技术。 (1)...

    一、概述

    信息媒体的数字化为信息的存取提供了极大的方便,越来越多的业务现在都是基于网络信息完成的。与此同时,信息的泄露,篡改,盗版等也困扰这很多公司以及个人。那么如何降低这些风险或者说泄露了信息如何溯源呢?数字水印技术则在这方面提供了一系列追溯的功能,可以追溯信息在那个环节泄露。

    数字水印技术由很多,基于多媒体图片,音频以及视频等技术研究比较深入,受限制于文本的特性,单独对文本的数字水印技术研究比较少,一般需要结合特定的文本格式进行解析。

    如下是比较常见的文本水印技术。

    (1)基于普通文本文件格式信息的技术,包括利用字符或者单词字移的技术、利用文本行距的行移技术、利用字符特征(字体、颜色、高度、宽度、笔画宽度、是否有下划线、是否为斜体等、字符拓扑结构)的技术等;

    (2)基于不可见编码的技术,包括替换法、追加法、基于冗余编码的技术、字符的图形与编码相互独立的技术等; 基于文本内容的技术,包括同义词替换技术、基于句法的文本数字水印技术、基于语义的文本数字水印技术等;

    (3)基于汉字结构的技术,包括利用偏旁部首的可组合的特性、字符内偏旁部首之间的距离的技术;

    (4)基于图像水印技术的技术,包括基于各种空域、变换域的水印嵌入技术;

    (5)基于特殊格式文件的技术,例如基于HTML、PDF等特殊文件格式的水印嵌入技术。

    二、不可见编码的技术

    那么如何单纯的只对文本进行水印技术编码呢?

    上面第二点,可以基于”不可见编码的技术”对文本进行水印添加。

    Unicode 中有一类格式字符,不可见,不可打印,主要作用于调整字符的显示格式,所以我们将其称为零宽字符。

    零宽字符主要有以下几类:

    零宽度空格符 (zero-width space) U+200B : 用于较长单词的换行分隔
    
    零宽度非断空格符 (zero width no-break space) U+FEFF : 用于阻止特定位置的换行分隔
    
    零宽度连字符 (zero-width joiner) U+200D : 用于阿拉伯文与印度语系等文字中,使不会发生连字的字符间产生连字效果
    
    零宽度断字符 (zero-width non-joiner) U+200C : 用于阿拉伯文,德文,印度语系等文字中,阻止会发生连字的字符间的连字效果
    
    左至右符 (left-to-right mark) U+200E : 用于在混合文字方向的多种语言文本中(例:混合左至右书写的英语与右至左书写的希伯来语),规定排版文字书写方向为左至右
    
    右至左符 (right-to-left mark) U+200F : 用于在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左
    

    我们可以使用零宽字符的特性对文本进行水印加密。

    三、实现

    1、代码实现

    package com.test.watermark;
    
    /**
     * @author 小白
     * @version 1.0
     * 类说明
     * @date 2020/12/2 9:15
     */
    public class WatermarkUtils {
        private static int WATERMARK_POS_NONE = 0;
        private static int WATERMARK_POS_HEAD = 1;
        private static int WATERMARK_POS_TAIL = 2;
        /**
         * 将字符串转换成二进制字符串,以空格相隔
         *
         * @param input
         * @return
         */
        private String strToBinary(String input) {
            char[] strChar = input.toCharArray();
            String result = "";
            String tmp = "";
            for (int i = 0; i < strChar.length; i++) {
                tmp = Integer.toBinaryString(strChar[i]);
    
                while(tmp.length() < 16) {
                    tmp = "0" + tmp;
                }
                result += tmp;
                result += " ";
            }
            return result.trim();
        }
    
        /**
         * 将二进制字符串转换成int数组
         *
         * @param binStr
         * @return
         */
        public int[] binstrToIntArray(String binStr) {
            char[] temp=binStr.toCharArray();
            int[] result=new int[temp.length];
            for(int i=0;i<temp.length;i++) {
                result[i]=temp[i]-48;
            }
            return result;
        }
    
        /**
         * 将二进制转换成字符
         *
         * @param binStr
         * @return
         */
        public char binstrToChar(String binStr){
            int[] temp=binstrToIntArray(binStr);
            int sum=0;
            for(int i=0; i<temp.length;i++){
                sum +=temp[temp.length-1-i]<<i;
            }
            return (char)sum;
        }
    
        /**
         * 将以空格相隔的二进制转换为字符串
         *
         * @param input
         * @return
         */
        public String binaryToStr(String input){
            String[] tempStr=input.split(" ");
            char[] tempChar=new char[tempStr.length];
            for(int i=0;i<tempStr.length;i++) {
                tempChar[i]=binstrToChar(tempStr[i]);
            }
            return String.valueOf(tempChar);
        }
    
    
        /**
         * 二进制字符串转换为零宽字符
         *
         * @param input
         * @return
         */
        private String binaryToZeroWidth(String input) {
            String[] stringArray = input.split(" ");
            String result = "";
            for(int i = 0; i < stringArray.length; i++) {
                for(int j = 0; j < stringArray[i].length(); j++) {
                    //数字转换
                    int num = Integer.parseInt(stringArray[i].charAt(j) + "");
                    if(num == 1) {
                        result += '\u200b'; // \u200b 零宽度字符(zero-width space)
                    } else if(num == 0) {
                        result += '\u200c'; // \u200c 零宽度断字符(zero-width non-joiner)
                    } else {
                        result += '\u200d'; // \u200d 零宽度连字符 (zero-width joiner)
                    }
                    result += '\ufeff'; // \ufeff 零宽度非断空格符 (zero width no-break space)
                }
            }
            return result;
        }
    
        /**
         * 零宽字符转二进制
         *
         * @param input
         * @return
         */
        private String zeroWidthToBinary(String input) {
            String result = "";
            String[] binaryStr = input.split("\ufeff");
            for(int i = 0; i < binaryStr.length; i++) {
                if(binaryStr[i].equals("\u200B")) {
                    result += "1";
                } else if(binaryStr[i].equals("\u200C")) {
                    result += "0";
                }
                if((i + 1) % 16 == 0) {
                    result += " ";
                }
            }
            return result;
        }
    
    
        /**
         * 字符串编码
         *
         * @param input
         * @return
         */
        private String encode(String input) {
            String binary = strToBinary(input);
            String result = binaryToZeroWidth(binary);
            return result;
        }
    
        /**
         * 零宽字符解码
         *
         * @param input
         * @return
         */
        private String decode(String input) {
            String binary = zeroWidthToBinary(input);
            String result = binaryToStr(binary);
            return  result;
        }
    
        /**
         * 添加水印数据
         *
         * @param src 源文件字符串
         * @param watermark 水印
         * @return 添加水印后的字符串
         */
        private String addWatermark(String src, String watermark, int pos) {
            if(pos == WATERMARK_POS_HEAD) {
                return watermark + src;
            } else if(pos == WATERMARK_POS_TAIL) {
                return src + watermark;
            }
            return src;
        }
    
    
        /**
         * 提取水印数据
         *
         * @param input 添加水印的文本
         * @return
         */
        private String extractWatermark(String input, int pos) {
            String watermark = "";
            if(pos == WATERMARK_POS_HEAD) {
               for(int i = 0; i < input.length(); i++) {
                    if(input.charAt(i) != '\u200b' && input.charAt(i) != '\u200c' && input.charAt(i) != '\u200d' && input.charAt(i) != '\ufeff') {
                        watermark = input.substring(0, i);
                        break;
                    }
               }
            } else if(pos == WATERMARK_POS_TAIL) {
                for(int i = input.length() - 1; i >= 0; i--) {
                    if(input.charAt(i) != '\u200b' && input.charAt(i) != '\u200c' && input.charAt(i) != '\u200d' && input.charAt(i) != '\ufeff') {
                        watermark = input.substring(i + 1);
                        break;
                    }
                }
            }
            return watermark;
        }
    }
    

    2、main函数

     public static void main(String[] args) throws Exception {
    		WatermarkUtils watermarkUtils = new WatermarkUtils();
    
            String input = "测试下水印添加";
            System.out.println("原文本:\"" + input + "\",文本长度:" + input.length());
            String watermarkSrc = "我是小白,我的工号为123456";
            System.out.println("水印文本:\"" + watermarkSrc + "\",文本长度:" + watermarkSrc.length());
            String encode = watermarkUtils.encode(watermarkSrc);
            System.out.println("水印编码:\"" + encode + "\",编码长度:" + encode.length());
    
            System.out.println("=================================");
            System.out.println("文本前添加水印");
            String result = watermarkUtils.addWatermark(input, encode, WATERMARK_POS_HEAD);
            System.out.println("输出:\"" + result + "\",文本长度:" + result.length());
            result = watermarkUtils.extractWatermark(result, WATERMARK_POS_HEAD);
            String watermark = watermarkUtils.decode(result);
            System.out.println("提取水印并解码:" + watermark);
    
            System.out.println("=================================");
            System.out.println("文本后添加水印");
            result = watermarkUtils.addWatermark(input, encode, WATERMARK_POS_TAIL);
            System.out.println("输出:\"" + result + "\",文本长度:" + result.length());
            result = watermarkUtils.extractWatermark(result, WATERMARK_POS_TAIL);
            watermark = watermarkUtils.decode(result);
            System.out.println("提取水印并解码:" + watermark);
     }
    

    执行后输出,单纯从文本上看是不是没有变化呢,不过长度有变化,水印已经嵌入文本中了。

    原文本:"测试下水印添加",文本长度:7
    水印文本:"我是小白,我的工号为123456",文本长度:16
    水印编码:"‌​​‌‌‌​‌‌‌‌​‌‌‌​‌​​‌‌​​‌‌‌​‌​​​​‌​‌​​​‌‌‌‌‌‌​​​​‌​​​‌​​‌‌​​​​​‌​​​​​​​​​‌‌‌‌​​‌‌‌​​‌‌‌​‌‌‌‌​‌‌‌​‌​​​‌​​‌​‌‌‌‌​‌‌‌​‌​​​‌​​​​‌‌​‌​‌​‌​‌‌​​​​​​‌​​​‌​‌‌​​​‌‌‌​​​‌​‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌​‌‌‌‌‌‌‌‌‌‌‌​​‌‌​​‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌​‌‌‌‌‌‌‌‌‌‌​​‌​​‌",编码长度:512
    =================================
    文本前添加水印
    输出:"‌​​‌‌‌​‌‌‌‌​‌‌‌​‌​​‌‌​​‌‌‌​‌​​​​‌​‌​​​‌‌‌‌‌‌​​​​‌​​​‌​​‌‌​​​​​‌​​​​​​​​​‌‌‌‌​​‌‌‌​​‌‌‌​‌‌‌‌​‌‌‌​‌​​​‌​​‌​‌‌‌‌​‌‌‌​‌​​​‌​​​​‌‌​‌​‌​‌​‌‌​​​​​​‌​​​‌​‌‌​​​‌‌‌​​​‌​‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌​‌‌‌‌‌‌‌‌‌‌‌​​‌‌​​‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌​‌‌‌‌‌‌‌‌‌‌​​‌​​‌测试下水印添加",文本长度:519
    提取水印并解码:我是小白,我的工号为123456
    =================================
    文本后添加水印
    输出:"测试下水印添加‌​​‌‌‌​‌‌‌‌​‌‌‌​‌​​‌‌​​‌‌‌​‌​​​​‌​‌​​​‌‌‌‌‌‌​​​​‌​​​‌​​‌‌​​​​​‌​​​​​​​​​‌‌‌‌​​‌‌‌​​‌‌‌​‌‌‌‌​‌‌‌​‌​​​‌​​‌​‌‌‌‌​‌‌‌​‌​​​‌​​​​‌‌​‌​‌​‌​‌‌​​​​​​‌​​​‌​‌‌​​​‌‌‌​​​‌​‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌​‌‌‌‌‌‌‌‌‌‌‌​​‌‌​​‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌​‌‌‌‌‌‌‌‌‌‌​​‌​​‌",文本长度:519
    提取水印并解码:我是小白,我的工号为123456
    

    我们把输出的文本复制到bejson中,可以看到水印的占位哦。
    在这里插入图片描述

    展开全文
  • 一种时域扩频音频水印技术的实现

    千次阅读 2017-12-13 11:46:07
    典型的数字音频水印系统如下图所示:   常见水印算法: 1、 利用音频掩蔽现象的水印技术 2、 最低比特位水印算法 3、 回声隐藏技术 4、 相位编码水印技术 5、 基于扩频技术的时域水印算法——比较流行...

    典型的数字音频水印系统如下图所示:

     

    常见水印算法:

    1、  利用音频掩蔽现象的水印技术

    2、  最低比特位水印算法

    3、  回声隐藏技术

    4、  相位编码水印技术

    5、  基于扩频技术的时域水印算法——比较流行的算法,保密性好,对音频压缩、低通滤波、噪声干扰抵抗性好,但嵌入数据较少,对同步攻击抵抗差。基于扩频技术的算法是稳健性水印的奠基性算法。

    6、  基于量化索引调制的时域水印算法

    7、  变换域水印算法(DFT DCT DWT)——研究热点

    8、  压缩域嵌入算法


     

    图2.         基于扩频技术的音频水印框图(虚线部分可选)

    基于扩频技术的数字音频水印原理如下:

        假设被嵌入的水印信息比特长度为M ,用w表示水印信息。将音频信号x分成M帧,帧长为N = length(x)/M。对水印信息进行比特重复,扩展成为长度为N的序列。

            1、  根据音频信号的波形对水印信号进行整形:

     其中a是控制水印幅度的常数。

        2、  用FIR对整形后的信号低通滤波,得到水印信号。

        3、  将水印信号与音频信号进行叠加,得到嵌入水印的信号。

        4、  将嵌入水印的信号M帧,长度为N ,按帧与伪随机序列做相关运算结果为C(k),当C(k)>0,w(k)=0;否则w(k) =1. 将w转为比特数据,即可得到水印信息。

        5、  用误码率BER表示原始水印与提取水印的误差。


    处理结果如下:


    图1、原始语音时域图;图2、原始频谱图;图3、嵌入水印时域图;图4、嵌入水印频谱图


    提取水印信息,以及与原始水印信号的误码率

    展开全文
  • 提出了一种新的基于DWT 和SVD 变换技术的数字图像零水印算法。该方案利用载体图像变换后的特征信息与水印信息 构造出版权信息,最后经加密再注册到I P R 中;而检测水印时,需要版权信息与载体图像的特征信息;此外...
  • 【摘要】数字水印技术作为一门有效地多媒体版权保护技术受到越来越多关注,它主要是通过在原始信号(如图像、声音、视频信号)中嵌入标记信号(数字水印)以达到保全保护目的。本文提出一种基于小波变换(DWT)...
  • 随着现代科学技术进步,数字水印技术逐渐成为了人们研究一个热点问题。本文旨在研究临界可见误差(Just Noticeable Difference, JND)模型小波域图像盲水印算法,并根据人类视觉系统(Human Visual System, ...
  • 为保护数字文本的知识产权,提出一种利用...算法对文本的格式和内容不作任何修改,具有很强的隐蔽性和鲁棒性,能有效抵抗常见的格式变换和攻击,同时能提供较大的水印容量,与其他文本水印算法相比具有一定的优越性。
  • 针对目前大多数图像水印技术是关于灰度图像并且基于离散小波变换研究,提出了一种基于整型小波变换(Integer Wavelet Transform,IWT)将彩色数字水印嵌入到彩色宿主图像中算法。采用YCbCr色彩空间Y分量嵌入...
  • 图像处理技术.zip

    2021-01-15 20:38:11
    图像处理技术大作业设计、课件,图像处理技术实验报告、包括MATLAB代码,图像处理技术作业答案,常见图像处理MATLAB仿真实验、图像平滑和锐化 实验、图像分割实验、图像数字水印实验
  • 主要实验有常见图像处理MATLAB仿真、图像平滑和锐化、图像分割、 图像数字水印,包含MATLAB程序以及报告,实验硬件配置等
  • 数字水印:鲁棒性水印:数字指纹、数字水印:可见数字水印、不可见数字水印;脆弱性水印 应用:数据保密、数据不可抵赖性、数据完整性、数字作品版权保护、防伪 常见技术:替换技术、变换技术、扩频技术、统计...
  •  2.7 信息隐藏与数字水印  2.7.1 信息隐藏  2.7.2 数字水印  2.7.3 信息隐藏实例  2.8 无线网络中密码应用  2.9 思考与练习 第3章 计算机硬件与环境安全  3.1 计算机硬件与环境安全问题  3.1.1 计算机硬件...
  • 根据PDF417与提升小波变换的特点,提出一种基于PDF417和提升小波变换的数字图像水印算法。首先将水印信息进行PDF417编码,并在密钥控制下进行混沌序列置乱后得到二值水印图像;最后使用小波提升技术对原始图像进行小...
  • 图像几何矩

    万次阅读 多人点赞 2016-03-30 15:22:16
    矩是描述图像特征的算子,如今矩技术已广泛应用于图像检索和识别 、图像匹配 、图像重建 、数字压缩 、数字水印及运动图像序列分析等领域。常见的矩描述子可以分为以下几种:几何矩、正交矩、复数矩和旋转矩。
  • 图像中矩概念

    千次阅读 2017-11-08 21:24:51
    矩是描述图像特征的算子,如今矩技术已广泛应用于图像检索和识别 、图像匹配 、图像重建 、数字压缩 、数字水印及运动图像序列分析等领域。常见的矩描述子可以分为以下几种:几何矩、正交矩、复数矩和旋转矩。  ...
  • 全书分6篇共25章,主要内容有C#开发环境使用、C#语言基础应用、字符串处理技术、数组和集合使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows...
  • 矩是描述图像特征的算子,如今矩技术已广泛应用于图像检索和识别 、图像匹配 、图像重建 、数字压缩 、数字水印及运动图像序列分析等领域。常见的矩描述子可以分为以下几种:几何矩、正交矩、复数矩和旋转矩。 其中...
  • 上个世纪50年代,计算机处理图形、图像信息技术便已经开始被应用;上世纪60年代,计算机应用于改善图像质量已形成了单独的学科门类。 数字图像处理技术有很多分支技术。...常见的数字水印和图像的信息伪装等。
  • 矩:数学矩-图像矩

    千次阅读 2017-11-23 11:54:15
    矩是描述图像特征的算子,如今矩技术已广泛应用于图像检索和识别 、图像匹配 、图像重建 、数字压缩 、数字水印及运动图像序列分析等领域。常见的矩描述子可以分为以下几种:几何矩、正交矩、复数矩和旋转矩。  ...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

常见的数字水印技术