我是靠谱客的博主 笨笨柠檬,这篇文章主要介绍图像加密——matlab实现Arnold置乱算法及矩阵幂的求解1、Arnold置乱和逆置乱的数学公式2、图像复原的两种形式3、matlab实现置乱与逆置乱4、矩阵求幂,现在分享给大家,希望可以做个参考。

文章目录

  • 1、Arnold置乱和逆置乱的数学公式
  • 2、图像复原的两种形式
    • 通过逆矩阵
    • 周期性来求变换次数
  • 3、matlab实现置乱与逆置乱
  • 4、矩阵求幂

1、Arnold置乱和逆置乱的数学公式

在这里插入图片描述
xn,yn表示像素在原图像中的坐标,xn+1,yn+1表示变换后的像素坐标,a,b为参数,均为正整数且都小于N,变换矩阵行列式满足∣A∣=1,则可逆。因此如下为逆置乱公式:
在这里插入图片描述
由此可以看到,只要知道参数ab且知道变换次数的情况下,才能让置乱后的图像复原。

2、图像复原的两种形式

通过逆矩阵

周期性来求变换次数

逆置乱可以让图像复原,除了采用逆置乱复原外还有一种方式,利用周期性,当矩阵进行一定次数变换的时候,会恢复原图,那需要变换多少次才能恢复原图呢?

常规图像的变换次数:
在这里插入图片描述
如果遇到非常规尺寸的图像,可以采用如下伪代码进行求解变换次数:
其中A和N是已知的,A是变换矩阵,N是图像尺寸,即可求解。

在这里插入图片描述

3、matlab实现置乱与逆置乱

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
clear all; close all; clc; img=imread('256.bmp');%读取图片,根据Arnold变换的条件,图像必须是正方形 mysize=size(img);%当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数。 if numel(mysize)>2%如果输入是彩色图像 img=rgb2gray(img); %将彩色到灰度图像的转换 fprintf("图像为彩色图n"); %其中r或者n表示换行 end imshow(img,[]) title('彩色原图的灰度图'); figure(2) imhist(img) %原图的直方图统计 %如果输入的不是正方形图像,则打印如下 [h,w]=size(img); if h>w img = imresize(img, [w w]); fprintf("图像长宽不一样,图像可能失真r"); end if h<w img = imresize(img, [h h]); fprintf("图像长宽不一样,图像可能失真"); end [h,w]=size(img); %置乱与逆置乱必须采用共同参数的时候,就相当于密码,才能解密,让图像复原 n=10;%迭代次数 a=1;b=1; N=h;%N代表图像宽高,宽高要一样 %置乱操作 imgnnn=zeros(h,w); for i=1:n for y=1:h for x=1:w xx=mod((x-1)+b*(y-1),N)+1; %mod取余操作,(a,b)就是a除以b的余数 yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1; imgnnn(yy,xx)=img(y,x); end end img=imgnnn; end imgnnn = uint8(imgnnn); figure(3) imshow(img,[])%置乱后的图片 title('置乱后的图片 a=1;b=1,n=10'); imwrite (imgnnn,'置乱后的图片.bmp'); %生成图像保存功能 %逆置乱复原 img2=imread('置乱后的图片.bmp');%读取置乱图片 for i=1:n for y=1:h for x=1:w xx=mod((a*b+1)*(x-1)-b*(y-1),N)+1;%matlab索引中不能是0,要从1开始 yy=mod(-a*(x-1)+(y-1),N)+1 ; imgnnn(yy,xx)=img2(y,x); end end img2=imgnnn; end imgnnn = uint8(imgnnn); figure(4) imshow(imgnnn,[]) title('逆置乱的复原图片'); imwrite(imgnnn,'逆置乱的复原图片.bmp');%生成图像保存功能

在这里插入图片描述

4、矩阵求幂

由于变换的次数一般很多,比如说变换150次,求一个矩阵的150次方很麻烦,但是后续若想简化计算,直接进行150次方的运算,就需要提前把矩阵求出,方法如下:

在matlab的命令行输入A矩阵,然后给定最终的变换矩阵B,及变换次数150,即可得到想要的矩阵。

在这里插入图片描述

最后

以上就是笨笨柠檬最近收集整理的关于图像加密——matlab实现Arnold置乱算法及矩阵幂的求解1、Arnold置乱和逆置乱的数学公式2、图像复原的两种形式3、matlab实现置乱与逆置乱4、矩阵求幂的全部内容,更多相关图像加密——matlab实现Arnold置乱算法及矩阵幂内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部