• MATLAB 图像加密处理(三)


    对于图像加密,采用按位异或的方式。

    %% 异或运算xor()函数
    %异或运的性质
    %若xor(a,b)=c成立:
    %则xor(a,c)=b与xor(b,c)=a也成立
    

    由于异或具有以上的性质,因此采用其对图像进行加密与解密。

    %% 按位异或运算 bitxor()
    %将每一个数都拆成二进制,然后按位异或
    x=5;%二进制:101
    y=6;%二进制:110
    c=bitxor(x,y);
    %运算过程:
    %5:101
    %6:110
    %   011最终结果,也就是十进制的三
    

    一,函数定义:
    首先是生成灰度混沌加密图像的定义函数:

    function a=hui_2(x,m,n)
    %x表示函数初值
    %m,n分别表示矩阵的长与宽
    a=zeros(m,n);
    a(1)=x;
    for i=2:m*n
        a(i)=1-2*a(i-1)*a(i-1);
    end
    for i=1:n*m
        a(i)=mod(round(a(i)*98273917129),256);
    end
    % imshow(a,[]);
    end
    

    其次是生成彩色混沌图像的定义函数:

    function c=hui_3(x,m,n)
    %x表示函数初值
    %m,n分别表示矩阵的长与宽
    r=zeros(m,n);
    r(1)=x+0.000000001;
    for i=2:m*n
        r(i)=1-2*r(i-1)*r(i-1);
    end
    for i=1:n*m
        r(i)=mod(round(r(i)*98273917129),256);
    end
    
    g=zeros(m,n);
    g(1)=x;
    for i=2:m*n
        g(i)=1-2*g(i-1)*g(i-1);
    end
    for i=1:n*m
        g(i)=mod(round(g(i)*98273917129),256);
    end
    b=zeros(m,n);
    b(1)=x-0.000000001;
    for i=2:m*n
        b(i)=1-2*b(i-1)*b(i-1);
    end
    for i=1:n*m
        b(i)=mod(round(b(i)*98273917129),256);
    end
    c=zeros(m,n,3);
    c=cat(3,r,g,b);
    c=uint8(c);
    % imshow(uint8(c));
    end
    

    二,灰度图像加密

    %% 灰度图像的异或加密
    %% 导入图像
    clc
    clear
    a=imread('灰度.bmp');
    subplot(2,2,1);
    imshow(a);
    title('原始图像')
    %% 生成密钥图像
    keys=hui_2(0.69,size(a,1),size(a,2));
    subplot(2,2,2);
    imshow(keys,[]);
    title('密钥图像');
    %% 生成加密图像
    mi_a=bitxor(keys,a);
    subplot(2,2,3);
    imshow(mi_a,[]);
    title('加密后图像');
    %% 解密图像
    jie_a=bitxor(mi_a,keys);
    subplot(2,2,4);
    imshow(jie_a);
    title('解密后图像');
    

    运行结果:
    在这里插入图片描述
    三,对于彩色图像的加密:

    %% 彩色图像的加密
    a=imread('text.jpg');
    subplot(2,2,1);
    imshow(a);
    title('yuan shi');
    %% keys
    keys=hui_3(0.91,size(a(:,:,1),1),size(a(:,:,1),2));
    subplot(2,2,2);
    imshow(keys);
    title('keys');
    %% jia_mi
    mi_a=bitxor(keys,a);
    subplot(2,2,3);
    imshow(mi_a);
    title('jia mi');
    %% ji_mi
    ji_a=bitxor(keys,mi_a);
    subplot(2,2,4);
    imshow(ji_a);
    title('ji mi');
    

    运行结果:
    在这里插入图片描述

  • 相关阅读:
    如何在Google Map中处理大量标记(ASP.NET)(转)
    MapXtreme在asp.net中的使用之加载地图(转)
    Oracle数据类型与.NET中的对应关系(转)
    GIS-开发例程、源代码、MapXtreme、Map (转)
    Win7 64位系统上配置使用32位的Eclipse(转)
    视频会议十大开源项目排行(转)
    RTMP流媒体播放过程(转)
    python中如何将生成等差数列和等比数列
    python中type dtype astype 的用法
    python类库numpy中常见函数的用法
  • 原文地址:https://www.cnblogs.com/mach-pupil/p/12535335.html
Copyright © 2020-2023  润新知