课程学习——基于二维直方图的图像签名与认证

matlab:基于二维直方图的图像签名与认证。
代码:

clear all
data=imread('E:\matlabCX\图片\7.jpg');
%data=double(data);
%data=imnoise(data,'gaussian',0.01)
figure(1)
subplot(2,2,1)
imshow(uint8(data));
title('原图像');
subplot(2,2,2);
data=rgb2gray(data);
imhist(uint8(data));
title('1D直方图');
[M,N]=size(data);
data=double(data);
%3*3的滤波窗口;
data1=medfilt2(data);
subplot(2,2,3);
imshow(uint8(data1));
title('平滑图像');
L=256;
D=zeros(L,L);
for i=1:M
   for j=1:N
      T1=data(i,j)+1;
      T2=data1(i,j)+1;
      D(T1,T2)=D(T1,T2)+1;
   end
end
subplot(2,2,4);
mesh(D);
title('2D直方图');
data1=zeros(L,L);
data0=D;
% l为控制置乱加密次数,l=15;
% Arnold变换参数: a=1,b=1,c=1,d=2; 
% x0=0,y0=0;
for l=1:15
  x0=0;
  y0=0;
  for x=1:L
    for y=1:L
        x1=x+y+x0;
        y1=x+2*y+y0;
        x1=mod(x1,L);
        y1=mod(y1,L);
        
        if x1==0
            x1=L;
        end
        if y1==0
            y1=L;
        end
        
        data1(x1,y1)=data0(x,y);
    end
 end
if l==15
  figure(2)
  subplot(1,2,1);
  mesh(D);
  title('原二维直方图');
  t1=num2str(l);
  ss=strcat('E:\matlabCX\图片\7.jpg',t1);
  ss=strcat(ss,'.txt');
  f1=fopen(ss,'w');
  for i=1:L
      for j=1:L
          fwrite(f1,D(i,j),'ubit8');
      end
      fwrite(f1,'%\n');
  end
  fclose(f1);
  subplot(1,2,2);
  mesh(data1);
  title('加密后二维直方图');
  ss1=strcat('E:\matlabCX\图片\7.jpg',t1);
  ss1=strcat(ss1,'.txt');
  f2=fopen(ss1,'w');
  for i=1:L
      for j=1:L
          fwrite(f2,data1(i,j),'ubit8');
      end
      fwrite(f2,'%\n');
  end
  fclose(f2);
end
data0=data1;
end
D1=data1;
m1=0;
m2=0;
m3=0;
for i=1:L
    for j=1:L
        m1=m1+i^2*D1(i,j);
        m2=m2+j^2*D1(i,j);
        m3=m3+i*j*D1(i,j);
    end
end
m11=int2str(m1);
m22=int2str(m2);
m33=int2str(m3);
mm=strcat(m11,m22);
mm=strcat(mm,m33);
%签名输出信息mm;
%可对签名信息进一步实施加密.
figure(3)
imshow(uint8(data));
mm=strcat('签名信息=',mm);
xlabel(mm);

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
少年不被楼层误,余生不羁尽自由。
加油,加油!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值