利用matlab提取水印,怎么在含有水印的图像中提取出水印
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
%水印嵌入代碼
M = 256;%原始圖像長度
N = 32; %水印圖像長度
K = 8;
I = zeros(M, M);
J = zeros(N, N);
BLOCK = zeros(K, K);
%顯示原始圖像
subplot(221);
I = imread('C:\Users\Rocky\Documents\MATLAB\cameraman.bmp');
imshow(I);
title('原始圖像');
%顯示水印圖像
subplot(222);
J = imread('C:\Users\Rocky\Documents\MATLAB\matlab.bmp');
imshow(J);
title('水印圖像');
%嵌入水印
temp = 1;
for p = 1 : N;
for q = 1 : N;
x = (p - 1) * K + 1;
y = (q - 1) * K + 1;
BLOCK = I(x: x + K - 1, y: y + K - 1);
BLOCK = dct2(BLOCK);
if J(p, q) == 0;
a = -1;
else
a = 1;
end
BLOCK(2, 1) = BLOCK(2, 1) * (1 + a * 0.01);
BLOCK = idct2(BLOCK);
I(x: x + K - 1,y: y + K - 1) = BLOCK;
end
end
%顯示嵌入水印后的圖像
subplot(223);
imshow(I);
title('嵌入水印后的圖像');
imwrite(I,'watermarked.tif','tif');
%從嵌入水印的圖像中提取水印
I = imread('cameraman.tif');
J = imread('watermarked.tif');
for p = 1 : N;
for q = 1 : N;
x = (p - 1) * K + 1;
y = (q - 1) * K + 1;
BLOCK1 = I(x: x + K - 1,y: y + K - 1);
BLOCK2 = J(x: x + K - 1,y: y + K - 1);
BLOCK1 = idct2(BLOCK1);
BLOCK2 = idct2(BLOCK2);
a = BLOCK2(1,1) / BLOCK1(1, 1) - 1;
if a < 0
W(p, q) = 0;
else
W(p, q) = 1;
end
end
end
%顯示提取的水印
subplot(224);
imshow(W);
title('從含水印圖像中提取水印');
總結
以上是生活随笔為你收集整理的利用matlab提取水印,怎么在含有水印的图像中提取出水印的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle简体版,oracle|Nav
- 下一篇: matlab人脸追踪,求大神帮助我这个菜