(matlab)qtdecomp与uint8矩阵一起使用?

时间:2012-08-18 03:03:10

标签: matlab

我还没有完全理解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矩阵应该分解,但为什么不分解?

1 个答案:

答案 0 :(得分:0)

matlab在这里做的是当I为uint8时它将阈值乘以255并对其进行舍入,因此1.9 / 255被评估为2。

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

您应该可以使用S = qtdecomp(I,1/255);来获取您要查找的结果。