圖像置亂

Arnold變換

Arnold 變換,又稱“貓臉”變換,是 Arnold在研究遍歷理論過程中提出的一種變換。

一般用

(xy)=(1112)(xy)modN

來做變換。

稍加證明可知,該映射是雙射,其逆變換爲

(xy)=(2111)(xy)modN

該變換是合理的。

稍加思考可知,Arnold變換具有週期性,即當迭代到某一步時,將從新得到原始圖像。選取適當的迭代次數才能得到較好的置亂圖。當迭代次數較多時,不宜一步步去算,可先矩陣快速冪求出

(1112)k

再對原圖像進行置亂。

講道理,爲啥一定要是正方形呢?
直覺告訴問我,不是正方形,不能保證雙射,就不能還原了。
原圖原圖->40次迭代40次迭代->90次迭代90次迭代

看上去,40次迭代效果最好。

如何快速找到較好迭代次數,是有待討論的問題。
matlab的速度慘不忍睹,實在有必要引入c++了

function new_fig = Arnold(fig,k,opt)

% Arnold變換
% 輸入:圖像矩陣fig(n*m*k),置亂次數k,操作類型opt(1是置亂,2是還原)
% 輸出:置亂後的圖像矩陣new_fig(n*m*k)

new_fig = uint8(zeros(size(fig)));
n = size(fig,1);
if opt == 1
    A = fast_pow([1 1; 1 2],k,n);
else
    A = fast_pow([2 -1; -1 1],k,n);
end

for i = 1 : n
    for j = 1 : n
        t = mod(A*[i-1;j-1],n)+1;
        new_fig(t(1),t(2),:) = fig(i,j,:);
    end
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章