1

我还没有完全理解如何qtdecomp工作......

I = [1    1    1    1    2    3    6    6
     1    1    2    1    4    5    6    8
     1    1    1    1   10   15    7    7
     1    1    1    1   20   25    7    7
    20   22   20   22    1    2    3    4
    20   22   22   20    5    6    7    8
    20   22   20   20    9   10   11   12
    22   22   20   20   13   14   15   16];

S = qtdecomp(I,2);
disp(full(S));

结果是:

   4     0     0     0     1     1     2     0
   0     0     0     0     1     1     0     0
   0     0     0     0     1     1     2     0
   0     0     0     0     1     1     0     0
   4     0     0     0     1     1     1     1
   0     0     0     0     1     1     1     1
   0     0     0     0     1     1     1     1
   0     0     0     0     1     1     1     1

在左下角的4*4矩阵中,块元素的最大值(22)减去最小值(20)是2,所以在分解这部分时,它会保持原样。

当我在uint8矩阵上执行此操作时:

I = uint8([...
     1    1    1    1    2    3    6    6
     1    1    2    1    4    5    6    8
     1    1    1    1   10   15    7    7
     1    1    1    1   20   25    7    7
    20   22   20   22    1    2    3    4
    20   22   22   20    5    6    7    8
    20   22   20   20    9   10   11   12
    22   22   20   20   13   14   15   16]);

S = qtdecomp(I,2/255);
disp(full(S));

答案和以前一样。但是当我改变S这个:

S = qtdecomp(I,1.9/255);

答案是

 4     0     0     0     1     1     2     0
 0     0     0     0     1     1     0     0
 0     0     0     0     1     1     2     0
 0     0     0     0     1     1     0     0
 4     0     0     0     1     1     1     1
 0     0     0     0     1     1     1     1
 0     0     0     0     1     1     1     1
 0     0     0     0     1     1     1     1

我想左下角的 4*4 矩阵应该分解,但为什么不分解呢?

4

1 回答 1

0

matlab 在这里所做的I是 uint8 何时将阈值乘以 255 并将其四舍五入,因此 1.9/255 被评估为 2。

您可以通过打开源代码qtdecomp(按 ctrl+D)或此处查看。文件末尾附近有一个 if/elseif ( params{1} = round(255 * params{1});)。

您应该能够使用S = qtdecomp(I,1/255);来获得您正在寻找的结果。

于 2012-09-16T14:36:42.723 回答