Given
obj::CircularArray{Bool,2,BitMatrix}
that has undergone a combination of linear transformations
circshift(A::AbstractMatrix, shifts::NTuple{2,<:Integer})
rotl90(A::AbstractMatrix, k::Integer)
reverse(A::AbstractMatrix; dims::Integer)
permutedims(m::AbstractMatrix)
how can I recover the inverse of linear transformations?
For example,
a = [3, 4, 21, 22, 25, 26, 28, 29, 30, 45, 46, 47, 49, 53, 54, 71, 72, 75, 78, 97, 101, 102, 123, 124, 125, 126, 149, 150, 175, 550, 551, 574, 575, 576, 577, 598, 599, 600, 603, 622]
b = [11, 17, 37, 38, 39, 40, 41, 63, 64, 65, 89, 464, 488, 489, 490, 512, 513, 514, 515, 516, 536, 542, 560, 561, 564, 567, 568, 584, 585, 586, 588, 590, 592, 593, 594, 610, 611, 614, 617, 618]
A = reshape((1:25^2) .β Ref(a), 25, 25)
B = reshape((1:25^2) .β Ref(b), 25, 25)
Here is A
and B
Through inspecting the images I was able to find that A
can be obtained from B
through
findall(A) == findall(circshift(B, (11, 3)))
However, I am still missing the mathematical foundation to implement the following:
function magic(A::AbstractMatrix{<:Boo},
B::AbstractMatrix{<:Boo})
# Finds R β B * R == A
end
trans = qd_rigid(A, B, (25, 25), 3Ο/2)[1]
Gives the AffineMap
I can use to recover the image!