信息隐藏技术常常与加密技术同时使用,使得隐藏的信息更加安全。


前言

最近在做选修课的结课大作业,做一个图像信息隐藏的小实验,要求对隐藏的水印(也就是小图像)进行置乱,其中一个就是幻方置乱。作为上课不好好听讲的代表之一,大作业肯定是靠C站啦。但是在网上查找大量资料之后,深深的绝望了,网上能找到的都是一些论文,代码少之又少(花钱下载是不可能滴)。好不容易找到一个大佬给的代码,置乱之后却总不能成功恢复,最后实在咩办法了,我就自己动手改了一下,当然,由于能力有限,代码肯定是怎么简单怎么来,目标就是加密能恢复就行。为了造福更多的同胞,仅在这里简单记录一下。


一、幻方是什么?

这里我就不说了,大家自行搜索吧。

二、matlab代码

1.生成幻方

这里提供一个生成奇数阶幻方的代码,这个是借鉴别人的,实际在我的代码中我用的是matlab提供的magic()函数,如果觉得自带的这个函数太单一了,也可以用这个函数代替magic().
代码如下:

% 文件名: magicsquares. m
% 函数功能: 本函数将完成 n 阶二维幻方的求取 . 要求 n 为奇数
% 输入格式举例: result = magicsquares( 5)
% 参数说明:
% n 为阶数
% result 为求得的二维幻方
function result = magicsquares( n)
if mod( n, 2) == 0
error( 'n要求为奇数') ;
end
result = zeros( n) ;
j = floor( n /2 ) + 1; % 中间 1 列
i = n + 1; % 便于以后从第 n 行开始考虑起
result( 1, j) = 1 ;
for k = 2:n* n % 依次考虑后 n^2 - 1 个数
i = i - 1 ;
j = j + 1 ; % 行数减 1, 列数加 1
if i < 1 && j > n % 特殊情况 4
i = i + 2 ;
j = j - 1 ;
else
if i < 1 % 特殊情况 1
i = n;
end
if j > n % 特殊情况 2
j = 1;
end
end
if result( i, j) == 0
result( i, j) = k;
else % 特殊情况 3
i = i + 2 ;
j = j - 1 ;
result( i, j) = k;
end
end

2.幻方置乱函数

在主函数中调用的就是这个部分。
代码如下:

% 文件名: magicreplace. m
% 函数功能: 本函数将完成对输入的图像信号按幻方置换策略进行置乱
% 输入格式举例: result = magicreplace( I, M, 15,1)
% 参数说明:
% matrix 为待置乱图像
% magic为使用的幻方矩阵
% control为置乱的次数
%tap=0为恢复;tap=1为置乱
% result 为置乱后的结果
function result = magicreplace( matrix, magic, control,tag)
% 分析原图像尺寸并补遗
[ m, n] = size( matrix) ;
[ a, b] = size(magic);
rowadd = a-mod( m, a) ;
coladd = b-mod( n, b ) ;
if rowadd == arowadd = 0;
end
if coladd == bcoladd = 0;
end
input = uint8( zeros( [ m + rowadd ,n + coladd] ) ) ;
input( 1:m, 1:n) = matrix;
% 幻方变换主过程,得到置乱control次后的置乱矩阵
for r = 1:afor c = 1:bmagic( r, c) = mod(magic( r, c) - control+a*b,a*b);if magic( r, c) == 0magic( r, c) = a*b;endend
end
% 对待置乱图像进行分块置乱
if mod(control,a*b)==0 result = input;
elseif tag==1fun = @placemagicfun; % 调用置乱子函数result = blkproc( input, [ a b] , fun, magic) ;
elseif tag==0fun = @replacemagicfun; % 调用恢复子函数result = blkproc( input, [ a b] , fun, magic) ;
end

3.分块置乱函数

代码如下:

% 置乱函数
function result = placemagicfun( matrix,P1 ) %matrix是待处理的11x11矩阵,P1是magic矩阵
[ a, b] = size(P1);
for i = 1: afor j = 1: bn = P1(i,j)-1;if n==0n=a*b;end[i1,j1]=find(P1==n);result( i, j) = matrix(i1,j1) ;end
end

4.分块恢复置乱函数

代码如下:

% 恢复置乱函数
function result = replacemagicfun( matrix,P1 ) %matrix是待处理的11x11矩阵,P1是magic矩阵
[ a, b] = size(P1);
for i = 1: afor j = 1: bn = mod(P1(i,j)+1,a*b);if n==0n=a*b;end[i1,j1]=find(P1==n);result( i, j) = matrix(i1,j1) ;end
end

5.试例函数

这里使用的时候最好图片的边长是幻方的整数倍,不是的话恢复效果会不太好,好像是会有黑边。
代码如下:

clc;clear all;
img = imread('lena.bmp');
I = rgb2gray(img);  % 灰度化%幻方置乱
M=magic(5);
MagicreplaceImg = magicreplace( I, M, 15,1);
ReMagicreplaceImg = magicreplace( MagicreplaceImg, M, 15,0);figure
subplot(2,2,1);imshow(I);title('original image');
subplot(2,2,2);imshow(MagicreplaceImg);title('after magic');
subplot(2,2,3);imshow(ReMagicreplaceImg);title('restore magic');

6.效果展示


这里附上我借鉴的代码的源地址
https://blog.csdn.net/include_zrl/article/details/87104345

总结

以上就是我本次实验的收获之一啦。后期有时间我会把剩下的Arnold置乱,RC4加密,DCT隐藏,最低位信息隐藏都上传上来的,敬请期待。

matlab实现对图像的简单幻方置乱相关推荐

  1. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  2. MATLAB Arnold 的图像置乱加密及解密

    MATLAB Arnold 的图像置乱加密及解密 二维 Arnold 的图像置乱加密及解密(1):RGB图像的处理 基于Arnol变换的图像置乱 Arnold变换是俄国数学家Vladimir I. A ...

  3. Matlab|绘制函数图像

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 欢迎加入团队圈子!与作者面对面!直接点击! 一.绘制图像的常用 ...

  4. MATLAB小波变换的图像融合系统[完美运行,GUI界面,详细教程,万字文稿]

    课题题目 基于MATLAB小波变换的图像融合系统 GUI框架链接:戳这里 课题背景介绍 数字图像融合是一项最新发展起来的应用,对于数字图像处理和数字图像分析起着非常重要的重要.虽然现阶段,对于图像处理 ...

  5. matlab画不定积分图像实例,matlab怎么画函数图像,原来是这样的

    函数想必大家都不陌生,有时候我们需要画出函数的图形,但是复杂的函数我们画出来花费时间太多,下面我来教大家用matlab画函数图像. 工具/材料 电脑 matlab软件 操作方法 01 先下载安装这个软 ...

  6. MATLAB计算杨氏模量,基于MATLAB处理动态图像的杨氏模量测量方法.doc

    7A版优质实用文档 PAGE PAGE 16 7A版优质实用文档 基于MATLAB处理动态图像的杨氏模量测 量方法 黄浩钊1,陈玥琦2,李家卉3 第三军医大学学员13营,重庆,400038:2.第三军 ...

  7. matlab 画图白边,matlab保存画框图像去白边

    在matlab图像处理中,为了标识出图像的目标区域来,需要利用plot函数或者rectangle函数,这样标识目标后,就保存图像. 一般saves保存的图像存在白边,可以采用imwrite对图像进行保 ...

  8. matlab小波变换图像融合,MATLAB小波变换的图像融合算法的研究与实现+代码

    摘  要:随着科技的不断进步,图像融合由于其能够去除环境中的部分干扰以及加强原图像的有效信息等优点逐渐成为人们的研究热点之一.本文详细分析了小波变换和图像融合的相关理论,将小波变换的多分辨率分析的特点 ...

  9. matlab一般函数的绘制方法,基于MATLAB的函数图像绘制方法

    C DOI:10.16707~.cnki.fjpc.2017.01.084 E 晒 亍嚣 基于 MATLAB的函数图像绘制方法 张笑笑 一,童 键 z (1湖南省长沙市第一中学 湖南 长沙 410() ...

  10. 如何将MATLAB绘制的图像保存为动图

    资源下载:https://download.csdn.net/download/qq_16635325/10894373 方法,我已经写成了一个函数SAVEGIF 用法和说明 savegif   将位 ...

最新文章

  1. php 判断来源 微信客户端_PHP判断手机端、PC端 、微信代码实例
  2. Inno Setup使用教程大全
  3. 视频码率,帧率和分辨率的区别
  4. 通讯频道:TOM续约Skype破镜重圆
  5. c++实现数值的整数次方(类似pow())作用
  6. NGUI_Atlas
  7. Android学习笔记(十二)——使用意图传递数据的几种方式
  8. Atitit.编程语言的主要的种类and趋势 逻辑式语言..函数式语言...命令式语言
  9. ContextCapture与Pix4D生成正射影像并进行拼接修图(附航测练习数据下载)
  10. Mac OS 系统瘦身 - xcode 清理
  11. 【英语语法】句子类型
  12. 【银河麒麟V10】【服务器】IO调度算法与性能分析
  13. 搜狗拼音Lunix系統-乱码及繁体解决
  14. topcoder入门
  15. 魔力宝贝html5模板,魔力宝贝辅助脚本最新版
  16. Oracle数据库CPU占用过高
  17. java 字符和汉字比较_Java比较汉字字符串排序与C++比较汉字排序
  18. 浙江大学发布四足机器人“绝影”,爬坡踏雪稳定性令人惊艳
  19. 名编辑电子杂志大师教程 | 如何用名编辑制作一本精美的在线电子杂志?
  20. 关于AMS(艾迈斯)的VOC传感器iAQ-Core的使用笔记

热门文章

  1. 微信公众平台消息接口开发(8)小黄鸡(小贱鸡)机器人
  2. 人工智能与商业智能,区别、定位与联系
  3. 方差互换(Variance Swap)定价推导及VIX相关介绍
  4. 手披云雾开鸿蒙,描写泰山的诗句不是整首诗、注明作者
  5. 基于SpringBoot的报刊订阅管理系统
  6. 怎样才能成为一名有创造力的领导者?
  7. 重新回来,介绍一下Android Studio 如何继承腾讯云直播 以及 腾讯云通信
  8. 冰冻三尺,非一日之寒!
  9. u盘安装linux系统有什么弊端,使用U盘安装Linux系统的经验总结
  10. 计算器存储功能怎么用_数控车床加工刀具补偿功能怎么用?