有没有人有将输入函数定义为MATLAB中qtdecomp
函数的阈值标准的经验?我尝试了以下但是没有用:
MyFunc = @(A,threshold) std2(A)>threshold;
S = qtdecomp(Image,MyFunc,threshold);
不知何故,对于某些阈值,只有四叉树最左边的四分之一被分成新的部分。这可能是qtdecomp
代码本身的错误,还是我的函数输入有问题?
有关详细信息,请参阅附图。无论我选择什么门槛,我都会得到这个:
答案 0 :(得分:2)
问题是图像作为m x m x k
数组传递给您的匿名函数,表示分解为k
块的图像。该函数必须返回长度为k
的向量,但std2
仅查看第一个块并返回标量。我仍然试图想出一个矢量化的方法,但是现在这里是一个独立函数的简单循环:
function v = Std2Func(A, threshold)
s = size(A,3);
v = zeros(1,s);
for k = 1:s
v(k) = std2(A(:,:,k))>threshold;
end
end
迭代输入数组的k
平面,将std2
应用于每个2d平面并将结果放入输出向量。然后你只需使用新函数的句柄调用qtdecomp
:
S = qtdecomp(Image,@Std2Func,threshold);