错误消息:“在函数调用期间未分配输出参数(可能还有其他参数)”

时间:2017-02-03 13:08:41

标签: matlab image-processing

我有这个函数接受图像的行/列坐标并返回相邻像素变化的方向。

function [d] = p_directions(row, col, img)

if img(row, col+1) == 2
  if img(row, col) == 3
    d = 'A+'; 
  elseif img(row, col) == 1
    d = 'B+';    
  elseif img(row, col) == 2
    d = NaN;
  end
end

if img(row, col) == 2
   if img(row, col+1) == 3
    d = 'A-';
   elseif img(row, col+1) == 1
    d = 'B-';
   end
end
end

函数调用:

[row, col] = find_row_col(A); [d] = p_directions(row, col, img)

错误讯息:

Error in p_directions (line 15) if img(row, col + 1) == 2

Output argument "d" (and maybe others) not assigned during call to "p_directions".

我想要相信错误来自我的脚本的第一行('第15行'),在这种情况下变量'd'甚至不计算。我是编程新手,我不知道我的函数脚本的第一行究竟出了什么问题?请对此有任何帮助,建议或建议吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

这是错误说明一切的一种情况......

您需要为d指定默认值。通常,您会选择一个值,以便在返回时您知道出现了问题。因此,在函数调用之后,您可以考虑使用类似

的内容
d = -1

或者你可以添加else语句......

if  
   ...
else 
   d = -1

问题是,如果您指定的任一点的if值为2,您将只会进入img语句。如果它没有,则永远不会分配返回值。

答案 1 :(得分:1)

问题是,如果任何嵌套if条件为真,则函数p_directions将仅为d赋值。如果它们都不为真,则您尚未指定要返回的“默认”值。

您的两个条件分别以if img(row, col+1) == 2if img(row, col) == 2开头。如果它们都不是真的怎么办,因为img(row,col)img(row,col+1)都不是2?然后d将没有值,Matlab不知道返回什么。因此错误。