`

数字水印DCT变换域算法实现

 
阅读更多

随机间隔法:

function [row,col]=randinterval(matrix,count,key)

[m,n]=size(matrix);

interval1=floor(m*n/count)+1;

interval2=interval1-2;

if interval2==0

    error('载体小不能秘信息藏进去');

end

rand('seed',key);

a=rand(1,count);

row=zeros([1 count]);

col=zeros([1 count]);

r=1;

c=1;

row(1,1)=r;

col(1,1)=c;

for i=2:count

    if a(i)>=0.5

        c=c+interval1;

    else

        c=c+interval2;

    end

    if c>n

        r=r+1;

        if r>m

            error('载体小不能秘信息藏进去');

        end

        c=mod(c,n);

        if c==0

            c=1;

        end

    end

    row(1,i)=r;

    col(1,i)=c;

end

嵌入:

function [count,msg,result]=hidedctadv(image,imagegoal,msg,key,alpha)

%image='lena.jpg';

%imagegoal='lenahide.jpg';

%msg='1.txt';

%key=1982;

%alpha=1;

frr=fopen(msg,'r');

[msg,count]=fread(frr,'ubit1');

fclose(frr);

data0=imread('lena.jpg');

data0=double(data0)/255;

data=data0(:,:,1);

T=dctmtx(8);

DCTrgb=blkproc(data,[8 8],'P1*x*P2',T,T');

[row,col]=size(DCTrgb);

row=floor(row/8);

col=floor(col/8);

a=zeros([row col]);

[k1,k2]=randinterval(a,count,key);

for i=1:count

    k1(1,i)=(k1(1,i)-1)*8+1;

    k2(1,i)=(k2(1,i)-1)*8+1;

end

temp=0;

for i=1:count

    if msg(i,1)==0

        if DCTrgb(k1(i)+4,k2(i)+1)>DCTrgb(k1(i)+3,k2(i)+2)

            temp=DCTrgb(k1(i)+4,k2(i)+1);

            DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2);

            DCTrgb(k1(i)+3,k2(i)+2)=temp;

        end

    else

         if DCTrgb(k1(i)+4,k2(i)+1)<DCTrgb(k1(i)+3,k2(i)+2)

            temp=DCTrgb(k1(i)+4,k2(i)+1);

            DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2);

            DCTrgb(k1(i)+3,k2(i)+2)=temp;

        end

    end

    if DCTrgb(k1(i)+4,k2(i)+1)>DCTrgb(k1(i)+3,k2(i)+2)

        DCTrgb(k1(i)+3,k2(i)+2)=DCTrgb(k1(i)+3,k2(i)+2)-alpha;

    else

        DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+4,k2(i)+1)-alpha;

    end

end

DCTrgb1=DCTrgb;

data=blkproc(DCTrgb,[8 8],'P1*x*P2',T',T);

result=data0;

result(:,:,1)=data;

imwrite(result,imagegoal);

 

提取:

function result=extractdctadv(image,msg,key,count)

data0=imread(image);

data0=double(data0)/255;

data=data0(:,:,1);

T=dctmtx(8);

DCTcheck=blkproc(data,[8 8],'P1*x*P2',T,T');

[row,col]=size(DCTcheck);

row=floor(row/8);

col=floor(col/8);

a=zeros([row col]);

[k1,k2]=randinterval(a,count,key);

for i=1:count

    k1(1,i)=(k1(1,i)-1)*8+1;

    k2(1,i)=(k2(1,i)-1)*8+1;

end

frr=fopen(msg,'a');

for i=1:count

    if DCTcheck(k1(i)+4,k2(i)+1)<=DCTcheck(k1(i)+3,k2(i)+2)

        fwrite(frr,0,'bit1');

        result(i,1)=0;

    else

        fwrite(frr,1,'bit1');

        result(i,1)=1;

    end

end

fclose(frr);

 

test:       

function test()

 key=1982;

 count=0;

 alpha=0.5;

 [count,msg,data]=hidedctadv('lena.jpg','lenahide.jpg','1.txt',key,alpha);

 tt=extractdctadv('lenahide.jpg','2.txt',key,count);

 

分享到:
评论

相关推荐

    基于DCT变换的数字水印算法.zip

    《基于DCT变换的数字水印算法》 在信息技术领域,数字水印技术是一种重要的版权保护手段,它通过在原始数据中嵌入不可见或难以察觉的信息,来证明数据的所有权或者验证其真实性。本项目重点探讨了一种利用离散余弦...

    DCT域图像数字水印算法的分析和实现源代码

    总的来说,DCT域图像数字水印算法结合了DCT变换的优势,能够在保证图像质量的同时实现水印的有效隐藏。通过阅读和理解源代码,读者可以进一步了解这一技术的实现细节,并根据实际需求进行调整和优化。

    基于DCT数字水印算法的matlab实现源代码

    在DCT数字水印算法中,原始图像首先被分割成多个小块,每个小块进行DCT变换。水印信息通过修改DCT系数来嵌入,通常是在高频或中频系数上添加微小的扰动。这种扰动对人类视觉系统来说是不可见的,但可以通过逆变换和...

    基于DCT变换的数字水印算法

    在MATLAB环境中,我们可以利用其强大的图像处理和数值计算功能来实现这种DCT变换的数字水印算法。MATLAB提供了DCT函数`dct2()`,以及各种图像处理和分析工具,如图像的读取、显示、滤波和统计分析等,这使得在实验和...

    一种基于DCT变换域的数字水印设计方案.pdf

    本文提出的一种基于DCT变换域的数字水印设计方案,不仅考虑了人眼视觉特性的多方面因素,还充分利用了DCT变换的优势,实现了在保护图像视觉质量的同时,增强了水印的鲁棒性和嵌入能力。未来的研究方向可以进一步探索...

    基于DCT变换的数字水印算法,基于dct变换的数字水印实现,matlab

    在实现DCT数字水印的过程中,可以利用MATLAB的函数高效地进行DCT变换、系数操作和反变换,大大简化了算法的实现。 5. **数字水印算法与imagewatermark**: "imagewatermark"可能指的是用于图像水印处理的一种特定...

    dct数字水印算法

    DCT(Discrete Cosine Transform,离散余弦变换)数字水印算法是一种基于DCT域的数字水印技术,本算法利用图像的频域特性来嵌入和提取水印信息。该算法的核心思想是将水印信息嵌入到图像的DCT系数中,以达到隐蔽性和...

    基于MATLAB的DCT域数字水印技术实现

    通过MATLAB编程实现了上述基于DCT域的数字水印嵌入与提取算法。实验结果表明,该算法对常见的压缩编码方法具有良好的稳健性。即使图像经过了JPEG等压缩处理,水印信息仍然可以被准确地提取出来。此外,算法还展示了...

    基于DCT的数字水印算法.doc

    2. DCT变换:对小块图像进行DCT变换,将图像从空间域转换到频域。 3. 水印信息嵌入:将水印信息嵌入到频域中的低频部分。 4. 反变换:将频域中的图像反变换回空间域。 5. 重构图像:将所有的小块图像组合起来,形成...

    基于DCT变换的数字水印算法(matlab代码)

    基于DCT变换的数字水印算法 carry_x.bmp 为载体图片 water_x.bmp 为水印图片 test.fig 为图形界面 main.m 为程序执行入口 test.m 为程序主函数 ispsnr.m 为计算峰值信噪比函数(不会再程序中体现) nc.m ...

    基于dct变换的数字水印嵌入算法

    下面我们将深入探讨这个“基于DCT变换的数字水印嵌入算法”。 一、离散余弦变换(DCT) 离散余弦变换是一种信号处理技术,常用于图像和音频压缩,如JPEG和MP3编码。DCT将图像从像素空间转换到频率空间,将空间信息...

    基于DCT数字水印算法的Matlab实现源代码

    本资源提供了一个基于DCT域的数字水印算法的Matlab实现代码,涵盖了水印的生成、嵌入和检测三个主要步骤。该代码可以为数字水印技术的研究和应用提供有价值的参考。 知识点: 1. 数字水印技术:数字水印是一种将...

    一个基于dct变换的数字水印算法的源程序.rar

    描述中提到的“一个基于dct变换的数字水印算法的源程序.rar”,暗示了这个压缩包包含的是用某种编程语言(可能是C、C++、Python等)实现的DCT数字水印算法的源代码文件。通过分析这些源代码,我们可以深入了解如何在...

    DCT变换域数字水印

    在MATLAB实现DCT变换域数字水印时,需要注意以下几点: - **选择合适的水印**:水印可以是文本、图像或者其他形式的标识,关键是要保证其在被嵌入后不影响原始媒体的质量。 - **选择合适的嵌入位置和强度**:根据...

    matlab实现数字水印DCT算法

    音频数字水印技术的一种算法,利用DCT变换实现,载入的水印为图像

Global site tag (gtag.js) - Google Analytics