我试图使用php找到图像的2D DCT(离散余弦变换)。我用下面的等式来找到它。
以下是我用来查找DCT的代码。
function getGray($img,$x,$y){
$col = imagecolorsforindex($img, imagecolorat($img,$x,$y));
return intval($col['red']*0.3 + $col['green']*0.59 + $col['blue']*0.11);
}
function initCoefficients() {
for ($i=1;$i<$this->size;$i++)
{
$c[$i]=1;
}
$c[0]=1/sqrt(2.0);
return $c;
}
function 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;
$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;
}
}
return $F;
}
图片尺寸为32*32
。我的问题是,一旦我调用applyDCT()
函数,它就会给出一个数组,其中所有元素值都为0.
例如: -
数组([0] =&gt;数组(...,3 =&gt; 0 [4] =&gt; 0 [5] =&gt; 0,...
我认为问题出在我的计算中。我做错了什么?请帮我 谢谢。
答案 0 :(得分:1)
以下是基于评论的答案:
$颜色不好。你是在1D中初始化它,但你在数学运算中称它为就像是一个2D数组。在你的数学运算中,用$ color [$ i * 32 + $ j]替换$ color [$ i] [$ j]它应该可以工作我猜...或者确保你的$ color数组按照你的预期形成