使用BlockProc获取许多输出
7次观看(最近30天)
显示较旧的评论
我想使用“ blockProc”对每个4*4个块应用SVD,并获得3个输出:u,s和v,以便我可以再次将所有块重新合在一起,但是MATLAB让我“太多的uput grim gruments”。我怎么解决这个问题?
fun = @(block_struct)svd(block_struct.data);
[U S V] = BlockProc(A,[4 4],Fun)
这是我的错误:
错误使用BlockProc
也许多输出参数。
0评论
接受的答案
沃尔特·罗伯森(Walter Roberson)
2015年7月18日
不,对于BlockProc(),这是不可能的。
您可以使用类似的东西
功能r = blocksvd(block_struct)
[u,s,v] = svd(block_struct.data);
spad = nan(size(u));
vpad = spad;
spad(1:size(s,1),1:size(s,2))= s;
vpad(1:size(u,1),1:size(u,2))= u;
r = [u;spad;vpad];
结尾
这返回一个12 x 4的数组,可以再次分解为u,s,v。
更多答案(2)
布雷特·肖尔森(Brett Shoelson)
2017年8月15日
编辑:沃尔特·罗伯森(Walter Roberson)
2017年8月15日
Walter是正确的,BlockProc返回单个输出。但是,为了清楚起见,值得指出的是,您可以对BlockProc进行单独的呼叫,要求Args 1-n。使用单行函数句柄很难做到,但是如果您为要生成的每个输出创建一个单输出功能,请简单,并将其顺序称呼为图像。(不是理想的,但也许有帮助。)
例如,如果要计算边缘(IMG,'log')函数的阈值:
[〜,threshout] = edge(img,'日志');
您可以创建一个称为称为“计算”语法的函数,例如:
功能阈值=计算gethresh(img)
[〜,阈值] = edge(img,'日志');
然后(在伪代码中):
localedgefcn = @(x)edge(x.data,'日志');
threshfcn = @(x)计算edgethresh(x.data);
localEdge = blockProc(img,localedgefcn);%这个是单线,通过函数手柄
localthresh = blockProc(img,threshfcn);%这个需要单独的计算函数
干杯,
布雷特
3条评论
埃里克·查德威克(Eric Chadwick)
2018年3月21日
您好,谢谢你们俩如此迅速的回应!我的功能确实具有输出,当我向您展示我的功能时,我只是没有显示它们。但是,当我现在复制并粘贴它时,我意识到我并没有告诉它输出图像正常输出。将图像添加为输出已解决了问题。
谢谢你们俩!
干杯,
埃里克