各位大侠帮帮忙,我的毕业设计是数字水印程序设计,我想用java实现,现在就是没有一点思想,老师让做的也比较简单,就是给个图片中加入信息(水印)并能提取出来,用java写两个程序就行了,我现在实在是没有一点思想,希望高手能提供一点帮助,能提供些代码更好,或者别的什么都行,我真的想不到从什么地方入手,高手们帮忙啊,谢谢了!

解决方案 »

  1.   

    我的一个老师让我也做这个课题,但我没做,不感冒。
    我们老师已经做好了,是用vc6做的,你还是需要知道其原理才能动手做软件:三个环节:水印设计、噪声消除和信号放大。
    采用此设计出于以下几点考虑:① 色彩反差大,容易确认攻击点。② 同值象素聚集,可以进行自我修复。③ 增加了人眼对其的分辨力。④增加了信息的冗余度。⑤便于和数值形式的水印码建立对应关系。
    从信号角度看,它实际上是增加了信号源的强度,因为较强的信号源能保证接收信号的强度。
    在多媒体课件中,使用3张相同的图像不会引起攻击者的注意(比如背景)。我们在这3张图像中分别嵌入3个水印。除图1的水印外,我们还嵌入一张纯白水印和一张纯黑水印。3个水印尺寸完全相同。
    我们基于以下几点考虑:
    (1)攻击者为了达到破坏课件水印的目的,通常会对所有可疑媒体进行攻击。因此,我们有理由相信3个水印图像都遭到了攻击。这3个水印图像由于相似,经历的攻击也应大致相同。
    (2)课件作为一个整体在网络上传播,各媒体游历了相同的过程,系统噪声的增加对于它们来说机会均等。
    (3)攻击者的攻击是有限度的,造成原图像不可用的攻击对于攻击者也是没意义的。
    依据嵌入方的记录,我们从3个图像中分别提取3个水印,我们称为wb、W、B。wb为真正水印,它代表一些有用的版权信息。W为白水印,B为黑水印。W在各种攻击和噪声影响下,将通过颜色变化表现出来,在我们的测试中它出现了很多黑点。B也产生了变化,不过它是以白点形式表现出来的。
    降噪过程如下:
    (1)定位W水印中的攻击点。
    (2)利用攻击点校正原水印, 得到wb-W。
    (3)定位B水印中的攻击点。
    (4)利用攻击点校正原水印, 得到wb-B。
    至此,我们得到了两个校正水印。如果攻击程度较弱,则提取水印已经有所改观。为了获得性能更好的结果。我们还需将信号放大。
    信号放大
    不同的算法可能对于颜色的处理方法不同,使用一种颜色进行校正,不可信程度增高。为此,我们提取两个校正结果中可信度高的部分。即认为用白色水印校正的结果中,白色区域是可信的,而用黑色水印校正的结果中,黑色区域是可信的。最后用可信区域对提取水印wb进行置换。
    置换过程如下:
    (1)两种校正结果按块划分,块的大小与原水印的划分块大小相同。(图一中有18个块)。
    (2)对于第M个块,计算两种校正结果中对应块的灰度值的和,得S1、S2。
    (3)计算纯白和纯黑块的灰度值的和,得W1、B1。
    (4)计算差值(S1-W1)和(S2-B1)的绝对值A1、A2。
    (5)如果A1>A2,原水印第M块被黑色校正结果的第M块置换。
    (6)如果A1<A2,原水印第M块被白色校正结果的第M块置换。
    如果想使信号进一步放大,则第(5)步用纯黑块置换,第(6)步用纯白块置换。
    以下是部分代码:
    blocksize=18;
    for (q=0:1)
    for (k=0:8)
    w=0;//初始化差值A1
    b=0; //初始化差值A2
    for (i=1+q*10:10+q*10)
        for (j=1+10*k:10+k*10)
            w=255-Iw(i,j)+w;
            b=Ib(i,j)+b;
            
        end
    end
    if (w<b) //比较差值A1和A2
        for (i=1+q*10:10+q*10)
        for (j=1+10*k:10+k*10)
           J4(i,j)=255;//置换
        end
        end
    else
        for (i=1+q*10:10+q*10)
        for (j=1+10*k:10+k*10)
           J4(i,j)=0; 置换
        end
        end
    end
    end
    end