使用blockproc实现两个输出

3
我有一个函数,它计算由阈值化8个相邻像素与中心像素形成的3*3块的二进制模式的值,并返回两个输出:二进制代码的十进制值,如果它是均匀的,则返回相同的十进制值,否则返回59。
function [out1,out2] = lbpblock(im)
%... implementation details
out1 = decimal ;
out2 = uniform;
end

问题在于试图像这样使用blockproc函数。
result = blockproc(im,[3 3],@lbpblock);

结果数组仅有两个维度(例如,85 * 85),并且只有第一个输出。

当我尝试时

[res1 res2] = blockproc(im,[3 3],@lbpblock); 

我遇到了“使用==>blockproc时出错,输出参数过多”的问题。
我试图更改函数签名。

function out = lbpblock(im)
%... implementation details
out = [decimal, uniform];
end

结果数组再次为两个维度,但是现在大小为(85*170),第一项输出存储在奇数列中,第二项在偶数列中。
有没有什么技巧可以让blockproc将结果存储在一个85*85*2的数组中?


lbpblock 中只返回一个参数,命名为 out。将其设置为结构体或者单元数组,使得 out.first=out1out.second=out2 - Autonomous
很遗憾 :
使用 blockprocInMemory 时出错,错误代码为80 输出类无效。用户函数 FUN 返回了无效结果。 结果的类是 cell。 结果的类是 struct。
- Hassan Ajk
我不理解这个错误。你是否在 out1 = decimal; out2 = uniform; 后面写了 out.first=out1; out.second=out2。只返回 out。在主文件中,写入:result = blockproc(im,[3 3],@lbpblock); - Autonomous
实际上我按照你说的做了,但是似乎blocproc不接受结构体,因为在描述中写着“返回矩阵、向量或标量的函数”。 我还尝试了 $out = {decimal udecimal}; 也得到了结果的类是cell。 - Hassan Ajk
1个回答

1
你可以通过在第三维上进行连接来实现NxNx2数组作为输出。
例如:
im = magic(10);
r = blockproc(im, [3, 3], @func);

function r = func(im)
r1 = mean(im.data(:));
r2 = std(im.data(:));
r = cat(3, r1, r2);
end

重要的一行是 cat(3, output1, output2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接