(matlab)qtdecomp与uint8矩阵一起工作?
我还没有完全理解(matlab)qtdecomp与uint8矩阵一起工作?,matlab,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
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矩阵应该分解,但为什么不分解呢?matlab在这里做的是当
I
为uint8时,它将阈值乘以255并取整,因此1.9/255计算为2
通过打开qtdecomp
(按ctrl+D)或的源代码,可以看到这一点。文件末尾附近有一个if/elseif(params{1}=round(255*params{1});
)
您应该能够使用S=qtdecom(I,1/255)
以获取您要查找的结果