数字图像处理(三) 图像Arnold加密

   环境matlab


  上篇讲到利用位平面技术插入隐私图片,当然提取的时候也很简单,这个时候,便可以使用Arnold变换,一种常用的图像置乱技术,其实就是矩阵的变换。对图像进一步加密。


如图:

数字图像处理(三) 图像Arnold加密_第1张图片


通过:

function a = arnold()

%读取图像
 aa=imread('abc.bmp');

%置换次数
iTimes=1;

%读取aa图像大小
[iH iW]=size(aa);
if iH ~= iW % 必须是正方形
    error('The cover must be a square !');
    return;
end

%矩阵转换
outImg=uint8(zeros(iH,iW));
tempImg=aa;
for i=1:iTimes 
        for u=1:iH
            for v=1:iW
                temp=tempImg(u,v);
%置乱  取模运算
                ax=mod(3*(u-1)-(v-1),iW)+1;
                ay=mod((v-1)-2*(u-1),iW)+1;

                outImg(ax,ay)=temp;
            end
        end
      tempImg=outImg;
end
outImg=tempImg;

%图像展示
 figure, imshow(outImg);

%将置乱后的图像保存为:
imwrite(outImg,'mysecret.bmp')

置乱之后几乎什么都看不清:

数字图像处理(三) 图像Arnold加密_第2张图片


这时给提取出来的时候,对方也不知道这幅图是什么


当你发给对方的时候,再用同样的方法倒过来,当然要知道置换了几次。

function a = unarnold()

%读取加密图像
aa=imread('mysecret.bmp');

%和原来一样置换一次
iTimes=1;
[iH iW]=size(aa);
if iH ~= iW % 必须是正方形
    error('The cover must be a square !');
    return;
end
outImg=uint8(zeros(iH,iW));
tempImg=aa;

for i=1:iTimes
         for u=1:iH
            for v=1:iW
                temp=tempImg(u,v);
                 ax=mod((u-1)+(v-1),iW)+1;  
                 ay=mod(2*(u-1)+3*(v-1),iW)+1;
                outImg(ax,ay)=temp;
            end
         end
         tempImg=outImg;
end


outImg=tempImg;
figure, imshow(outImg);

 %输出原图
imwrite(outImg,'unmysecret.bmp')

这样就解密开图像了。


w = bitset(a,8,c);
a为一幅你可以给人看到的图,


8为位图的第八层,


c为你用了刚刚的算法加密后的图像。


最后便把一幅加密后的图像放进来另一幅图像了。









你可能感兴趣的:(数字图像处理)