clear;close all;
RGB = imread('1.jpg'); %读取彩色图像
I = rgb2gray(RGB); %彩色图像灰度化
figure(1);subplot(2,1,1);
imshow(RGB);title('原始图像'); %显示原图像
subplot(2,1,2);imshow(I);title('灰度值图像'); %显示灰度值图像
I = double(I)/256; %归一化
I2 = imcrop(I,[500 10 1900 1900]); %剪切原始图像
figure(2);imshow(I2);title('剪切后的图像');
figure(3);imhist(I2);title('剪切后图像直方图');
I21= imresize(I2,[1024,1024]); %调整图像大小
I3 = imadjust(I2,[0.1 0.9],[]) ; %直方图均衡化
figure(4);imhist(I3);title('均衡化后的直方图');
figure(5);imshow(I3);title('均衡化后的图像');
I31= imresize(I3,[1024,1024]); %调整图像大小
W1=imread('5.png');W = rgb2gray(W1); %读入水印图像并灰度化
figure(6);imshow(W);title('水印图像');
W = imresize(W,[128,128]); %调整水印图像
figure(7);imshow(W);title('标准化后的水印图像');
%嵌入水印
for p = 1:128 %取水印图像所有像素
for q = 1:128
x = (p-1)*8+1;y = (q-1)*8+1;
block2 = I21 ( x :x + 8 - 1 , y :y + 8 - 1 ); %宿主图像分块
block3 = I31 ( x :x + 8 - 1 , y :y + 8 - 1) ;
block2 = dct2 ( block2 ) ;
block3 = dct2 ( block3 ) ;
if W(p,q)==0;
a = - 1;
else
a = 1;
end
block2 (1,1) = block2 (1,1) * ( 1+ a * 0.005 ) ; %嵌入过程
block3 (1,1) = block3 (1,1) * ( 1+ a * 0.005 ) ;
block2 = idct2 ( block2 ) ;
block3 = idct2 ( block3 ) ;
I4( x: x + 8 - 1,y :y + 8 - 1) = block2 ;
I5( x :x + 8 - 1,y :y + 8 - 1) = block3 ;
end;
end;
figure( 8 ) ;imshow(I4,[]);title('I2嵌入水印后的图像');
figure( 9 ) ;imshow(I5,[]);title('I3嵌入水印后的图像');
%提取水印
for p = 1 :128 %取到所有水印图像像素点
for q = 1 :128
x = ( p - 1 ) * 8 + 1 ;y = ( q - 1 ) * 8 + 1;
if (I4 ( x , y ) - I21 ( x , y ) ) > 0 %比较
F( p ,q ) = 1 ;
else
F( p ,q ) = 0 ;
end
if (I5 ( x ,y) - I31 ( x , y ) ) > 0 %比较
H( p ,q ) =1 ;
else
H( p ,q ) = 0 ;
end
end
end
figure(10) ;imshow(H,[]);title('提取水印图像');
figure(11) ;imshow(F,[]);title('提取水印图像');