如何解决“操作数...必须可转换为逻辑标量值”MATLAB错误信息?

时间:2013-08-04 18:07:14

标签: matlab image-processing syntax-error

我在MATLAB中运行代码时总是收到此错误消息。我想做模板匹配来识别一个角色。

  ??? Operands to the || and && operators must be convertible to logical scalar values.

  Error in ==> readLetter at 17
  if vd==1 || vd==2

我的代码是

  load NewTemplates % Loads the templates of characters in the memory.
  gambar = imresize(gambar,[42 24]); % Resize the input image 
  comp = [];
  for n = 1 : length(NewTemplates)
      sem = corr2(NewTemplates{1,n}, gambar); % Correlation with every image in the template for best matching.
      comp = [comp sem]; % Record the value of correlation for each template's character.
  end

  vd = find(comp == max(comp)); % Find index of highest matched character.

  % According to the index assign to 'letter'.
  if vd==1 || vd==2
      letter='A';

如何解决?

2 个答案:

答案 0 :(得分:1)

当comp包含多个具有最大值的元素时,

find()返回一个向量。

见:

a = [1:5 5];
index = find(a==max(a)); % index =  5  6
numel(index) % ans = 2

因此,使用max函数代替find 或仅使用第一个匹配。

答案 1 :(得分:0)

您可能在vd中返回了非标量值(即,相同最大值的许多位置)。因此,在if语句中按元素方式比较向量会产生错误。

如果您想要多个最大值行为(除非您想检查1 s的向量,否则它没有多大意义)您可以使用|运算符

r = randi(2,10,1);
vd = find(r==max(r));

if vd==1 | vd==2
    letter='A';
end

如果没有,请尝试从vd(即第一个实例vd(1)或下面的随机实例)中选择一个值,然后使用if语句检查其值:

vd = vd(randi(length(vd))); % random index from returned in vd
if vd==1 || vd==2
     letter='A';
end