我在Matlab中有一些函数,它们接受两个参数,一个图像和一个内核,并在上面执行各种图像处理应用程序。签名是Gen_Filt(内核,img(,用于各种过滤操作。我正在尝试创建第二个函数,该函数使用特定的内核关闭filterings操作,这样它就可以对图像执行特定的操作。
function [closure] =Close_Over(General,kernel)
function[out_img]=inner(img)
out_img=General(kernel,img);
end
closure=@inner;
end
因此,这将采用特定类型的过滤操作(Gen_Filt签名(和特定内核,并返回一个函数处理程序,其中内核绑定到该特定过滤操作。然而,它似乎调用了过滤操作函数,并给出了以下错误:
Gen_Filt错误(第61行(
out_img=conv2(img,内核,"我"(;
这让我觉得在我可以用特定的图像参数调用处理程序之前,它正在尝试评估筛选操作Gen_Filt。
我是否正确理解问题和/或我是否犯了错误?
正如其他人所提到的,您提供的代码存在问题。但是,为了回答文章的标题,以下是如何创建闭包,使用嵌套函数在MATLAB中捕获变量。
function fun = createPlusOneFunc
x = 0; % x is captured
fun = @inner
function out = inner(y)
x = x+y;
out = x;
end
end
>> fun = createPlusOneFunc();
>> out = fun(1) % Increments captured variable state by 1.
>> out = fun(2) % Increments captured variable state by 2.