1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJqUmJdx
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
随着互联网和数字化技术的快速发展,数字信息的保护和安全已经成为了一个严峻的问题。数字信息隐藏技术是一种将敏感信息嵌入到其他无关信息中的技术,以此来保护信息的安全。其中,基于合成指纹的数字信息隐藏技术是一种基于图像的信息隐藏技术,即将数字信息嵌入到指纹图像中。将详细介绍基于合成指纹的数字信息隐藏和提取技术,主要内容包括:数字信息隐藏的背景和意义、合成指纹的基本原理、数字信息嵌入和提取的具体方法、实验结果和分析等。
4.部分源码
.............................................................................
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