【图像隐藏】基于遗传算法的奇异值分解水印附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

鲁棒性与不可见性是数字水印的主要衡量标准,这两者相互制约,传统的数字水印算法很难将二者平衡,提出一种强鲁棒性的图像水印优化嵌入方案,基本思想是先将水印图像经过奇异值分解得到水印序列,采用遗传算法优化水印的嵌入位置,综合优化水印的鲁棒性和不可见性.水印嵌入是自适应的过程,且实现了盲提取.实验表明,该方案在水印遭受各种攻击时,能更好的恢复出清晰地水印图像,具有更强的鲁棒性和不可见性等优点.

⛄ 部分代码

function [Wimg]= SVD_Watermarked(orig_img, wat_img, step_size)

%output 

% - wimg : watermarked image

%Input

% - orig_image : original image without watermarking

% - wat_img : watermark image

% - step_size : The interval value

[M,N] = size(orig_img);

orig_img = double(orig_img);

ind=(M*N)/64;

dlarge = zeros(ind,1); % create array of size ind;

block = zeros(8,8,ind); % create and initialize block

index=0;

%将原始图像进行8*8分块?每一块进行SVD变换

for i = 1:8:M;

    for j = 1:8:N;

        index=index+1;

        block(:,:,index) = orig_img(i:i+7,j:j+7);  % make three dimensional array制作三维数组

        [Uimg,Simg,Vimg] = svd(block(:,:,index));

        dlarge(index)=Simg(1,1);              % store the the large value of S

    end

end

%max = max(dlarge);

max = dlarge(1);          % Find the maximum value from dlarge array从dlarge数组中找到最大值

for jj = 2:numel(dlarge)

    if max < dlarge(jj)

        max = dlarge(jj);

    end

end

%min = min(dlarge);

min = dlarge(1);          % find the minimum value from dlarge array

for jj = 2:numel(dlarge)

    if min > dlarge(jj)        

        min = dlarge(jj);

    end

end

interval_table = min-step_size : step_size : max+step_size;      % construct the table 

[row col]=size(interval_table);

for i=1:index

    for j=1:col-1

        if ((dlarge(i)> interval_table(j)) && (dlarge(i) < interval_table(j+1)));

            if(wat_img(i)==1);   % 根据水印图像修改dlarge值

                dlarge(i)= (interval_table(j)+(interval_table(j)+interval_table(j+1))/2.)/2.;

            else

                dlarge(i)= (interval_table(j+1)+(interval_table(j)+interval_table(j+1))/2.)/2.;

            end

        end

    end

end

index=0;

Wimg = zeros(8,8,ind); % create and initialize Wimg

for i = 1:8:M;

    for j = 1:8:N;

        index=index+1;

        block(:,:,index) = orig_img(i:i+7,j:j+7);

        [Uimg,Simg,Vimg] = svd(block(:,:,index));

        Simg(1,1)= dlarge(index);       %put the large value based on watermarked image

        Wimg(:,:,index)=Uimg*Simg*Vimg'; %inverse the SVD

    end

end  

%Wimg is three dimensional matrix we have to change to two dimensional

%Wimg是一个三维的矩阵,我们必须把它变成二维的

%matrix

nrow = M/8;

ncol = N/8;

D = zeros(8,8,ind); % create and initialize D

final = zeros(8,8,ind); %create and initialize D

index=0;

for row=1:nrow

    index=index+1;

    D=Wimg(:,:,index);

    for col=2:ncol

       index=index+1;

       D=horzcat(D,Wimg(:,:,index));

%       fprintf('row= %d col= %d',row,col);

    end

    if(row==1)

        final=D;

    else

        final=vertcat(final,D);

    end

end

Wimg = uint8(final);

⛄ 运行结果

⛄ 参考文献

[1] 晁妍, 王慧玲, 刘淑影. 基于遗传算法和SVD-DWT的图像水印优化嵌入方案[J]. 韶关学院学报, 2018, 39(6):5.

[2] 鱼滨. 基于MATLAB和遗传算法的图像处理[M]. 西安电子科技大学出版社, 2015.

[3] 张敏辉, 赖麟, 孙连海. 基于遗传算法的研究与Matlab代码的实现[J]. 四川教育学院学报, 2012.

[4] 魏志成, 戴居丰, 李昊. 基于遗传算法的图像数字水印[J]. 计算机工程, 2007, 33(17):146-148.

[5] 史宝明, 李恒杰, 贺元香,等. 基于微遗传算法与SVD的鲁棒性数字水印技术研究[J]. 甘肃联合大学学报(自然科学版), 2014(006):028.​

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值