1

当我在 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';

如何解决?

4

2 回答 2

1

当 comp 包含多个具有最大值的元素时,find() 返回一个向量。

看到这个:

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

所以使用 max 函数而不是 find或仅使用第一个匹配项。

于 2013-08-04T18:28:08.277 回答
0

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

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

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 
于 2013-08-04T18:30:21.460 回答