• 【图像隐写】基于matlab遗传算法的奇异值分解数字水印嵌入提取【含Matlab源码 2115期】


    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
    🍎个人主页:海神之光
    🏆代码获取方式:
    海神之光Matlab王者学习之路—代码获取方式
    ⛳️座右铭:行百里者,半于九十。

    更多Matlab仿真内容点击👇
    Matlab图像处理(进阶版)
    路径规划(Matlab)
    神经网络预测与分类(Matlab)
    优化求解(Matlab)
    语音处理(Matlab)
    信号处理(Matlab)
    车间调度(Matlab)

    ⛄一、SVD数字水印简介

    1 引 言
    数字水印是随信息技术和计算机网络飞速发展而兴起的一种重要的版权保护手段, 它通过在数字载体 (图像、音频、视频、文本等) 中加入隐秘信息来达到这个目的, 在需要时这种隐秘信息可以通过特定方法检测出来, 以验证作品是否合法或受到篡改。目前, 数字水印已成为多媒体信息安全研究领域的一个热点, 也是信息隐藏技术研究领域的重要分支。

    数字图像水印技术从实现过程上分空域算法和变换域算法。空域算法是指在图像的空间域中嵌入水印的方法, 通常具有较快的速度, 但一般鲁棒性较差;变换域算法是指在图像的变换域中嵌入水印的方法。变换域包括DCT域、DFT域、DWT域等, 由于图像的小波变换能够很好地匹配人类视觉系统 (HVS) 的特性, 还可以与JPEG2000标准相兼容, 因此小波域数字水印技术具有很好的应用前景。

    本文针对二值水印图像, 结合奇异值分解与小波变换, 提出了基于奇异值分解的小波域水印算法。实验结果表明, 本文提供的方法具有较好的鲁棒性和不可见性。

    2 小波变换与奇异值分解
    作为一种数学工具, 小波变换是对人们熟知的傅里叶变换和窗口傅里叶变换的一个重大突破, 为信号分析、图像处理、量子物理及其他非线性科学的研究领域带来革命性的影响。小波变换具有许多良好的特性, 这些性质奠定了小波域水印技术的基础。小波分解的空间-频率特性与HVS某些视觉特性有相似性。该特性是小波变换区别于DFT和DCT的一个重要方面, 根据该特性可以将高强度的水印嵌入到HVS不太敏感的区域, 这样在保证不影响图像视觉质量的前提下, 可以最大限度地增加嵌入水印的强度。

    小波变换可以将图像分解成低频子带和高频子带。其中, 低频带表示由小波变换分解级数决定的最大尺度、最小分辨率下对原始图像的最佳逼近, 图像的大部分能量集中在此。高频带则分别是图像在不同尺度、不同分辨率下的细节信息, 二维图像一级小波分解所得子图像按其重要性排序为LL1, HL1, LH1, HH1, 如图1所示。

    奇异值分解是数值线性代数的有效算法之一, 它在统计分析、信号与图像处理、系统理论与控制中被广泛应用。在图像处理中应用的优势在于图像奇异值的稳定性非常好, 即当图像被施加小的扰动时, 图像的奇异值不会有大的变化, 并且奇异值所表现的是图像的内蕴特性而非视觉特性。
    在这里插入图片描述
    图1 二维静态图像的一级分解
    设图像矩阵I为非负矩阵, I∈Rn×n, 其中R表示实数域, rank (I) =r (r≤n) , 则I的奇异值分解定义如下:
    非零奇异值的个数等于矩阵的秩。

    2 水印算法
    2.1 水印嵌入算法

    为了保证嵌入水印后的图像质量和水印对信号处理的鲁棒性, 水印应嵌入到原始载体图像的中频部分。为了达到水印不可见性和鲁棒性的折衷, 应合理选取水印的嵌入强度因子α的值。
    当原始载体图像为灰度图像时, 水印嵌入过程如下:
    步骤一:将原始的二值水印图像取反, 再进行Arnold变换, 得到W˜, 并将迭代次数t作为密钥保存。
    步骤二:将原始图像I进行一级小波分解, 得到中频子带HL1。
    步骤三:将中频子带HL1进行SVD, 得到正交矩阵U, V及一个对角矩阵S。
    步骤四:将水印W˜叠加到矩阵S上, 对新产生的矩阵S+αW˜进行奇异值分解, 得到U1, V1和S1。
    步骤五:将矩阵U, S1和VT相乘, 得到处理后包含水印的图像D。
    步骤六:用D代替步骤二中的HL1, 进行小波反变换, 得到潜入水印的图像I˜。

    2.2 水印提取算法
    水印提取算法恰好与水印的嵌入过程完全相反, 过程如下:
    步骤一:将含水印图像I˜进行一级小波分解, 可得到中频子带HL¯¯1。
    步骤二:对中频子带HL¯¯1进行SVD, 可得到正交矩阵U¯¯¯1, V¯¯¯1和对角矩阵S¯¯¯1。
    步骤三:用S¯¯¯1代替水印嵌入算法步骤三中的对角矩阵S, 然后与正交矩阵U, V相乘, 即可得到矩阵图像D。
    步骤四:利用水印嵌入算法步骤三、四中的S及α进行运算:W˜=1α(D−S), 则可得到置乱后的二值水印图像W˜。
    步骤五:对W˜进行T-t次 (T表示Arnold变换的周期) Arnold变换并进行取反, 即可得到最终提取的二值水印图像。

    ⛄二、部分源代码

    close all;
    clc;
    %加载要加水印的原始图像
    orig_img = imread(‘lena_256.bmp’);
    orig_img = imresize(orig_img, [256,256]);
    figure, imshow(orig_img); title (‘原始图片’)
    [M,N] = size(orig_img);
    nblock=M/8;
    %加载要在原始图像中加水印的图像
    wat_img = imread(‘njit_logo.jpg’);
    wat_img = imresize(wat_img, [nblock,nblock]); % make it 32 X 32
    wat_img=uint8(wat_img);
    level = graythresh(wat_img);%找到一个很好的阈值
    wat_img = im2bw(wat_img,level); %使水印变成二值图像
    figure, imshow(wat_img); title(‘WaterMark Image’);
    %现在调用遗传算法,最小值为10,最大值为20
    % 值90与线性适应度函数
    npop = input('No of Iteration (Population Size) = '); % 询问人口规模
    % 最小值为10,最大值为90,是种群数目大小,适应函数是未知数的平方
    [a,b,c] = genetic_algorithm (@(x)x^2,npop,npop,npop,npop,npop,npop,npop,1,150,250,.01);

    % 攻击类型
    fprintf(’ 1 - Midian Filter\n’);
    fprintf(’ 2 - Resize the image (scaling four times and then returned to original with bicubicinterpolation)\n’);
    fprintf(’ 2 - Salt and paper noise\n’);
    fprintf(’ 4 - Low pass filter\n’);
    fprintf(’ 5 - Image Jpeg Compression with Quality Factor 40\n’);
    attack_type = input('Attack Type: ');
    max = 0.0; % 目标函数的最大值
    peaksnr_value = 0; % 初始化 PEAKSNR 值
    NC = 0; % 初始化归一化相关值
    step=0;
    final_image = zeros(M,N);
    for i=2:npop
    step_size = a(i);
    Wimg = SVD_Watermarked(orig_img, wat_img, step_size);
    % calculation of image quality degradiation after inserting watermark嵌入水印后图像质量退化的计算
    [m,n] = size(orig_img);
    error = orig_img - Wimg;
    MSE = (sum(sum(error.^2)))/(mn);
    if (MSE > 0)
    peaksnr = 10
    log10(255^2/MSE);
    else
    peaksnr=99;
    end
    % fprintf(‘The Peak Signal to noise ratio: %f db\n’,peaksnr);
    % 攻击水印图片
    % 应用中值过滤器
    if(attack_type1)
    attacked_Image = medfilt2(Wimg);
    end
    % 调整图像大小。 第一次缩放(四次)然后回到原来的
    % 双三次插值
    if(attack_type
    2)
    attacked_Image = imresize(Wimg,4,‘nearest’);
    attacked_Image = imresize(attacked_Image, [M N]);
    end
    %椒盐噪声
    if(attack_type3)
    attacked_Image = imnoise(Wimg,‘salt & pepper’,0.002);
    end
    if(attack_type
    4)
    attacked_Image = uint8(conv2(double(Wimg), double(ones(3,3))/9));
    attacked_Image = imresize(attacked_Image, [M N]);
    end
    if(attack_type == 5)
    imwrite(Wimg,‘Watermarked’,‘JPEG’,‘Quality’,40);
    attacked_Image = imread(‘Watermarked.jpg’);
    end

    ⛄三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    ⛄四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1]王选宏,肖云.基于奇异值分解的小波域水印算法[J].现代电子技术. 2010,33(05)

    3 备注
    简介此部分摘自互联网,仅供参考,若侵权,联系删除

    🍅 仿真咨询
    1 各类智能优化算法改进及应用

    生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

    2 机器学习和深度学习方面
    卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

    3 图像处理方面
    图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

    4 路径规划方面
    旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

    5 无人机应用方面
    无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

    6 无线传感器定位及布局方面
    传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

    7 信号处理方面
    信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

    8 电力系统方面
    微电网优化、无功优化、配电网重构、储能配置

    9 元胞自动机方面
    交通流 人群疏散 病毒扩散 晶体生长

    10 雷达方面
    卡尔曼滤波跟踪、航迹关联、航迹融合

  • 相关阅读:
    5. computed 和 watch 的区别?
    【UE4】UE编辑器乱码问题
    Python的configparser读写配置文件
    dp 27 跳跃游戏2 牛客版本
    GraphQL入门之使用ApolloServer构建GraphQL服务
    深入理解.Net中的线程同步之构造模式(二)内核模式3.内核模式构造物Mutex
    今日配音热点来袭|想给短视频加配音就赶紧看过来吧
    DES 加解密--JAVA 实现
    (2022版)一套教程搞定k8s安装到实战 | Volumes
    linux系统 JDK11安装
  • 原文地址:https://blog.csdn.net/TIQCmatlab/article/details/126821679