ww = (w\n+1)*n
hh = (h\n+1)*n
dim dct
(ww
, hh
) as dct_type
'forward DCT
sr = 0
sg = 0
sb = 0
if (x0
+ u
> w
- 1) then px
= x0
+ u
- n
else px
= x0
+ u
if (y0
+ v
> h
- 1) then py
= y0
+ v
- n
else py
= y0
+ v
c
= cos((2*u
+ 1)*x
*pi
/(2*n
)) * cos((2*v
+ 1)*y
*pi
/(2*n
))
sr = sr + r*c
sg = sg + g*c
sb = sb + b*c
dct(x0 + x, y0 + y).r = sr*cu*cv/(0.5*n)
dct(x0 + x, y0 + y).g = sg*cu*cv/(0.5*n)
dct(x0 + x, y0 + y).b = sb*cu*cv/(0.5*n)
'quantization
minr = 1000000
ming = 1000000
minb = 1000000
maxr = -1000000
maxg = -1000000
maxb = -1000000
if dct
(x
, y
).r
< minr
then minr
= dct
(x
, y
).r
if dct
(x
, y
).g
< ming
then ming
= dct
(x
, y
).g
if dct
(x
, y
).b
< minb
then minb
= dct
(x
, y
).b
if dct
(x
, y
).r
> maxr
then maxr
= dct
(x
, y
).r
if dct
(x
, y
).g
> maxg
then maxg
= dct
(x
, y
).g
if dct
(x
, y
).b
> maxb
then maxb
= dct
(x
, y
).b
r = q(x, y).r
g = q(x, y).g
b = q(x, y).b
q(x, y).r = 255*(dct(x,y).r - minr)/(maxr - minr)
q(x, y).g = 255*(dct(x,y).g - ming)/(maxg - ming)
q(x, y).b = 255*(dct(x,y).b - minb)/(maxb - minb)
r = q(x, y).r
g = q(x, y).g
b = q(x, y).b
r = q(x0 + x, y0 + y).r
g = q(x0 + x, y0 + y).g
b = q(x0 + x, y0 + y).b
r = q(x0 + x, y0 + y).r
g = q(x0 + x, y0 + y).g
b = q(x0 + x, y0 + y).b
'inverse DCT
sr = 0
sg = 0
sb = 0
c
= cos((2*x
+ 1)*u
*pi
/(2*n
))*cos((2*y
+ 1)*v
*pi
/(2*n
))
'sr = sr + dct(x + x3, y + y3).r*c*cu*cv
'sg = sg + dct(x + x3, y + y3).g*c*cu*cv
'sb = sb + dct(x + x3, y + y3).b*c*cu*cv
r = q(x0 + u, y0 + v).r
g = q(x0 + u, y0 + v).g
b = q(x0 + u, y0 + v).b
sr = sr + c*cu*cv*((r/255)*(maxr - minr) + minr)
sg = sg + c*cu*cv*((g/255)*(maxg - ming) + ming)
sb = sb + c*cu*cv*((b/255)*(maxb - minb) + minb)
sr = sr/(0.5*n)
sg = sg/(0.5*n)
sb = sb/(0.5*n)
'inverse DCT
sr = 0
sg = 0
sb = 0
c
= cos((2*x
+ 1)*u
*pi
/(2*n
))*cos((2*y
+ 1)*v
*pi
/(2*n
))
'sr = sr + dct(x + x3, y + y3).r*c*cu*cv
'sg = sg + dct(x + x3, y + y3).g*c*cu*cv
'sb = sb + dct(x + x3, y + y3).b*c*cu*cv
r = q(x0 + u, y0 + v).r
g = q(x0 + u, y0 + v).g
b = q(x0 + u, y0 + v).b
sr = sr + c*cu*cv*((r/255)*(maxr - minr) + minr)
sg = sg + c*cu*cv*((g/255)*(maxg - ming) + ming)
sb = sb + c*cu*cv*((b/255)*(maxb - minb) + minb)
sr = sr/(0.5*n)
sg = sg/(0.5*n)
sb = sb/(0.5*n)