EMD信息隐藏算法的MATLAB实现(基础)

EMD算法原理:
EMD信息隐藏算法的MATLAB实现(基础)
文章图片

EMD信息隐藏算法的MATLAB实现(基础)
文章图片

MATLAB代码如下:

clear; clc; pout=imread('pout.tif'); [m,n]= size(pout); %读取出图片的列像素个数和行像素个数 S = floor(rand(1,(m*n)/2)*5); %产生一组二分之一像素个数的0—4的随机数,作为待隐藏的信息 carrier = reshape(pout,1,m*n); %将载体图片转化为一维数组 figure(1); subplot(1,2,1),imshow(pout), title('原始图像'); %显示原始图像; %加密算法 for i=1:2:m*n g1=double(carrier(i)); g2=double(carrier(i+1)); f=mod((g1+g2*2),5); r=mod((S((i+1)/2)-f),5); if(r==0)%r=0时,g1,g2保持不变 g1=g1; g2=g2; elseif(r<=2)%r小于等于二时,gr+1 if(r==1) g1=g1+1; else g2=g2+1; end elseif(r>2)%r大于2时,g(5-r)—-5 if(5-r==1) g1=g1-1; else g2=g2-1; end end newcarrier(i)=uint8(g1); newcarrier(i+1)=uint8(g2); end newimg=reshape(newcarrier,m,n); subplot(1,2,2),imshow(newimg),title('嵌入信息后'); %打印嵌入信息后的图片 %提取算法 for k=1:2:m*n b1=double(newcarrier(k)); b2=double(newcarrier(k+1)); information((k+1)/2)=mod((b1+b2*2),5); end

执行效果:
【EMD信息隐藏算法的MATLAB实现(基础)】图像的像素发生了变化:
EMD信息隐藏算法的MATLAB实现(基础)
文章图片


EMD信息隐藏算法的MATLAB实现(基础)
文章图片

提取信息结果:
EMD信息隐藏算法的MATLAB实现(基础)
文章图片

实验中踩的坑:
图像中均采用uint8的类型,f函数运算溢出的话,模将为0。所以在运算f之前,需要把g1,g2变量转换为其他类型。到显示新图像之前还要将其转换为uint8类型。

    推荐阅读