Arnold图像置乱的MATLAB实现

news2024/11/25 19:18:16

这件事情的起因是这样的,我需要研究一下各种图像置乱的算法。然后在知乎上找到了一篇关于Arnold变化的文章,但是呢,这个人实际上是卖资料,代做大作业的。详细的代码根部不给你,则给我气坏了,必须要手动实现一下,打击他卖资料的嚣张气焰。

文章目录

      • 代码编写
      • 周期分析

简书上的一个作者写的还是相当不错的,这是网址链接。

Arnold 变换是俄国数学家 Vladimir I. Arnold提出的一种变换,一幅 N × N N ×N N×N 的数字图像的二维Arnold
变换定义为:

[ x ′ y ′ ] = [ a b c d ] n [ x y ]   m o d   N \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} a & b \\ c & d \end{array}\right]^{n}\left[\begin{array}{l} x \\ y \end{array}\right] \bmod N [xy]=[acbd]n[xy]modN

注意: x x x y y y 是原图像的像素坐标, x ′ x' x y ′ y' y 是变换后的像素坐标。保证 ∣ a d − b c ∣ = 1 |ad-bc|=1 adbc1,如置换矩阵系数设为 a = b = 1 a=b=1 ab1 c = 2 c=2 c2 d = 3 d=3 d=3,置换次数 n = 20 n=20 n=20,则他们被当作密钥 key,用于解密。Arnold 变换的图像类型只能是 N × N N\times N N×N 的图片。

我从网络上面下载了一朵花的图片,如下

在这里插入图片描述

代码编写

close all;
%图像加密置乱:
a=imread('flower.png');               %取预处理图像
a=a(1:226,1:226,1:3);                 %截取成正方形
R=a(:,:,1);                           %取图像的R层像素
G=a(:,:,2);                           %取图像的G层像素
B=a(:,:,3);                           %取图像的B层像素
figure;
subplot(2,2,1);imshow(a);title('original');
subplot(2,2,2);imshow(R);title('R');
subplot(2,2,3);imshow(G);title('G');
subplot(2,2,4);imshow(B);title('B');

%三个不同密钥
keyR=10;keyG=20;keyB=30;

aR=arnold(R,keyR,1);aG=arnold(G,keyG,1);aB=arnold(B,keyB,1);%对各层用不同的密钥加密
figure;
subplot(2,2,1);imshow(aR);title('aR');%加密后的图像
subplot(2,2,2);imshow(aG);title('aG');
subplot(2,2,3);imshow(aB);title('aB');
aa=cat(3,aR,aG,aB);                            %各层加密后在合成彩色图像
subplot(2,2,4); imshow(aa); title(' Permuted');%RGB图像加密后的结果
imwrite(aa,'a_flower.bmp');

%图像解密
R=arnold(aR,keyR,0);G=arnold(aG,keyG,0);B=arnold(aB,keyB,0);%对各层用不同的密钥加密
R=uint8(R);G=uint8(G);B=uint8(B);
figure;
subplot(2,2,1);imshow(R);title('R');
subplot(2,2,2);imshow(G);title('G');
subplot(2,2,3);imshow(B);title('B');
flower=cat(3,R,G,B);                              %各层加密后在合成彩色图像
subplot(2,2,4); imshow(flower); title('恢复的图案');%RGB图像解密后的结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

arnold.m 是一个单独的函数文件

function img=arnold(img,key,pon)
%img是原始图片
%Key是输入的密钥
%a,b是置乱矩阵里面的值
%pon表示正变换或者反变换
[h, w]=size(img);
a=2;b=3;
img_new = zeros(h,w);  %[h, w]=size(img)
N=h;

if(pon)%正变换
    for i=1:key   %n为置乱轮数
        for y=1:h
            for x=1:w
                xx=mod((x-1)+b*(y-1),N)+1;  %a,b可提前指定
                yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1;
                img_new(yy,xx)=img(y,x);
            end
        end
        img=img_new;
    end
else%反变换
    for i=1:key
        for y=1:h
            for x=1:w
                xx=mod((a*b+1)*(x-1)-b*(y-1),N)+1;
                yy=mod(-a*(x-1)+(y-1),N)+1  ;
                img_new(yy,xx)=img(y,x);
            end
        end
        img=img_new;
    end
end

周期分析

理论上下面的代码是可以计算周期的,但是我跑到了 1 0 7 10^7 107 的数量级,依然没有闭环。等以后如果弄明白了再来讲吧。

%计算Arnold变换的周期T可以利用一下MATLAB程序来实现。

x = 1; y = 1;N = 4; %N × N为128 ×128的图像
T = 1;
t = x; x = x + y; y = 2*t+3*y;
while x~= 1 || y~= 1
    T = T + 1;
    if x >N
        x =mod ( x,N) ;
    end
    if y >N
        y =mod ( y,N) ;
    end
    t = x; x = x + y; y = 2*t+3*y;
end

T %所得的T值即为Arnold变换的周期

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java泛型 <T> T、 T、<T>的用法

我们聊聊Java泛型中的 T 是什么? T 在Java泛型中,被称作类型变量。那么什么又是类型变量? 类型变量在整个类的定义中用于指定方法的返回类型,同时也可以指定字段和局部变量的类型,我们可以用具体的类型来替换类型变量…

数据库【数据操作】

这篇文章呢是小编对正在学习的数据库的实验内容进行一个简单的记录,以便后期复习,希望小编的这些例子也可以帮助到正在和我一样学习数据库的友友们哦~ 实验目的: (1)掌握使用T-SQL插入数据,修…

Arthas

Arthas 概述 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有…

无纸化、自动化、智能化|WMS系统升级你的仓储管理模式

随着物流行业的不断发展,现代仓储管理已经从传统的手工操作逐渐转向无纸化、自动化、智能化管理。WMS系统作为一种全新的仓储管理模式,正在逐步被企业所接受和运用。 什么是WMS系统? WMS系统全称为Warehouse Management System,即…

汇编寄存器之内存访问

1.内存中字的存储: 在CPU中用一个16位寄存器来存储一个字, 高8位存高字节,低8位存低字节 如AX寄存器存在一个字,那么AH存高字节,AL存低字节 在内存中存储字时是用两个连续的字节来存储字的, 这个字的低字节存在低单元,高字节存在高单元. 如下表示: 内存单元编号 单元中…

开发工程师-常用算法基本思想 -分类-时间复杂度与空间复杂度概述

文章目录 插入排序选择排序交换排序归并排序各种排序算法时间复杂度、空间复杂度以及稳定性分类 插入排序 1.基本思想:将一个数据插入到一个有序的数据列表,得到一个新的有序列表 2.分类:直接插入排序、希尔排序 选择排序 1.工作原理&…

机器学习基础知识之多模型性能对比评价方法

文章目录 1、交叉验证t检验2、Friedman检验与Nemenyi后续检验 在进行预测或分类对比实验时,通常需要比较两个或两个以上的模型性能,因此,下面将介绍两个常用的多模型性能对比评价方法,一种是交叉验证t检验,该方法主要用…

英语单词365-9

英语单词365-9 9.1 manipulate_哔哩哔哩_bilibili

网络安全就业会不会容易被淘汰?

先说结论:不会 作为一名资深的网络安全工程师,我的观点是网络安全是一个长期持续的领域,而不是一个很容易被淘汰的职业。可能会随着技术的进步和新的威胁的出现而有所改变,但作为一个专门从事网络安全领域的人员,我们…

SQL面试必备:100道高频考题解析

前言 在众多IT职场中,SQL技术一直是一个非常重要的技能点。如果你正在准备SQL相关的面试,那么这份“SQL面试 100 问”绝对是你不能错过的宝藏! 这份清单涵盖了100道高频考题,从基础知识到复杂应用都有所涉及,帮助你全…

数据结构·第3章【栈和队列】

栈 顺序栈 栈(Stack)是限定仅在表的一端进行插入或删除操作的线性表。通常称插入删除的一端为栈顶(top),另一端称为栈底(bottom)。 typedef struct{DataType data[StackSize];int top; }Se…

缩减虚拟机堆空间的方式,缓解32位cpu上虚拟内存地址空间限制导致的内存分配失败崩溃

缩减虚拟机堆空间的方式,缓解32位cpu上虚拟内存地址空间限制导致的内存分配失败崩溃 前言Matrix使用说明效果验证 前言 瑞芯微平台应用开发,目前RK3288芯片应用还是比较广泛(成本低),它是一个32位cpu,并且…

Halcon中的一些3D算子

一、记录一些Halcon里的关于3D的算子 1.read_object_model_3d 从文件读取一个3d模型 如下图,读的一个ply文件出来是个3d点云模型 2.visualize_object_model_3d 交互式展示3d模型 即上个算子读出来后,通过这个算子可以把3d模型显示出来旋转、平移&am…

SpringFramework 中CollectionUtils 工具类的使用

CollectionUtils是Spring框架中的一个工具类,提供了一系列对集合的操作方法。 import org.springframework.util.CollectionUtils;import java.util.*;public class CollectionUtilDemo {public static void main(String[] args) {//判断一个集合或Map是否为空&…

OWASP ZAP alerts

前提 使用OWASP ZAP对网站进行安全扫描,扫描后发现一些警告。 使用警告名称在百度进行搜索就能看到在OWASP ZAP网站上对应警告的解释。 可以在如下地址输入alert查询 https://www.zaproxy.org/docs/alerts/ Missing Anti-clickjacking Header 见https://www.zap…

SQL Server 2008R2安装图文教程(附SQL Server下载安装包)

SQL Server 2008R2 安装教程 演示系统:Windows server 2008R2 安装包:下载传送门 下载并解压安装包,找到解压的安装包,双击【setup.exe】 如果是你的服务器没有安装.NET Framework 3.5,那会弹出个提示框,…

CODEC 基础知识

 ASDOUT : ADC data output  DSDIN : DAC data input  LRCK : Left/Right data alignment clock  SCLK : Bit clock  MCLK 256 LRCK 或者 MCLK384 LRCK different audio data formats:  I2S …

公司新来了个拿18K出来的测试,让我见识到了什么叫真正的测试扛把子...

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

如何编写快速高效的SQL查询(四)——优化特定类型的查询与样例

这一节,我们将介绍如何优化特定类型的查询。 本节介绍的多数优化技巧都和特定的版本有关,所以对于未来MySQL的版本未必适用。毫无疑问,某一天优化器自己也会实现这里列出的部分或者全部优化技巧。 优化COUNT()查询 COUNT()聚合函数&#xf…

Hive安装部署

1、Hive安装地址 ①Hive官网地址 Apache Hive ②文档查看地址 GettingStarted - Apache Hive - Apache Software Foundation ③下载地址 Index of /dist/hive ④github地址 GitHub - apache/hive: Apache Hive 2、 安装Hive 1)把apache-hive-3.1.3-bin.ta…