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,[])

恢復后圖像和原圖是一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM