加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MATLAB基于DCT的水印嵌入及提取 离散余弦变换

(2013-06-09 10:23:47)
标签:

matlab

水印

dct

水印嵌入

水印提取

分类: MATLAB图像处理

 

 

clc
clear
close all

input = 'lena12.bmp';

Alpha = 0.03;

lfile = imread(input);
lfile = rgb2gray(lfile);

bfile = watermark( input, Alpha );

ex_watermark = exactwatermark(bfile,lfile);

 

 

子函数

 

%嵌入

function [result]=watermark( input, Alpha )
 
infile = imread(input);
[sizeX,sizeY,bitplane] = size(infile);
block = 8;
block_X_num = sizeX / block;
block_Y_num = sizeY / block;
 
D1 = zeros(sizeX,sizeY);
 
infile_gray = rgb2gray(infile);
subplot(2,3,1);imshow(infile_gray);title('Original image');
 
mark=imread('11.bmp');
subplot(2,3,2);imshow(mark);title('Watermark');
 
for m = 1 : block_X_num
    for n = 1 : block_Y_num
        x = (m - 1) * block + 1;
        y = (n - 1) * block + 1;
        dct_block1 = infile_gray(x:x+block-1,y:y+block-1);
        dct_block1 = dct2(dct_block1);
        dct_block1(1,1) = dct_block1(1,1) * (1 + Alpha * mark(m,n)); 
        dct_block1(1,1) = dct_block1(1,1) * (1 + Alpha * mark(m,n)); 

        dct_block1 = idct2(dct_block1);
       
        D1(x:x+block-1,y:y+block-1) = dct_block1; 
    end
end
subplot(2,3,3);imshow(D1,[]);title('vi" = vi * (1 + a * xi)');
result=D1;
end

 

%提取

function [ result ] = exactwatermark(bfile,lfile)
 
[sizeX,sizeY] = size(bfile);
block = 8;
block_X_num = sizeX / block;
block_Y_num = sizeY / block;
result=zeros(block_X_num,block_Y_num);

bfile = double(bfile);
lfile = double(lfile);

for p = 1: block_X_num
    for q = 1: block_Y_num
        x = (p - 1)*8 + 1; y = ( q -1 )*8 + 1;
        if ( lfile(x,y) -  bfile(x,y)) > 0
            result(p , q)  = 1;
        else
            result(p , q) = 0;
        end
    end
end
figure; imshow(result,[]); title('提取出的水印');
figure; imshow(uint8(result)); title('提取出的水印');

end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有