我正在努力实现2D Arnold的N x M图像的猫地图。问题是我不能得到原始像素的值(例如,Arnold cat map逆不起作用)。任何解决方案从任何自由职业者将支付。我写的VB6.0代码根据二维阿诺德的猫地图方程的洗牌和逆。
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()
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发布于 2015-11-05 23:59:04
这项任务是不可能的,因为您在编码时覆盖了像素。被重写的信息被擦除并且不能被重建。如果您要更改编码代码以使原始末端编码图像具有不同的颜色阵列,
CodeRed(xnn, ynn) = OrigRed(x, y)
CodeGrn(xnn, ynn) = OrigGrn(x, y)
CodeBlu(xnn, ynn) = OrigBlu(x, y)然后,您可以使用与前向循环中相同的索引计算,只需向后复制,
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 yhttps://stackoverflow.com/questions/33548935
复制相似问题