zoukankan      html  css  js  c++  java
  • matlab练习程序(Arnold图像置乱)

    自从上次写了Hilbert图像置乱之后,就对图像置乱研究了一下,发现这里面也是有很多置乱算法的。

    Arnold也算一种比较主要的置乱算法,算法由以下变换公式产生:

    这里a和b是参数,n是迭代次数,N是图像的高或宽。

    有了正变换公式,我们还需要反变换公式,正好我最近在学Mathematica,反变换公式就是用这个软件求的。

    公式如下:

    两个变换矩阵正好是求逆的关系吧,手算也出来了,不过顺便熟悉一下Mathematica,何乐不为呢。

    处理结果如下:

    原图:

    置乱后:

    恢复后:

    matlab代码如下:

    clear all;close all;clc;
    
    img=imread('lena.jpg');
    imshow(img,[])
    [h w]=size(img);
    
    %置乱与复原的共同参数
    n=10;
    a=3;b=5;
    N=h;
    
    %置乱
    imgn=zeros(h,w);
    for i=1:n
        for y=1:h
            for x=1:w           
                xx=mod((x-1)+b*(y-1),N)+1;
                yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1;        
                imgn(yy,xx)=img(y,x);                
            end
        end
        img=imgn;
    end
    figure;
    imshow(imgn,[])
    
    %复原
    img=imgn;
    for i=1:n
        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  ;        
                imgn(yy,xx)=img(y,x);                   
            end
        end
        img=imgn;
    end
    figure
    imshow(imgn,[])

    恢复后图像和原图是一样的。

  • 相关阅读:
    后缀数组详解
    快速傅里叶变换详解(FFT)
    算法学习————SG函数和SG定理
    noi.ac七一模拟赛
    算法学习————高斯消元
    算法学习————Lucas定理
    算法学习————Kruskal重构树
    算法学习————FWT
    20210629模拟
    复习笔记之背包
  • 原文地址:https://www.cnblogs.com/tiandsp/p/3954550.html
Copyright © 2011-2022 走看看