numpy/python (image) problem

Paulo da Silva p_d_a_s_i_l_v_a_ns at nonetnoaddress.pt
Wed Dec 9 00:55:29 EST 2020


Hi!

I am looking at some code, that I found somewhere in the internet, to
compute DCT for each 8x8 block in an gray (2D) image (512x512).

This is the code:

def dct2(a):
    return
scipy.fft.dct(scipy.fft.dct(a,axis=0,norm='ortho'),axis=1,norm='ortho')

imsize=im.shape
dct=np.zeros(imsize)

# Do 8x8 DCT on image (in-place)
for i in r_[:imsize[0]:8]: # Seems the same as "for i in
np.arange(0,imsize[0],8)"!
    for j in r_[:imsize[1]:8]:
        dct[i:(i+8),j:(j+8)]=dct2(im[i:(i+8),j:(j+8)])

I tried to do the same thing with:

imsize=im.shape
im8=im.reshape(imsize[0]*imsize[1]//8//8,8,8)
dct_test=np.asarray([dct2(im8x) for im8x in im8])
dct_test=dct_test.reshape(imsize)

so that dct_test should be equal to (previous) dct.
But they are completely different.

What am I doing wrong?

Thanks a lot.


More information about the Python-list mailing list