我还没有完全理解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矩阵应该分解,但为什么不呢?
发布于 2012-09-16 22:36:43
matlab在这里做的是,当I为uint8时,它将阈值乘以255,并对其进行舍入,因此1.9/255的值为2。
您可以通过打开qtdecomp (按ctrl+D)或here的源代码来查看这一点。在文件末尾有一个if/elseif if (params{1} = round(255 * params{1});)。
你应该能够使用S = qtdecomp(I,1/255);来得到你想要的结果。
https://stackoverflow.com/questions/12015485
复制相似问题