numpy/python (image) problem

Paulo da Silva p_d_a_s_i_l_v_a_ns at nonetnoaddress.pt
Wed Dec 9 13:21:13 EST 2020


Às 05:55 de 09/12/20, Paulo da Silva escreveu:
> 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?
> 
This was silly :-)
The first code splits the image in 8x8 squares.
The last one builds 8x8 squares from each line in sequence!

Forget this please.
Thanks.


More information about the Python-list mailing list