Given an image

`im` of size

*p*×

*q* with gcd(

*p*,

*q*)=1.

- Find a number
*s* that is not divided by the divisors of *N*=*pq*. - Index vector, method 1:
`idx = mod(1:s:N*s, N);``nil = find(idx==0); idx(nil)=N;`

- Index vector, method 2 (preferred):
`idx = mod((1:s:N*s)-1, N)+1;`

`imv(idx) = im(:);`

Reconstruction from vector of length

*N*=

*pq*:

`rim = reshape(imv(idx), p, q);`

Let’s try this with our zebra. In my previous tries I simply took *p*=479 and *q*=480 to have gcd(479,480)=1, but 479 is a prime number and I therefore have no possibility to divide it by some step size. For GA I have to lay some kind of lattice over the image. So there is actually a second condition forbidding *p* and *q* to be prime. I take *p*=473 instead, it has 11 and 43 as divisors.

> im=img(4:476,:);
> [p q]=size(im), N=p*q
p = 473
q = 480
N = 227040
> alldiv(N)(1:13)
ans =
2 3 4 5 6 8 10 11 12 15 16 20 22

As one can see, *N* has many divisors, but e.g. 19 is not one of them. We can’t take e.g. 9 although it doesn’t occur either, as it is divided by 3, which *is* a divisor of *N*. Taking such a wrong step size will lead one back to the first pixel too early and one can never span the whole image.

> s=9; idx=mod((1:s:N*s)-1, N)+1;
> find(idx==1)
ans =
1 75681 151361
> s=19; idx=mod((1:s:N*s)-1, N)+1;
> find(idx==1)
ans = 1
> find(idx==2)
ans = 23900
> imv(idx) = im(:);
> plot(imv)

And now the other way round:

> rim=reshape(imv(idx),p,q);
> size(rim)
ans =
473 480
> imagesc(rim)

Indeed looks like our zebra!

By the way, another try of comparing the FFT of the vector with the FFT2 of the image shows again that one *cannot* get the FFT2 by doing an FFT of the vector. This is because the line-patterns in the image might not be preserved under that transform, as neighboring pixels might not become neighbors in the resulting vector.

I still have some difficulties understanding sampling lattices in the 4D position-frequency space of images. Here’s a flow of thoughts on this: A 1D-signal of length N can be interpreted as an element of CN. (This was always confusing me: an N-dime

Weblog:Logbook of Stephan PauknerTracked:Apr 28, 10:57I always wondered why it didn’t work to compute the dual Gabor atom by using the image-to-vector methods I explained previously [1,2,3]. Dr. Kaiblinger showed me that the correct way was to use that special isomorphism that walks along the diagonal

Weblog:Logbook of Stephan PauknerTracked:May 18, 09:56