m基于合成指纹的数字信息隐藏和提取matlab仿真

目录

1.算法仿真效果

2.算法涉及理论知识概要

3.MATLAB核心程序

4.完整算法代码文件


1.算法仿真效果

matlab2022a仿真结果如下:

2.算法涉及理论知识概要

        随着互联网和数字化技术的快速发展,数字信息的保护和安全已经成为了一个严峻的问题。数字信息隐藏技术是一种将敏感信息嵌入到其他无关信息中的技术,以此来保护信息的安全。其中,基于合成指纹的数字信息隐藏技术是一种基于图像的信息隐藏技术,即将数字信息嵌入到指纹图像中。将详细介绍基于合成指纹的数字信息隐藏和提取技术,主要内容包括:数字信息隐藏的背景和意义、合成指纹的基本原理、数字信息嵌入和提取的具体方法、实验结果和分析等。

1、数字信息隐藏的背景和意义

       数字信息隐藏技术是一种将敏感信息嵌入到其他无关信息中的技术,以此来保护信息的安全。数字信息隐藏技术在网络安全、版权保护、隐私保护等领域有着广泛的应用。其中,数字信息隐藏技术在图像、音频和视频领域的应用越来越广泛。

        合成指纹是一种将两个或多个指纹图像合成成一个指纹图像的技术。合成指纹可以扩大指纹数据库,提高指纹识别的准确性。基于合成指纹的数字信息隐藏技术是一种将数字信息嵌入到合成指纹图像中的技术。基于合成指纹的数字信息隐藏技术可以保护数字信息的安全性,同时又不影响指纹图像的正常识别。

2、合成指纹的基本原理

       合成指纹技术是一种将两个或多个指纹图像合成成一个指纹图像的技术。合成指纹技术主要分为两种:基于图像的合成指纹和基于特征的合成指纹。其中,基于图像的合成指纹是将两个或多个指纹图像直接拼接在一起,形成一个新的指纹图像。基于特征的合成指纹是将两个或多个指纹的特征点或特征值进行融合,形成一个新的指纹特征。

       基于图像的合成指纹技术是一种将两个或多个指纹图像直接拼接在一起,形成一个新的指纹图像的技术。基于图像的合成指纹技术主要分为两种:平均法和加权法。其中,平均法是将两个或多个指纹图像的像素值相加,再取平均值,形成一个新的指纹图像。加权法是将两个或多个指纹图像的像素值按照一定的权重相加,形成一个新的指纹图像。

3、数字信息嵌入和提取的具体方法

       数字信息嵌入和提取是基于合成指纹的数字信息隐藏技术的核心部分。数字信息嵌入是将数字信息嵌入到合成指纹图像中,数字信息提取是从合成指纹图像中提取出嵌入的数字信息。
数字信息嵌入的具体方法如下:

(1)将要嵌入的数字信息转换成二进制码。

(2)将合成指纹图像的像素值转换成二进制码。

(3)将要嵌入的数字信息按照一定的规则嵌入到合成指纹图像的像素值中。常用的嵌入规则有LSB(Least Significant Bit)嵌入、LSB替换嵌入、LSB匹配嵌入等。

(4)将嵌入数字信息后的新的像素值重新组合成一个新的合成指纹图像。

数字信息提取
数字信息提取的具体方法如下:

(1)将合成指纹图像的像素值转换成二进制码。

(2)使用相同的嵌入规则,从像素值中提取出嵌入的数字信息。

(3)将提取出的二进制码转换成原始的数字信息。

3.MATLAB核心程序

.............................................................................

Rs_Encoder   = fec.rsenc(7,4);
Rs_Decoder   = fec.rsdec(Rs_Encoder);
Msg_Enc      = encode(Rs_Encoder,message0');

message      = [Msg_Enc',0,0];


%%
I=imread('1.jpg');
[R,C,K] = size(I);
if K == 3
   I = rgb2gray(I);
else
   I = I;
end

%%
%提取连续的相位从一个真实的指纹图片中提取
I_tmp = I;
figure;
subplot(121);
imshow(I);

%图像预处理,去噪滤波
I = medfilt2(I,[3,3]);%进行中值滤波;
%背景分割
%图像二值化处理
%首先进行归一化
I=norms(I,120,600);  

Ker   = 8;
[m,n] = size(I);
m1    = m/Ker;
n1    = n/Ker;
for i=1:m1
   for j=1:n1
       %设定门限
      t=mean2(I((i-1)*Ker+1:(i-1)*Ker+Ker,(j-1)*Ker+1:(j-1)*Ker+Ker));
      for k=(i-1)*Ker+1:(i-1)*Ker+Ker
          for l=(j-1)*Ker+1:(j-1)*Ker+Ker
              if I(k,l) < t
                  I(k,l)=1;
              else 
                  I(k,l)=0;
              end
          end
      end
   end
end
%异常点的处理
for i=1:m
    for j=1:n
        if I(i,j)>1
            I(i,j)=0;
        end
    end
end
for i=1:m
    for j=1:n
        if I(i,j)==1
            for k=1:j
                I(i,k)=1;
            end
            break;
        end
    end
end
for i=1:m
    for j=n:-1:1
        if I(i,j)==1
            for k=n:-1:j
               I(i,k)=1;
            end
            break;
   end
    end
end
for i=1:m
    for j=1:n
        if I(i,j)==1
            I(i,j)=0;
        else
            I(i,j)=1;
        end
    end
end

I=wiener2(I,[3 3]);
%以下为细化处理
[r,c] = size(I);
for i1=1:r;
    for j1=1:c
        if (I(i1,j1)==1)
           I(i1,j1)= 255; 
           I2      = I;
        end
    end
end
y         = thinning(I2);
A         = abs(double(y(2:end-1,2:end-1)));
B         = 32;
gamma     = 1; 
b         = 1; 
Theta     = 0; 
phi       = pi/4; 
shape     = 'valid';
F         = 0.3165; 
Lambda    = 1/F;
[GO, GF]  = gabor2(I, gamma, Lambda, b, Theta, phi, shape);
% GO        = func_theta(GO);

subplot(122);
imshow(GO,[]);
title('连续相位');

%%
%转换为多项式,用来产生螺旋相位
%CRC
LEN=8;
s = crc_add(message, 16);

 
%分组
s2= reshape(s,[4,LEN]);s2
%polynomial
for i = 1:LEN
    dat(1,i) = s2(1,i)*2^3 + s2(2,i)*2^2 + s2(3,i)*2^1 + s2(4,i)*2^0;
end
x1=[1:0.01:LEN];
p = polyfit([1:LEN],dat,LEN);
y1 = polyval(p,x1);
figure;
plot(1:8,dat,'-r>',...
    'LineWidth',1,...
    'MarkerSize',8,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
hold on
plot(x1,y1,'g','LineWidth',2);

%坐标映射,这里做简化
%产生螺旋相位公式6
[R,C] = size(GO);
xp = R*(1:LEN)/2;
yp = C*dat/6;
Pp = 2*mod(dat,2)-1;


fai   = zeros(R,C);
for i = 1:R
    for j = 1:C
        for k = 1:LEN
            fai(i,j)=fai(i,j)+Pp(k)*atan((j-yp(k))/(i-xp(k)));
        end
    end
end

figure;
subplot(131);
imshow(fai,[]);
title('螺旋相位');
%合成指纹
figureprint = A+B.*cos(GO+exp(fai));

subplot(132);
imshow(figureprint,[]);
title('合成指纹灰度图');

subplot(133);
imshow(im2bw(figureprint,0.9),[]);
title('合成指纹二进制图');

figureprint2 = figureprint + 20*randn(size(figureprint));
figure;
imshow(figureprint2,[]);
title('加入噪声');
%%
%这个地方做简化了, 
tmps = log(acos((figureprint-A)/B)-GO);



t1=polyval(p,1);%3
t2=polyval(p,2);%12
t3=polyval(p,3);%15
t4=polyval(p,4);%2
t5=polyval(p,5);%8
t6=polyval(p,6);%15
t7=polyval(p,7);%10
t8=polyval(p,8);%5

datr=round([t1,t2,t3,t4,t5,t6,t7,t8]);
data2=[];
for i = 1:length(datr)
    data = dec2bin(datr(i),4); 
    data2=[data2,str2num(data(1)),str2num(data(2)),str2num(data(3)),str2num(data(4))];
end
 

s3= data2;
[output_after_check, indicate] =crc_check(s3,16);


[Msg_Dec,cnumerr,ccode] = decode(Rs_Decoder,output_after_check(1:end-2)');

message0

Msg_Dec'
09_058_m

4.完整算法代码文件

V

猜你喜欢

转载自blog.csdn.net/hlayumi1234567/article/details/131137601
今日推荐