Matlab 带blockproc的两个输出
Matlab 带blockproc的两个输出,matlab,Matlab,我有一个函数,它计算一个3*3块的二进制模式的值,这个值是用中心像素对8个相邻像素进行阈值化的结果,并返回两个输出:二进制代码的十进制值,如果一致,则返回相同的十进制值,如果不一致,则返回59 function [out1,out2] = lbpblock(im) %... implementation details out1 = decimal ; out2 = uniform; end 问题是当试图像这样使用blockproc时 result = blockproc(im,[3 3],@
我有一个函数,它计算一个3*3块的二进制模式的值,这个值是用中心像素对8个相邻像素进行阈值化的结果,并返回两个输出:二进制代码的十进制值,如果一致,则返回相同的十进制值,如果不一致,则返回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数组中???您可以通过在第三维中串联来实现NX2数组作为输出 例如:
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)
在lbpblock
中只返回一个参数,比如out
。使其成为一个结构或单元数组,以便:out.first=out1
和out.second=out2
。不幸的是:\Error在80无效输出类中使用==>blockprocInMemory。用户函数FUN返回了无效结果。结果的类别是cell。结果的类是struct。我不理解错误。你这样做了吗:在out1=decimal之后;out2=均匀代码>,写入输出。第一个=输出1;out.second=out2
。仅返回out
。在主文件中写入:result=blockproc(im,[3],@lbpblock)代码>事实上,我完全按照你说的做了,但是blocproc似乎不接受struct,因为它写在描述“一个返回矩阵、向量或标量的函数”中。我还尝试了$out={decimal udecimal};还得到了类的结果是cell。