我正在尝试使用php找到图像的2D DCT(离散余弦变换)。 我使用下面的等式来找到它。
p>
p>
p>
以下是我用来查找DCT的代码。 p >
function getGray($ img,$ x,$ y){
$ col = imagecolorsforindex($ img,imagecolorat($ img,$ x,$ y));
返回 intval($ col ['red'] * 0.3 + $ col ['green'] * 0.59 + $ col ['blue'] * 0.11);
}
函数initCoefficients(){
for($ i = 1; $ i< $ this-> size; $ i ++)
{
$ c [$ i] = 1;
}
$ c [0] = 1 / sqrt(2.0);
return $ c;
}
函数applyDCT($ imagePath){
$ img = $ this-> readImageTo($ imagePath,32,32);
$ color = array();
for ($ i = 0; $ i< 32; $ i ++)
{
for($ j = 0; $ j< 32; $ j ++)
{
$ color [] = $ this-> getGray ($ img,$ i,$ j);
}
}
$ N = 32;
$ n c = $ this-> initCoefficients();
$ sum = 0;
for($ u = 0; $ u< $ N; $ u ++){
for($ v = 0; $ v< $ N; $ v ++){
for($ i = 0; $ i< $ N; $ i ++){
for($ j = 0; $ j< $ N; $ j ++){
$ sum + = ($ C [$ i]于* $ C [$ J])* COS(((2 * $ I + 1)* $ U * PI()/(2.0 * $ N)))* COS(((2 * $ j + 1)* $ v * pi()/(2.0 * $ N)))*($ color [$ i] [$ j]);
}
}
$ sum * = sqrt (2 / $ N)* sqrt(2 / $ N);
$ F [$ u] [$ v] = $ sum;
}
}
返回$ F;
}
代码> pre>
图像大小为 32 * 32 code>。 我的问题是,一旦我调用 applyDCT() code>函数,它就会给出一个数组,其中所有元素值都为0. p>
例如: - p>
数组([0] =>数组(..., 3 => 0 [4] => 0 [5] => 0,... p>
blockquote>
我认为 问题出在我的计算中。我做错了什么?请帮帮我
谢谢。 p>
div>