首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Arnold的猫贴图进行图像混洗

使用Arnold的猫贴图进行图像混洗
EN

Stack Overflow用户
提问于 2015-11-05 23:46:21
回答 1查看 616关注 0票数 0

我正在努力实现2D Arnold的N x M图像的猫地图。问题是我不能得到原始像素的值(例如,Arnold cat map逆不起作用)。任何解决方案从任何自由职业者将支付。我写的VB6.0代码根据二维阿诺德的猫地图方程的洗牌和逆。

代码语言:javascript
复制
Private Sub Cipher()
 Dim Hm As Integer, i As Integer, x As Integer
 Dim Wm As Integer, j As Integer, y As Integer
Wm = Wid - 1: Hm = Hgt - 1
    pic1.ScaleMode = vbPixels
    pic1.ScaleWidth = Wid
    pic1.ScaleHeight = Hgt

Dim pp As Double, qq As Double
Dim nn As Integer, k As Integer
Dim xnn As Double, ynn As Double

pp = 2: qq = 5
nn = 1

For k = 1 To nn
For y = 0 To Hm
For x = 0 To Wm

 '''''''''''' arnold cat map''''''''''''''''''
xnn = x + pp * y
ynn = qq * x + (pp * qq + 1) * y

 xnn = xnn Mod Wm
 ynn = ynn Mod Hm

 Red(xnn, ynn) = Red(x, y)
 Grn(xnn, ynn) = Grn(x, y)
 Blu(xnn, ynn) = Blu(x, y)
    Next x: Next y
'''''''''''' end of shfulling
For y = 0 To Hm: For x = 0 To Wm
pic1.PSet (x, y), RGB(Red(x, y), Grn(x, y), Blu(x, y))
Next x: Next y
pic1.Refresh
Next k
End Sub

这是Arnold cat map的逆向代码:

私有子DeCipher()

代码语言:javascript
复制
 Dim Hm As Integer, i As Integer, x As Integer
 Dim Wm As Integer, j As Integer, y As Integer
Wm = Wid - 1: Hm = Hgt - 1

pic2.ScaleWidth = Wid
pic2.ScaleHeight = Hgt


Dim pp As Double, qq As Double
Dim nn As Integer, k As Integer
Dim xnn As Double, ynn As Double


pp = 2: qq = 5
nn = 1

For k = 1 To nn 'no. of iterations

For y = 0 To Hm
For x = 0 To Wm

 '''''''''''' Inverse of Arnold Cat map''''''''''''''''''
 xnn = Abs((x * ((pp * qq) + 1)) + (-pp * y))
 ynn = Abs((-qq * x) + y)

 xnn = xnn Mod Wm
 ynn = ynn Mod Hm
 '''''''''''''''''''''''''''''''''''''''''''''
Red(xnn, ynn) = Red(x, y)
 Grn(xnn, ynn) = Grn(x, y)
 Blu(xnn, ynn) = Blu(x, y)
    Next x: Next y
'''''''''''' end of shuffling
Next k

For y = 0 To Hm: For x = 0 To Wm
pic2.PSet (x, y), RGB(Red(x, y), Grn(x, y), Blu(x, y))

Next x: Next y
End Sub
EN

回答 1

Stack Overflow用户

发布于 2015-11-05 23:59:04

这项任务是不可能的,因为您在编码时覆盖了像素。被重写的信息被擦除并且不能被重建。如果您要更改编码代码以使原始末端编码图像具有不同的颜色阵列,

代码语言:javascript
复制
CodeRed(xnn, ynn) = OrigRed(x, y)
CodeGrn(xnn, ynn) = OrigGrn(x, y)
CodeBlu(xnn, ynn) = OrigBlu(x, y)

然后,您可以使用与前向循环中相同的索引计算,只需向后复制,

代码语言:javascript
复制
For k = 1 To nn
For y = 0 To Hm
For x = 0 To Wm

   '''''''''''' arnold cat map''''''''''''''''''
  xnn = x + pp * y
  ynn = qq * x + (pp * qq + 1) * y

  xnn = xnn Mod Wm
  ynn = ynn Mod Hm

  OrigRed(x, y) = CodeRed(xnn, ynn)
  OrigGrn(x, y) = CodeGrn(xnn, ynn)
  OrigBlu(x, y) = CodeBlu(xnn, ynn)

Next x: Next y
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33548935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档