谁知道hilbert置乱算法

newstudys 2005-01-24 04:04:27
有水知道hilbert置乱算法,怎么实现把一维数组进行置乱
...全文
277 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
I_Love_CPP 2005-01-24
  • 打赏
  • 举报
回复
第二章 基于Hilbert曲线的数字图像置乱技术

2.1 关于Hilbert曲线
约定:(1)为了便于在 语言中使用指针,我们统一将图像矩阵(即二维数组)转化为一维数组来处理。即图像中的象素 用数组元素 来代替。
(2)假设Hilbert曲线遍历矩阵统一按顺时针方向进行。
为了寻求Hilbert曲线遍历的规律,我们首先来看一个最简单的情况,即矩阵只有四个元素的情况。

图1 2阶Hilbert曲线遍历图
阶Hilbert曲线如图1(b)所示,若原图像中像素的排列顺序为1、2、3、4,遍历是从左下角开始直至右下角结束,其遍历顺序依次为3、1、2、4。同理, 阶和 阶的Hilbert曲线及其遍历结果如下所示。

图2 4阶Hilbert曲线遍历图
由上图中 阶Hilbert曲线,我们可以得到遍历顺序为:
13 14 10 9
5 1 2 6
7 3 4 8
12 11 15 16
而且此顺序可以构成一个与原图同样大小的矩阵。
阶的Hilbert曲线及其遍历结果如图3所示。同样,它的遍历结果也构成了一个 的矩阵。

图3 8阶Hilbert曲线遍历图
其遍历的结果可由下面的矩阵来表示:
57 49 50 58 59 60 52 51
43 44 36 35 34 42 41 33
25 26 18 17 9 1 2 10
11 3 4 12 20 19 27 28
29 30 22 21 13 5 6 14
15 7 8 16 24 23 31 32
40 48 47 39 38 37 45 46
54 53 61 62 63 55 56 64
我们仔细分析一下Hilbert曲线遍历的情况,可以发现以下规律:对于 的(即 阶的)Hilbert曲线遍历,它可分为 个 (即 阶的)的Hilbert曲线遍历;而每个 的Hilbert曲线遍历又分为 个 (即 阶)的Hilbert曲线遍历。我们不妨把四个低阶的Hilbert曲线遍历矩阵命名为:H1,H2,H3,H4。

(H) 阶的Hilbert曲线 (a)H1 (b)H2 (c)H3 (d)H4
图4 Hilbert曲线遍历的各种情况

(1) 同一阶的 个小的Hilbert曲线遍历其形状完全相同,只是摆放方向略有改动:位于左上角H2和右上角H3的两个完全相同且与高阶的遍历方向相同;左下角H1是把H2或H3沿副对角线转置而成的;右下角H4是把H2或H3沿对角线转置而成的。图4中以 阶的Hilbert曲线为例作了说明。
(2) 矩阵的Hilbert曲线遍历是最基础的,即是最底层的。任何一阶的Hilbert曲线遍历均要归结到 、 、 、 这个顺序上来。下图便是构成任意n阶Hilbert曲线的基本元素,整个曲线是由n/4个这样的基本元素构成的。

图5 最基本的Hilbert曲线遍历

因此,可以推导出Hilbert曲线遍历的一般规律如下:
对于任意一个 阶图像( )的Hilbert曲线遍历,总能将它分成 个 阶的“小” Hilbert曲线遍历,而且每个 阶的“小” Hilbert曲线遍历又可继续细分为 个 阶的“更小” Hilbert曲线遍历,如此继续直至 ,而 阶的Hilbert曲线遍历是最基本的,可直接实现。对于左下角的H1,先沿副对角线转置再进行 阶的“小” Hilbert曲线遍历;对于左上角的H2和右上角的H3则直接进行 阶的“小” Hilbert曲线遍历;对于右下角的H4,先沿对角线转置再进行 阶的“小” Hilbert曲线遍历。

2.2 基于Hilbert曲线的数字图像位置置乱
现在我们要讨论的是如何利用Hilbert曲线对图像进行置乱。首先我们知道图像是一个个象素点构成,每个象素点有一确定的灰度值大小,而这些灰度值构成了一个 的矩阵 。
于是我们先将图像的象素矩阵分成四个大的小块进行Hilbert曲线置乱,再将这四个小块分成更小的四个小块进行Hilbert曲线置乱,一直这样做下去,直到每个小块都是 的象素块,并对其进行Hilbert曲线置乱,即是说按照Hilbert曲线的遍历顺序,将图像矩阵 中对应位置的灰度值依次存入矩阵 中,最后得到的新的图像象素矩阵 即是经过Hilbert曲线遍历后的图像矩阵,从外观上看图像已完全失去了原有特征,达到了我们对秘密图像进行置乱的目的。实践证明,利用Hilbert曲线对图像进行置乱,图像隐蔽性强,只需很少的变换次数图像就面目全非。图6即是利用Hilbert曲线进行图像置乱的效果图,从图中我们可以看到只需对图像进行一次Hilbert曲线遍历,图像就已经杂乱无章了,失去了原有的面目。经过五次Hilbert曲线遍历后图像就变得密密麻麻,完全不再具有原来图像的特征了。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧