发明名称 一种基于3D DFS迷宫的数字置乱方法
摘要 本发明提供一种基于3D DFS迷宫的数字置乱方法,预先对DFS迷宫生成区域进行人为限定,从而可用于人为指定的任意3D封闭连通区域,同时按迷宫节点更新顺序对迷宫设定区域的每个节点赋予唯一的编号,由此产生迷宫设定区域所有节点的排列,在此基础上构造了基于3D DFS迷宫节点更新序列和节点更新序列复合的置乱方法,从而可将所有节点置乱。本发明所给出的置乱方法具有普适性和灵活性,在使用过程中不存在任何限制,不仅能应用于传统置乱方法所针对的规则区域,例如正方形和矩形区域,也可用于任意选定的3D封闭连通不规则区域置乱。本发明也给出了用于图像位面立方体,RGB立方体和RGB通道立方体的图像置乱方法。
申请公布号 CN104463769A 申请公布日期 2015.03.25
申请号 CN201410749012.4 申请日期 2014.12.08
申请人 陕西师范大学 发明人 邵利平;欧阳显斌;杨璐
分类号 G06T1/00(2006.01)I 主分类号 G06T1/00(2006.01)I
代理机构 西安通大专利代理有限责任公司 61200 代理人 陆万寿
主权项 一种基于3D DFS迷宫的数字置乱方法,其特征在于包括以下步骤:第1步:设定迷宫初始范围S<sub>init</sub>=()<sub>m×n×l</sub>和迷宫有效区域S<sub>maze</sub>=(s<sub>i,j,k</sub>)<sub>m×n×l</sub>,对于<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mrow><mo>&ForAll;</mo><mi>s</mi></mrow><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>,</mo><mi>i</mi><mo>=</mo><mn>0</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>m</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>j</mi><mo>=</mo><mn>0</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>k</mi><mo>=</mo><mn>0</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>l</mi><mo>-</mo><mn>1</mn><mo>,</mo></mrow>]]></math><img file="FDA0000627801790000014.GIF" wi="1098" he="90" /></maths>若<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>s</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>&NotElement;</mo><msub><mi>S</mi><mi>maze</mi></msub><mo>,</mo></mrow>]]></math><img file="FDA0000627801790000015.GIF" wi="285" he="86" /></maths>则标记s<sub>i,j,k</sub>=‑1,反之则标记S<sub>i,j,k</sub>=0表示该节点未访问,若s<sub>i,j,k</sub>>0表示该节点已访问;第2步:对于<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mrow><mo>&ForAll;</mo><mi>s</mi></mrow><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>&Element;</mo><msub><mi>S</mi><mi>maze</mi></msub><mo>,</mo><mi>i</mi><mo>=</mo><mn>0</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>m</mi><mo>-</mo><mn>1</mn><mi>j</mi><mo>=</mo><mn>0</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>k</mi><mo>=</mo><mn>0</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mi>l</mi><mo>-</mo><mn>1</mn><mo>,</mo></mrow>]]></math><img file="FDA0000627801790000013.GIF" wi="1270" he="99" /></maths>记s<sub>i,j,k</sub>.d,d=0,1,2,3,4,5依次为节点s<sub>i,j,k</sub>的下方、右方、上方、左方、底部和顶部墙,初始化s<sub>i,j,k</sub>.d=‑1,d=0,1,2,3,4,5,即将S<sub>maze</sub>范围内的所有节点以墙进行分隔,s<sub>i,j,k</sub>.d=‑1表示有墙,s<sub>i,j,k</sub>.d=0表示无墙;第3步:选择随机数发生器y=RG(x),设定随机数发生器初始值RG.init=seed,初始化堆栈Stack=Φ,置节点更新序列A<sub>update</sub>=Φ;第4步:随机选取<img file="FDA0000627801790000011.GIF" wi="748" he="85" />标记s<sub>x,y,z</sub>=1,将S<sub>x,y,z</sub>的(x,y,z)加入节点更新序列A<sub>update</sub>=A<sub>update</sub>.add((x,y,z));第5步:若s<sub>x,y,z</sub>的周围相邻节点s<sub>x+1,y,z</sub>,s<sub>x,y+1,z</sub>,s<sub>x‑1,y,z</sub>,s<sub>x,y‑1,z</sub>,s<sub>x,y,z‑1</sub>,s<sub>x,y,z+1</sub>存在S<sub>maze</sub>范围内未访问的节点,则随机选择1个未访问的节点,记为s<sub>x′,y′,z′</sub>,将s<sub>x,y,z</sub>和s<sub>x′,y′,z′</sub>之间的分割墙标记为0,将s<sub>x,y,z</sub>入栈push(Stack,s<sub>x,y,z</sub>),更新x=x′,y=y′,z=z′,标记s<sub>x,y,z</sub>=1,将(x,y,z)加入节点更新序列A<sub>update</sub>=A<sub>update</sub>.add((x,y,z));第6步:若s<sub>x,y,z</sub>的周围相邻节点s<sub>x+1,y,z</sub>,s<sub>x,y+1,z</sub>,s<sub>x‑1,y,z</sub>,s<sub>x,y‑1,z</sub>,s<sub>x,y,z‑1</sub>,s<sub>x,y,z+1</sub>不存在S<sub>maze</sub>范围内未访问的节点,则将栈顶元素出栈作为当前节点,即s<sub>x,y,z</sub>=pop(Stack);第7步:反复执行第5~6步,直至Stack=Φ;第8步:利用A<sub>update</sub>构造S<sub>maze</sub>=(s<sub>i,j,k</sub>)<sub>m×n×l</sub>范围内所有节点间的映射关系,从而将S<sub>maze</sub>=(s<sub>i,j,k</sub>)<sub>m×n×l</sub>范围内所有节点置乱。
地址 710062 陕西省西安市长安区陕西师范大学