matlab图像水印,怎么在含有水印的图像中提取出水印

该博客展示了如何使用MATLAB进行数字水印的嵌入和提取过程。通过DCT变换,将水印图像信息嵌入到原始图像的频域中,并在之后成功提取出来。实验使用了'cameraman.bmp'作为原始图像,'matlab.bmp'作为水印图像,最终生成了名为'watermarked.tif'的含水印图像。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

%水印嵌入代码

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('从含水印图像中提取水印');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值