提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
目錄
前言
一、算法原理
二、結(jié)果
總結(jié)
前言
提示:這里可以添加本文要記錄的大概內(nèi)容:
- 數(shù)字水印技術(shù)作為知識(shí)產(chǎn)權(quán)保護(hù)及認(rèn)證的重要手段,正得到廣泛研宄與應(yīng)用。數(shù)字水印技術(shù)是在數(shù)字產(chǎn)品中嵌入秘密信息,以便保護(hù)產(chǎn)品的版權(quán)、證明產(chǎn)品的真實(shí)可靠性、跟蹤盜版行為或提供產(chǎn)品的附加信息。這個(gè)秘密信息被稱為數(shù)字水印。本文通過基于?DWT-DCT-SVD 數(shù)字水印算法,首先對(duì)載體圖像進(jìn)行2級(jí)小波分解,在HH2分量上進(jìn)行分塊,再結(jié)合DCT和SVD技術(shù)嵌入水印,該算法具有更好的不可見性和魯棒性。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、算法原理
- 離散小波變換算法
圖像的離散小波變換一般是通過二維小波變換來實(shí)現(xiàn),小波變換的過程如下圖1所示,首先它將圖像數(shù)據(jù)分割成若干個(gè)行與列組成的矩陣,對(duì)圖像的每一行做一維小波變換獲得原始圖像在水平方向上的低頻分量L和高頻分量H,然后變換所得數(shù)據(jù)的每一列做一維的小波變換,經(jīng)過變換之后圖像就被分解成左上角的相似的一部分LL1,左下角垂直方向的細(xì)節(jié)部分 LH1,右上角水平方向的細(xì)節(jié)部分HL1,右下角對(duì)角線方向的細(xì)節(jié)部分 HH1,再對(duì)其中相似部分LL1再進(jìn)行一級(jí)分解,從而實(shí)現(xiàn)圖像的二級(jí)分解。
通對(duì)過兩次分解后的圖像多分辨率特點(diǎn)進(jìn)行分析可得,圖像多分辨率在空間方向具有很好的選擇性,與人類的通過視覺來獲取事物的特性過程十分吻合。因此,一般把集中原始圖像絕大多數(shù)能量的相似部分稱為逼近子圖。子帶圖像的左上角細(xì)節(jié)部分、右上角的細(xì)節(jié)部分和右下角細(xì)節(jié)部分分別刻畫了原始圖像的邊緣、輪廓和紋理細(xì)節(jié)等特征,并都將它們稱為細(xì)節(jié)子圖。逼近子圖由于保留了原始圖像的大部分內(nèi)容,使其更不容易受到外界影響,具有較強(qiáng)的抗干擾性,穩(wěn)定性也相對(duì)較好而邊緣細(xì)節(jié)子圖保留原始圖像的細(xì)節(jié)較少,更則容易受外來噪聲、圖像處理的攻擊,穩(wěn)定性也較差。
2.離散余弦變換算法
離散余弦變換作為數(shù)字信號(hào)處理領(lǐng)域最常用的算法之一,也可以同傅里葉變換一樣實(shí)現(xiàn)快速算法。由于避免了傅里葉變換中的復(fù)數(shù)運(yùn)算,離散余弦變換通過實(shí)數(shù)的正交變換使得計(jì)算的速度得到了很大的提升,同時(shí)也能夠?qū)崿F(xiàn)很好的能量壓縮和去相關(guān)的能力,因此該算法在圖像壓縮領(lǐng)域和數(shù)字音頻信號(hào)壓縮等領(lǐng)域都有著普遍的應(yīng)用。增強(qiáng)水印的抗壓縮能力可以通過壓縮標(biāo)準(zhǔn)模型的水印嵌入算法來實(shí)現(xiàn),因此,研究離散余弦變換對(duì)于數(shù)字水印處理技術(shù)有著顯著的意義。特別是實(shí)現(xiàn)離散余弦變換后使得能量集中,同時(shí)算法并不復(fù)雜,因此可以更容易在數(shù)字信號(hào)處理器中快速實(shí)現(xiàn)。
圖像離散余弦變換(DCT) 公式如下:
?式中: F(u,v)為離散余弦函數(shù),f(x,y)為圖像原始數(shù)據(jù)。
3.奇異值分解算法
奇異值分解( Singular Value Decomposition) 是矩陣分析應(yīng)用中一種非常重要的分解方法,尤其是正規(guī)矩陣酉對(duì)角化在信號(hào)處理、數(shù)字圖像處理、統(tǒng)計(jì)學(xué)等領(lǐng)域占有重要位置,應(yīng)用非常廣泛。奇異值分解具有轉(zhuǎn)置不變性、旋轉(zhuǎn)不變性、位移不變性以及鏡像變換不變性等重要性質(zhì),使得奇異值特征在描述圖像時(shí)更具穩(wěn)定性。當(dāng)圖像被施加小的擾動(dòng)時(shí),圖像的奇異值不會(huì)有很大的變化,而且奇異值所表現(xiàn)的是圖像的內(nèi)蘊(yùn)特性而非視覺特性,反映的是圖像矩陣元素之間的關(guān)系。SVD通常用來提取圖像的特征值,實(shí)現(xiàn)降維、圖像壓縮。在數(shù)字水印技術(shù)中,也可以用來提高水印的魯棒性。
示例:pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。
二、結(jié)果
?????????????????????????????????????????????????未受攻擊時(shí)的實(shí)驗(yàn)結(jié)果
?????????????????????????????????高斯濾波攻擊時(shí)的實(shí)驗(yàn)結(jié)果
????????????????????????????????旋轉(zhuǎn)20度攻擊時(shí)的實(shí)驗(yàn)結(jié)果?
總結(jié)
本文的DWT-DCT-SVD數(shù)字水印算法,基于DCT和DWT的各自優(yōu)勢(shì),采用DWT和DCT相結(jié)合的方法進(jìn)行嵌入數(shù)字水印,DWT將水印嵌在圖像的低頻部分,保證水印的魯棒性。而DCT以把圖像重要的可視信息都集中在變換后的小部分系數(shù)中可以提升圖像水印的不可見性。文章來源:http://www.zghlxwxcb.cn/news/detail-807671.html
該算法效果還可以,但存在一些不足。在實(shí)際應(yīng)用場(chǎng)景中,為保證水印圖像的安全性,還需要在嵌入數(shù)字水印的過程中加入密鑰,防止無關(guān)人員惡意提取水印。同時(shí),在選擇嵌入塊時(shí),可以采用計(jì)算小波系數(shù)塊信息熵與周圍系數(shù)塊信熵值波動(dòng)最小的方法選擇最優(yōu)嵌入塊,以提高數(shù)字水印的魯棒性。?文章來源地址http://www.zghlxwxcb.cn/news/detail-807671.html
M = 512; % 原圖像長(zhǎng)度
N = 64; % 水印圖像長(zhǎng)度
K = 32; % 子塊大小
alpha=0.1;% 嵌入強(qiáng)度系數(shù)
% 打開原圖、水印圖
I = imread('lena.jpg');
G = imread('a.jpg');
%W = zeros(M);
% 縮放、灰度化原圖、改變精度
I = imresize(I,[M M]);
%I = im2double(I); % double精度轉(zhuǎn)換
I = rgb2gray(I); % 灰度化處理
G = imresize(G,[N N]);
%G = im2double(G); % double精度轉(zhuǎn)換
G = rgb2gray(G); % 灰度化處理
subplot(2,2,1);
imshow(I);
title('原始載體圖片');
subplot(2,2,2);
imshow(G);
title('原始水印圖像');
%Step 1
[LL,LH,HL,HH] = dwt2(G,'haar'); % 進(jìn)行2維哈爾離散小波變換
[U,S,V] = svd(HH);% 對(duì)HH進(jìn)行SVD分解,得到U、S、V矩陣
%Step 2
%進(jìn)行2級(jí)離散小波變換
[LL1, LH1, HL1, HH1] = dwt2(I, 'haar');
[LL2, LH2, HL2, HH2] = dwt2(LL1, 'haar');%128*128
H0 = entropy(HH2)% 計(jì)算HH3系數(shù)的信息熵
%Step 3
%選出最優(yōu)嵌入塊 默認(rèn)為4*4:(1,1)
optimal_block_index = 0;
%Step 4
%對(duì)最優(yōu)嵌入塊進(jìn)行 DCT 變換,得到DCT系數(shù)矩陣 B
m = floor(optimal_block_index/4)+1;
n = mod(optimal_block_index, 4)+1
x = (m - 1) * K + 1;
y = (n - 1) * K + 1;
H_I = HH2(x:x+K-1, y:y+K-1);
B = dct2(H_I);
%Step 5
%對(duì)B進(jìn)行奇異值分解,嵌入水印
[U1,S1,V1] = svd(B);
S2 = S1 + alpha * S;
B1 = U1 * S2 * V1;
H_I = idct2(B1);
HH2(x:x+K-1, y:y+K-1) = H_I;
LL1 = idwt2(LL2,LH2,HL2,HH2,'haar');
W = idwt2(LL1,LH1,HL1,HH1,'haar');
W = uint8(W);
%攻擊
%高斯濾波攻擊
%H = fspecial('gaussian',3,0.4);
%W = imfilter(W,H);
%G 壓縮攻擊
%quality = 50;
%W = imresize(W, 0.5); % 縮小圖像
%imwrite(W, 'temp.jpg', 'Quality', quality); % 保存為JPEG格式
%W = imread('temp.jpg'); % 重新讀取JPEG圖像
%W = imresize(W, 2); % 放大圖像
% 剪切攻擊
%r = 0.3; % 剪切比例為30%
%sz = size(W);
%h1 = round(sz(1)*r); % 剪切高度
%w1 = round(sz(2)*r); % 剪切寬度
%x1 = round(rand(sz(1)-h1)); % 隨機(jī)選擇一行
%y1 = round(rand(sz(2)-w1)); % 隨機(jī)選擇一列
%W(x1+1:x1+h1, y1+1:y1+w1) = 0; % 將指定區(qū)域置為0
% 旋轉(zhuǎn)攻擊
%angle = 20; % 旋轉(zhuǎn)角度為20度
%W = imrotate(W, angle, 'bilinear', 'crop');
%提取水印
[LL3, LH3, HL3, HH3] = dwt2(W, 'haar');
[LL4, LH4, HL4, HH4] = dwt2(LL3, 'haar');%128*128
H_I2 = HH4(x:x+K-1, y:y+K-1);
B2 = dct2(H_I2);
[Uw,Sw,Vw] = svd(B2);
Sx = (Sw - S1)/alpha;
B2 = U * Sx * V;
H_I2 = idct2(B2);
A = idwt2(LL,LH,HL,H_I2,'haar');
A = uint8(A);
subplot(2,2,3);
imshow(W);
title('嵌入水印后的載體圖像');
subplot(2,2,4);
imshow(A);
title('提取出來的水印圖像');
% 計(jì)算PSNR值
psnr_val = psnr(G, A);
% 顯示PSNR值
fprintf('The PSNR value between the original image and reconstructed image is %f.\n', psnr_val);
% 計(jì)算直方圖
h1 = imhist(G);
h2 = imhist(A);
% 根據(jù)直方圖計(jì)算 NC 值
nc_val = sum(sqrt(h1 .* h2)) / sqrt(sum(h1) * sum(h2));
% 顯示 NC 值
fprintf('The NC value between the two images is %f.\n', nc_val);
到了這里,關(guān)于基于DWT-DCT-SVD的圖像數(shù)字水印算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!