в
а – гистограмма исходного
изображения; б – гистограмма маркированного
изображения при α = 0.07; в – гистограмма
маркированного изображения при α = 0.1
Рисунок 7.2 – Сравнение гистограмм
при разных коэффициентах α
PSNR полученного
изображения, при выборе коэффициента
α = 0.1, составляет 25dB. PSNR извлеченного водяного
знака, при коэффициенте α = 0.1, составляет
73dB.
При увеличении коэффициента α, снижается
качество маркированного изображение,
но повышается качество извлеченного
водяного знака. Поэтому перед началом
внедрения ЦВЗ в изображение необходимо
рассчитать оптимальный коэффициент встраивания
α.
8. Пример внедрения
водяного знака (qr-кода) в изображение
Исходный код
программы в приложении B
В данном
алгоритме мы производим операции
с изображением. Внедряем в исходное
изображение qr код. Извлекаем из маркированного
изображения водяной знак, и рассчитываем
качество внедрения (PSNR).
а
б
в
г
а – исходное изображение; б
– водяной знак; в – маркируемое изображение;
г – извлеченный водяной знак
Рисунок 8.1 – Полученные изображения
при коэффициенте α = 0.07
PSNR полученного изображения,
при выборе коэффициента α = 0.07, составляет
28dB. PSNR извлеченного водяного знака, при
коэффициенте α = 0.07, составляет 277dB.
Гистограмма
оригинального изображения имеет
небольшие отличия от гистограммы
маркированного изображения (α = 0.07),
что говорит о хорошем качестве
встраивания, но при α = 0.1, гистограммы
сильно различаются.
а
б
в
а – гистограмма исходного
изображения; б – гистограмма маркированного
изображения при α = 0.07; в – гистограмма
маркированного изображения при α = 0.1
Рисунок 8.2 – Сравнение гистограмм
при разных коэффициентах α
PSNR полученного
изображения, при выборе коэффициента
α = 0.1, составляет 26dB. PSNR извлеченного водяного
знака, при коэффициенте α = 0.1, составляет
282dB.
При увеличении коэффициента
α, снижается качество маркированного
изображение, но повышается качество извлеченного
водяного знака. Поэтому перед началом
внедрения ЦВЗ в изображение необходимо
рассчитать оптимальный коэффициент встраивания
α.
Заключение
Предложен
алгоритм, основанный на встраивании
цифровых водяных знаков (ЦВЗ) в
пространственную область изображения
и извлечения из него ЦВЗ. Получены
аналитические выражения для
среднеквадратической ошибки,
вызываемой процедурой встраивания
при наличии случайной атаки, зависящие
от характеристик изображений, процедуры
встраивания и атаки. Методом моделирования
исследовалась устойчивость предложенного
алгоритма к случайной атаке, а также к
сжатию изображения по стандарту JPEG.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. Cox J., Miller M. L. and Bloom J.A. Digital Watermarking.
- Morgan Kaufmann, 2001.
2. Hartung M., Kutter M. Multimedia Watermarking
Techniques //Proceedings of the IEEE. – July,
1999. - Vol. 87, № 7. - P. 1079-1086.
3. Anand D., Niranjan U.C. Watermarking Medical Images
with Patient Information //Proc. IEEE/EMSB
Conference. - Hong Kong, China, Oct. 1998. – P.
703-706.
4. Асатрян Д.Г., Ланина Н.С. Адаптивный
алгоритм встраивания цифровых водяных
знаков в
изображение //Труды научной
годичной конференции Российско-Армянского
(Славянского)
государственного университета.
- Ереван, 2006. - Т.1. - C. 87-90.
5. Podilchuk C I., Zeng W. Image-adaptive watermarking
using visual models //IEEE Journal of Selected
Areas in Communication. – 1998. - 16(4). – P.
525–539.
6. Chang-Hsing Lee, Yeuan-Kuen Lee. An Adaptive Digital
Image Watermarking Technique for
Copyright Protection // IEEE Transactions on Consumer
Electronics. – 1999. - V. 45, № 4. - P. 1005-
1015.
7. Asatryan D.G., Lanina N.S., Shahverdyan H.S. Adaptive
Robust Algorithm for Digital Watermarking
of Medical Images //Proc. of 6th Int. Conf. on Computer
Science and Information Technologies -
CSIT'2007. - Yerevan, 2007. - P. 161-164.
Приложение А
clear;
clc
img=imread('F:\works\kursa4\lena.png');
img=imresize(img,[512,512]);
img=rgb2gray(img);
[M,N]=size(img);
img=double(img);
[Uimg,Simg,Vimg]=svd(img);
Simg_temp=Simg;
img_wat=imread('F:\works\kursa4\shevel.png');
img_wat=imresize(img_wat,[512,512]);
img_wat=rgb2gray(img_wat);
alfa= input('The alfa Value = ');
[x,y]=size(img_wat);
img_wat=double(img_wat);
for i=1:x
for j=1:y
Simg(i,j)=(1-alfa)*Simg(i,j) + alfa * img_wat(i,j);
end
end
% SVD for Simg (SM)
[U_SHL_w,S_SHL_w,V_SHL_w]=svd(Simg);
Wimg =Uimg* S_SHL_w * Vimg';
figure(1)
imhist(uint8(img));
title('Histogramma of original image')
figure(2)
imshow(uint8(img));
title('The Original Image')
figure(3)
imshow(uint8(img_wat));
title('The Watermark ')
figure(4)
imshow(uint8(Wimg));
title('The Watermarked Image')
figure(5)
imhist(uint8(Wimg));
title('Histogramma of watermarking image')
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%calculate image quality degradation after inserting
watermark
%%%%%%%%%%%%%%%%%%%%%%%%%%%
mse=mean(squeeze(sum(sum((double(img)-double(Wimg)).^2))/(M*N)));
PSNR=10*log10(255^2./mse);
msg=sprintf('\n\n-------------------------\nWatermark
by SVD PSNR=%fdB\n-----------------------------\n\n', PSNR);
disp(msg);
%--------------------------------------------------------------------------
% %% Extraction Part
% -------------------------------------------------------------------------
[UWimg,SWimg,VWimg]=svd(Wimg);
D_1=U_SHL_w * SWimg * V_SHL_w';
for i=1:x
for j=1:y
Watermark(i,j)= (D_1(i,j)
- Simg_temp(i,j)*(1-alfa))/alfa;
end
end
figure(6)
imshow(uint8(Watermark));
title('The Extracted Watermark ')
mse=mean(squeeze(sum(sum((double(img_wat)-(Watermark)).^2))/(M*N)));
PSNR=10*log10(255^2./mse);
msg=sprintf('\n\n-------------------------\nWatermark
by SVD PSNR=%fdB\n-----------------------------\n\n', PSNR);
Приложение B
clear;
clc
img=imread('F:\works\kursa4\lena.png');
img=imresize(img,[512,512]);
img=rgb2gray(img);
[M,N]=size(img);
img=double(img);
[Uimg,Simg,Vimg]=svd(img);
Simg_temp=Simg;
% read watermark
img_wat=imread('F:qrkod.png');
img_wat=imresize(~img_wat,[512,512]);
alfa= input('The alfa Value = ');
[x,y]=size(img_wat);
img_wat=double(img_wat);
for i=1:x
for j=1:y
Simg(i,j)=(1-alfa)*Simg(i,j) + alfa * img_wat(i,j);
end
end
% SVD for Simg (SM)
[U_SHL_w,S_SHL_w,V_SHL_w]=svd(Simg);
Wimg =Uimg* S_SHL_w * Vimg';
figure(1)
imhist(uint8(img));
title('Histogramma of original image')
figure(2)
imshow(uint8(img));
title('The Original Image')
figure(3)
imshow(img_wat);
title('The Watermark ')
figure(4)
imshow(uint8(Wimg));
title('The Watermarked Image')
figure(5)
imhist(uint8(Wimg));
title('Histogramma of watermarking image')
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%calculate image quality degradation after inserting
watermark
%%%%%%%%%%%%%%%%%%%%%%%%%%%
mse=mean(squeeze(sum(sum((double(img)-double(Wimg)).^2))/(M*N)));
PSNR=10*log10(255^2./mse);
msg=sprintf('\n\n-------------------------\nWatermark
by SVD PSNR=%fdB\n-----------------------------\n\n', PSNR);
disp(msg);
%--------------------------------------------------------------------------
% %% Extraction Part
% -------------------------------------------------------------------------
[UWimg,SWimg,VWimg]=svd(Wimg);
D_1=U_SHL_w * SWimg * V_SHL_w';
for i=1:x
for j=1:y
Watermark(i,j)= (D_1(i,j)
- Simg_temp(i,j)*(1-alfa))/alfa;
end
end
figure(6)
imshow(Watermark);
title('The Extracted Watermark ')
mse=mean(squeeze(sum(sum((double(img_wat)-(Watermark)).^2))/(M*N)));
PSNR=10*log10(255^2./mse);
msg=sprintf('\n\n-------------------------\nWatermark
by SVD PSNR=%fdB\n-----------------------------\n\n', PSNR)