當前位置:首頁 » 操作系統 » dct數字水印演算法

dct數字水印演算法

發布時間: 2023-07-11 15:39:25

① DCT域圖像數字水印演算法,新手,這個水印嵌入程序看不明白,誰能幫我把每條注釋下Q282092728,謝謝了

M=256;%原圖像長度
N=32;%水印圖像長度
K=8; %圖像分塊大小
I=zeros(M,M);%創建一個零矩陣,用於存放載體圖像
J=zeros(N,N); %創建一個零矩陣,用於存放水印圖像
BLOCK=zeros(K,K);%創建一個零矩陣,用於存放圖像分塊
%顯示水印圖像
subplot(1,8,2);
J=imread('14','bmp'); %讀入水印圖像
imshow(J); %顯示水印圖像
title('水印圖像');
%顯示原圖像
subplot(1,3,2);
I=imread('11','bmp'); %讀入原始圖像
imshow(I); %顯示原始圖像
title('原始公開圖像');
%嵌入水印
tem=1;%創建變數tem,沒用
for p=1:N%水印圖像行循環
for q=1:N%水印圖像列循環
x=(p-1)*K+1; %x為載體圖像行坐標
y=(q-1)*K+1; %y為載體圖像列坐標
BLOCK=I(x:x+K-1,y:y+K-1); %BLOCK為載體圖像I的分塊,分塊大小為K*K,
%初始值為I(0:K-1,0:K-1)
BLOCK=dct2(BLOCK);%對BLOCK進行二維DCT變換,得到新的BLOCK即%DCT系數矩陣BLOCK
if J(p,q)==0%如果水印圖像的第(p,q)個像素為0
a=-1;%嵌入參數為-1
else
a=1; %若如果水印圖像的第(p,q)個像素為1嵌入參數為1
end
BLOCK(2,1)=BLOCK(2,1)*(1+a*0.01); %對載體圖像的分塊的DCT系數矩陣
%BLOCK
BLOCK=idct2(BLOCK);%對DCT系數矩陣進行反變換,得到嵌入水印後的載體
%圖像分塊BLOCK
I(x:x+K-1,y:y+K-1)=BLOCK;%用嵌入水印後的圖像分塊BLOCK代替載體圖像
%的對應分塊
End%水印圖像列循環結束
End%水印圖像行循環結束
%顯示嵌入水印後的圖像
subplot(1,3,3);
imshow(I);%顯示嵌入水印後圖像
title('嵌入水印後的圖像');
imwrite(I,'embedded.bmp','bmp');%將嵌入水印後圖像寫成bmp文件
夠詳細吧,希望對你有用。

② 基於DCT數字水印演算法的Matlab實現源代碼

  1. 讀取圖片

  2. 讀取水印圖片(二維碼)

  3. 原圖片做成灰度

  4. 水印圖做成二值圖

  5. 原圖做8*8DCT處理

  6. 選擇DC成分以外的元素(每個8*8塊里選擇1個元素)

  7. 生成偽隨機亂數

  8. 根據亂數做成密鑰

  9. 將水印圖根據密鑰與演算法嵌入到第6步驟

  10. 嵌入後將每個元素替換原來的第6步元素

  11. 做反變換

  12. 圖片保存,嵌入完畢

提取

  1. 讀取嵌入水印後的圖片

  2. 生成嵌入時的偽隨機亂數(生成亂數之前可以加一些幾何攻擊)

  3. 根據亂數做成密鑰

  4. 嵌入水印後的圖片做8*8DCT處理

  5. 選擇DC成分以外的元素(選取跟原來嵌入時相同)

  6. 根據演算法與密鑰提取水印圖

  7. 提取的水印圖與原水印圖做比較

  8. 保存提取的水印圖,提取完畢

熱點內容
編程貓被盜 發布:2025-03-17 12:02:18 瀏覽:130
海關鎖密碼箱如何設置新密碼 發布:2025-03-17 11:53:50 瀏覽:559
農業卡號的密碼在哪裡改 發布:2025-03-17 11:48:57 瀏覽:965
楊瀾超級訪問 發布:2025-03-17 11:47:17 瀏覽:237
資料庫無損連接 發布:2025-03-17 11:47:16 瀏覽:13
memcachephp類 發布:2025-03-17 11:40:04 瀏覽:829
哈夫曼編碼演算法實現 發布:2025-03-17 11:23:31 瀏覽:385
錄音機可以存儲信息嗎 發布:2025-03-17 11:13:32 瀏覽:174
郵件伺服器php 發布:2025-03-17 11:09:42 瀏覽:479
心跳包源碼 發布:2025-03-17 11:03:29 瀏覽:799