http://home.q.yesky.com/space-208890-do-blog-id-279131.html
02-02 14:06
% Script file:dctblock.m
%
% Purpose:an algorithm to achieve the embeding watermarking to a image by
% dct bloking and hvs,then detect the watermarking by
% comparability.
%
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 11/19/03 Mao Li Original code
% Define variables:
% a0 --Original gray image matrix
% a1 --Embeded gray image matrix
% da0 --the dct original gray image matrix
% ca0 --the column vector of a0
% cda0 --the column vector of da0
% cda1 --the embeded column vector of cda0
% da1 --the image matrix of cda1
% r --image matrix row
% c --image matrix column
% k --the number of blocks
% i --the subscript of a matrix
% SNR --the similarity degree
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% input original data ,block break and convert a block into a column vector %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
a0=imread('D:\work\pic\lena.bmp');
%a0=rgb2gray(a0);
[r,c]=size(a0);
k=(r*c/64);
da0=blkproc(a0,[8,8],'dct2');
ca0=im2col(a0,[8,8],'distinct');
cda0=im2col(da0,[8,8],'distinct');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% produce the watermarking signal (random sequence) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
randn('state',110);
w0=randn(1,5120);
w0=reshape(w0,5,1024);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% changing submultiple %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
alpha=0.02;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% embed the watermarking into the low frequences coefficients %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cda1=cda0;
for i=1:k
cda1(2,i)=cda0(2,i)+alpha*w0(1,i);
cda1(3,i)=cda0(3,i)+alpha*w0(2,i);
cda1(9,i)=cda0(9,i)+alpha*w0(3,i);
cda1(10,i)=cda0(10,i)+alpha*w0(4,i);
cda1(17,i)=cda0(17,i)+alpha*w0(5,i);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% reconstruct the watermarking %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
da1=col2im(cda1,[8,8],[r,c,],'distinct');
a1=blkproc(da1,[8,8],'idct2');
figure;
subplot(1,2,1),imshow(a0,[]),title('the original image');
subplot(1,2,2),imshow(a1,[]),title('the embeded image');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% detect the watemarking %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dca0=blkproc(a0,[8,8],'dct2');
dca1=blkproc(a1,[8,8],'dct2');
cdca0=im2col(dca0,[8,8],'distinct');
cdca1=im2col(dca1,[8,8],'distinct');
for i=1:k
w1(1,i)=(cdca1(2,i)-cdca0(2,i))/alpha;
w1(2,i)=(cdca1(3,i)-cdca0(3,i))/alpha;
w1(3,i)=(cdca1(9,i)-cdca0(9,i))/alpha;
w1(4,i)=(cdca1(10,i)-cdca0(10,i))/alpha;
w1(5,i)=(cdca1(17,i)-cdca0(17,i))/alpha;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% calculate the similarity degree %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SNR=sum(sum(w0.*w1))/sqrt(sum(sum(w1.^2)))
% Script file:dct_high.m
%
% Purpose:an algorithm to achieve the embeding watermarking to a image by
% dct bloking and hvs,then detect the watermarking by
% comparability.
%
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 11/25/03 Mao Li Original code
% Define variables:
% a0 --Original gray image matrix
% a1 --Embeded gray image matrix
% da0 --the dct original gray image matrix
% ca0 --the column vector of a0
% cda0 --the column vector of da0
% cda1 --the embeded column vector of cda0
% da1 --the image matrix of cda1
% r --image matrix row
% c --image matrix column
% k --the number of blocks
% i --the subscript of a matrix
% SNR --the similarity degree
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% input original data ,block break and convert a block into a column vector %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
a0=imread('D:\work\pic\lena.bmp');
%a0=rgb2gray(a0);
[r,c]=size(a0);
k=(r*c/64);
da0=blkproc(a0,[8,8],'dct2');
ca0=im2col(a0,[8,8],'distinct');
cda0=im2col(da0,[8,8],'distinct');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% produce the watermarking signal (random sequence) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
randn('state',110);
w0=randn(1,5120);
w0=reshape(w0,5,1024);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% changing submultiple %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
alpha=0.02;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% embed the watermarking into the low frequences coefficients %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cda1=cda0;
for i=1:k
cda1(48,i)=cda0(48,i)+alpha*w0(1,i);
cda1(55,i)=cda0(55,i)+alpha*w0(2,i);
cda1(56,i)=cda0(56,i)+alpha*w0(3,i);
cda1(62,i)=cda0(62,i)+alpha*w0(4,i);
cda1(63,i)=cda0(63,i)+alpha*w0(5,i);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% reconstruct the watermarking %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
da1=col2im(cda1,[8,8],[r,c,],'distinct');
a1=blkproc(da1,[8,8],'idct2');
figure;
subplot(1,2,1),imshow(a0,[]),title('the original image');
subplot(1,2,2),imshow(a1,[]),title('the embeded image');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% detect the watemarking %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dca0=blkproc(a0,[8,8],'dct2');
dca1=blkproc(a1,[8,8],'dct2');
cdca0=im2col(dca0,[8,8],'distinct');
cdca1=im2col(dca1,[8,8],'distinct');
for i=1:k
w1(1,i)=(cdca1(48,i)-cdca0(48,i))/alpha;
w1(2,i)=(cdca1(55,i)-cdca0(55,i))/alpha;
w1(3,i)=(cdca1(56,i)-cdca0(56,i))/alpha;
w1(4,i)=(cdca1(62,i)-cdca0(62,i))/alpha;
w1(5,i)=(cdca1(63,i)-cdca0(63,i))/alpha;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% calculate the similarity degree %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SNR=sum(sum(w0.*w1))/sqrt(sum(sum(w1.^2)))
http://www.ilovematlab.cn/thread-32752-1-1.html
Matlab水印请高手帮忙看看这个程序的问题
这个程序是对图像进行水印的添加，分离及检测
但是换了其他的图像之后就会出错，我也不知道为什么只能是woman图像
错误如下：
??? Error using ==> plus
Number of array dimensions must match for binary array op.