基于Arnold变换的图像置乱-Matlab实现
2018-03-23 15:53
274 查看
Arnold变换是俄国数学家VladimirI.Arnold提出的一种变换
一幅M*N的数字图像的二维Arnold 变换定义为:[xn+1yn+1]=[1abab+1][xnyn]mod(N)[xn+1yn+1]=[1baab+1][xnyn]mod(N)
其中x,yx,y表示变换前灰度图中像素的位置,xn+1,yn+1xn+1,yn+1表示变换之后的像素位置,a,ba,b为参数,nn表示当前变换的次数,NN为图像的长或宽(由于该算法只适用于长宽相等的图像,所以我们不讨论M不等于N的情况),mod为模运算。
数字图像可以看为一个二维矩阵,经过Arnold变换之后图像的像素位置会重新排列,这样图像会显得杂乱无章,从而实现了对图像的置乱加密效果。
置乱代码:
%img 灰度图像 a,b为参数 n为变换次数 function arnoldImg = arnold(img,a,b,n) [h,w] = size(img); N=h; arnoldImg = zeros(h,w); for i=1:n for y=1:h for x=1:w %防止取余过程中出现错误,先把坐标系变换成从0 到 N-1 xx=mod((x-1)+b*(y-1),N)+1; yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1; arnoldImg(yy,xx)=img(y,x); end end img=arnoldImg; end arnoldImg = uint8(arnoldImg); end
复原时用变换矩阵的逆矩阵即可
[xn+1yn+1]=[ab+1−a−b1][xnyn]mod(N)[xn+1yn+1]=[ab+1−b−a1][xnyn]mod(N)
复原代码:
function img = rearnold(arnoldImg,a,b,n) [h,w] = size(arnoldImg); img = zeros(h,w); N = h; 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 ; img(yy,xx)=arnoldImg(y,x); end end arnoldImg=img; end img = uint8(img); end
相关文章推荐
- 基于经典分割算法的图像内细胞识别与计数(matlab实现)(不定期更新完善)
- 基于DCT的图像压缩及Matlab实现
- Matlab实现基于内容的图像检索系统
- 基于Retinex的图像去雾算法(MATLAB实现)
- 基于PCNN的图像分割的matlab实现 推荐
- 基于空间相关的图像模板匹配及MATLAB实现
- 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比
- 基于空间相关的图像模板匹配及MATLAB实现
- 基于Retinex的图像去雾算法(MATLAB实现)
- 基于PCNN的图像分割的matlab实现
- 图像去模糊算法在CUDA上的实现,基于MATLAB平台
- 基于空间相关的图像模板匹配及MATLAB实现
- 基于matlab实现图像的直方图均衡
- 基于可变中心任意形状结构元素的图像腐蚀及matlab实现
- MATLAB实现基于邻近插值的图像旋转代码
- 基于VC与Matlab的混合编程实现图像的三维显示
- 基于直方图均衡化的水下激光图像处理(MATLAB仿真)
- Matlab图像识别/检索系列(6)-10行代码完成深度学习网络之基于CNN的图像分类
- matlab实现图像校正
- 基于MATLAB中fft2函数的二维图像数据的频谱生成代码