我还没有完全理解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矩阵应该分解,但为什么不分解?
答案 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);
来获取您要查找的结果。