正好剛寫了Hibert生成曲線,不如再加一篇應用的程序。
關於Hilbert圖像置亂,我在網上搜的應用領域主要集中在數字水印和圖像加密上,而這兩個領域我都沒怎么接觸過。
大部分的圖像置亂都是如下圖的置亂1所示,至於置亂2則是我不小心生成的。
置亂1是先把原圖按hilbert曲線進行賦值,拉成一條一維數組,再reshape成一副圖像。
置亂2是先把原圖reshape成一維數組,然后再按hilbert曲線進行賦值,生成一副圖像。
我感覺都差不多,網上置亂1更常見些,置亂2好像就沒見過,不過這都算置亂嘛。
也可以先用置亂1生成一副圖像,然后把生成的圖用置亂2再生成一副圖,那就更亂了,不過再亂也都是能夠恢復原圖的。
原圖:

置亂1:

置亂2:

部分函數在上篇,代碼如下:
clear all;close all;clc; h=256; w=256; n=8; img=imread('lena.jpg'); imshow(img,[]) imgn1=zeros(1,h*w); imgn2=zeros(h,w); [x,y]=hilbert(n); x=floor((x+0.5)*w)+1; y=floor((y+0.5)*h)+1; l=length(x); img2=reshape(img,[1,h*w]); for i=1:l imgn1(i)=img(y(i),x(i)); imgn2(y(i),x(i))=img2(i); end imgn1=reshape(imgn1,[h,w]); figure; imshow(imgn1,[]); figure imshow(imgn2,[])
