【图像加密】基于matlab仿射变换数字图象置乱【含Matlab源码 1171期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源: 【图像加密】基于matlab仿射变换数字图象置乱【含Matlab源码 1171期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、简介
1 引言
随着多媒体技术的迅速发展和网络带宽限制的放松,越来越多的数字图象在网络上传输,这些图象信息有些无关紧要,有些却至关重要,它们有可能涉及到个人的隐私、公司的利益、国家的安全,其价值无法衡量。另一方面,网络的普及使得任何人都有可能接触到其中的信息,并从中搜集,而无论这种搜集是善意还是恶意、合法还是非法,这就使得在网络上传输图象的安全性倍受关注,对图象进行加密也就成为重要的研究方向。
当前,信息隐藏与伪装技术是一个非常重要而又非常活跃的研究领域,而图象的置乱技术既可作为一种常见的图象加密方法,又可作为进一步隐藏图象信息的预处理,是一种值得深入研究的课题。已有很多文献提出了图象置乱的方法,如文献提到的Arnold变换,文献提出的排列变换,文献提出的Fibonacci变换,这些置乱变换置乱图象后的直观效果各不相同,但其计算时间复杂度是基本一致的,因为它们均存在取模(mod)运算,使得在作置乱时较费时。文章首先分析了Arnold变换、排列变换、Fibonacci变换的不足,然后基于仿射变换,提出了一类新的数字图象置乱变换,该变换不含取模运算,只含加、减、乘运算,从而使得计算时间较快。在文章的第三部分,提出了一个猜想,并给出了猜想的计算机验证示例。最后进行了总结,指出了今后的研究方向。
2 Arnold变换、排列变换、Fibonacci变换的不足
Arnold变换是Arnold在遍历理论研究中提出的一种变换,对于正方形的数字图象来说,使用离散化的Arnold变换,其定义为:
其中N为图象的高度和宽度的象素数。
文献给出排列变换的定义为:
其中{ad-bc=±1, a, b, c, deZ} ,当a=b=c=1, d=2时就是Arnold变换。当a=b=c=1, d=0时就是文献[3] 提到的Fibonacci变换。它们的共同点是,均采用了取模的运算,以此来保证变换后的象素位置(x’,y’)不超过所给图象的区域邀(x,y):0≤x≤N-1,0sy≤N-1妖。这就带来了两点不足:(1)置乱时较费时;(2) 除Arnold变换的逆变换易求出外, 其余变换的逆变换不易求出。
一幅数字图像可用一矩阵A=邀a(i, j) 妖NxN表示, 其中a(ij) 表示图像在第i行j列象素处的灰度值(或RGB分量值) 。
数字图象的置乱原理是:将原来点(x, y) 处象素对应的灰度值或RGB颜色值移动到变换后的点(x’, y’) 处。如果对一个数字图象迭代地使用离散化后的Arnold变换、排列变换、Fibonacci变换, 即将(1) 或(2) 式左端的(x’, y’) 作为下一次相应变换的输入, 则可重复这个过程一直作下去。当迭代到某一步时,如果出现的图象的各种灰度值或RGB值均匀分布在图象所在的区域:邀(x, y) :0≤x≤N-1, 0sy≤N-1妖, 则图象的信息将完全被掩盖, 达到了图象加密的目的。
3 仿射变换
仿射变换的一般形式为:
为便于与Arnold变换、排列变换、Fibonacci变换对照,将它写成矩阵的形式为:
虽然对于平面仿射变换由三对对应点代入(3)后就可完全确定,但由于目的是要用它作图象的置乱。因此对仿射变换还有特殊的要求,即:要寻找恰当的a,b,c,d,e,f使得:(1)变换是区域邀(x,y):1≤x≤N,1≤y≤N妖到其自身的单映射;(2)变换是区域邀(x,y):1≤x≤N,1≤y≤N妖到其自身的满映射。根据文献[5]中所指出的,可将仿射变换分解成:运动变换、斜对称变换、相似变换、压缩(拉伸)变换、正交变换、剪移等变换的组合,从而可求得满足要求(1)和(2)的一系列解。求得的a,b,c,d,e,f可看作图象置乱加密的密钥,这里仅给出一个所求得的仿射变换,如下所示。
当x<y时:
当x≥y时:
该变换避免了取模运算,其中只有加、减、乘运算,不仅降低了其计算难度,而且也使求其逆变换变得容易,其逆变换为:
当x’+y’≤N+1时:
当x’+y’>N+1时:
没有逆变换,可以通过求出周期T(重复变换T次回到原始图象),进行迭代T次获得图象解密。对Arnold变换,T通常是比较大的[3],如对256×256象素图象T=192。这固然给敌方破译图象秘密增加了难度,但同时也给自己的解密增加了不必要的计算,对某些实时性要求高的系统带来不变。有了逆变换的好处在于,知道了图象置乱加密的密钥后,可立即进行解密,没有必要进行大数量的迭代运算。
三、部分源代码
function chengxu()
A=imread('lena.png');
figure,imshow(A);
title('原图像(256*256)');
for K=1:16 %置乱16次
figure,imshow(B);
title(['置乱',num2str(K),'次后的图像'])
A=B;
end
end
function B=zhiluan(A)
%此函数将图像A置乱,输出置乱后的图像B
for x=1:N
for y=1:N
if x<y %计算(x,y)点映射到B图像的坐标(x1,y1)
x1=x-y+N+1;
y1=-x+N+1;
else
x1=x-y+1;
y1=-x+N+1;
end
end
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/119280714
- 点赞
- 收藏
- 关注作者
评论(0)