⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft_recover.m

📁 基于离散傅立叶变换的数字水印matlab源码
💻 M
字号:
%DFT水印
%提取源码
%参照DCT2修改,只为抛砖引玉
%快乐!
clc
clear all;

% 保存开始时间
start_time=cputime;

blocksize=8;                    % 设置块的大小
filter_m=[  0,0,0,0,0,0,0,0;    % 滤波矩阵
            0,1,1,1,1,1,1,0;
            0,1,1,1,1,1,1,0;
            0,1,1,1,1,1,1,0;
            0,1,1,1,1,1,1,0;
            0,1,1,1,1,1,1,0;
            0,1,1,1,1,1,1,0;
            0,0,0,0,0,0,0,0 ];
        
% 读入嵌入水印图像
file_name='fft2_watermarked.bmp';
watermarked_image=double(imread(file_name));

% 嵌入水印图像矩阵的行数与列数
Mw=size(watermarked_image,1);	       
Nw=size(watermarked_image,2);	        

% 最大可嵌入信息量
max_message=Mw*Nw/(blocksize^2);

% 读入原始水印
file_name='c.bmp';
orig_watermark=double(imread(file_name));

% 原始水印矩阵的行数与列数
Mo=size(orig_watermark,1);	
No=size(orig_watermark,2);	

%置随机数发生器的状态为1100
rand('state',1100);

% 产生伪随机序列
pn_sequence=round(2*(rand(1,sum(sum(filter_m)))-0.5));

% 将图像分块
x=1;
y=1;
h=waitbar(0,'提取水印,请等待');
for (kk = 1:max_message)

    % 傅立叶变换
    fft_block_w=fft2(watermarked_image(y:y+blocksize-1,x:x+blocksize-1));
    abs_block_w=abs(fftshift(fft_block_w));
    % 
    ll=1;
    for ii=1:blocksize
        for jj=1:blocksize
            if (filter_m(ii,jj)==1)
                sequence(ll)=abs_block_w(ii,jj);
                ll=ll+1;
            end
        end
    end
    
    % 计算sequence与pn_sequence的相关系数
   
   correlation(kk)=corr2(pn_sequence,sequence);
    
    % 移动到下一块
    if (x+blocksize) >= Nw
        x=1;
        y=y+blocksize;
    else
        x=x+blocksize;
    end
    waitbar(kk/max_message,h);
end
close(h);

% 如果相关系数大于相关系数平均值,那么message_vector=0,反之为1.
for (kk=1:Mo*No)
    if (correlation(kk) > mean(correlation(1:Mo*No)))
        message_vector(kk)=0;
    else
        message_vector(kk)=1;
    end
end

% 将message_vector转换为原始水印矩阵大小
message=reshape(message_vector(1:Mo*No),Mo,No);

% 计算运行时间
elapsed_time=cputime-start_time,

% 显示提取水印与原始水印
figure(3)
subplot(1,2,1);
imshow(message,[])
title('提取水印')
subplot(1,2,2);
imshow(orig_watermark,[])
title('原始水印');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -