2015-11-05 57 views
0

我正在实施2D Arnold的N x M图像的猫咪地图。问题是我无法取回原始像素的值(即Arnold cat map反转不起作用)。任何自由职业者的任何解决方案都将被支付。我根据2D Arnold的cat map方程编写了VB 6.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 

这是阿诺德的猫地图逆代码:)

私人小组破译(因为你覆盖像素,而编码

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 

回答

0

的任务是不可能的。覆盖的信息被删除,无法重建。如果要更改编码代码对原始最终编码的图像不同的颜色阵列,

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 y 
+0

我这样做,但它不适合我。我仍然无法执行阿诺德猫图的逆方程。 – user3819984