matlab find edge Undefined function 'power' for input arguments of type 'cell'

matlab find edge Undefined function 'power' for input arguments of type 'cell'

我的源代码:

function void = find_edge()
path_io = 'io_find_edge\';
format = '.jpg';
list_img = ['Parent_006.jpg'; 'Parent_007.jpg'; 'Parent_008.jpg'; 'Parent_009.jpg'; 'Parent_010.jpg'];
list_filter = {'sobel', 'canny', 'prewitt', 'roberts', 'log'};

for index = 1:size(list_img)
    img_name = list_img(index, 1:10);
    img = rgb2gray(imread([path_io img_name format]));
    for filter = list_filter
        imwrite(edge(img, filter), [img_name '_' filter format], 'jpeg');
    end
end

错误: 'cell'.

类型的输入参数的未定义函数 'power'

边缘错误(第 420 行) 截止 = (thresh).^2;

find_edge 中的错误(第 15 行) x = 边缘 (img, 过滤器);

谢谢!

在内层 for 循环中,filter 将是一个只有一个条目包含当前过滤器名称的单元格。它仍然是一个元胞数组,所以 edge 函数 returns 是一个错误。您可以使用 filter{:} 访问 filter 的内容,即具有当前过滤器名称的字符串。

我想你在构造文件名时也有错误。我假设您想使用 filter 而不是 list_filter 来创建文件名,对吗?

因此:

imwrite(edge(img, filter{:}), [img_name '_' filter{:} format], 'jpeg');

PS:正如@thewaywewalk 在评论中所说,filter 是一个函数的名称。不建议将其用作变量名,因为那样 filter 函数将不再起作用。我建议将其重命名为例如current_filter.