2012-02-07 15 views
7

Después de ejecutar el código en matlab, encuentro este error y no sé cómo resolverlo. Como puedó resolver esté problema.Cómo resolver && operandos a escalar lógico

Advertencia:

Operandos a la || y & & operadores deben ser convertibles en valores escalares lógicos.

Jgray = double(rgb2gray(J)); 
    % Calculate the Gradients 
    [dIx, dIy] = gradient(Jgray); 
    if max(dIx)<=103 && max(dIy)<=100 
     B = abs(dIy) - abs(dIx); 
    else 
     B = abs(dIx) - abs(dIy); 
    end 

Respuesta

7

Si Dix y el bricolaje son matrices (en contraposición a 1-D vectores), max(dIx) y max(dIy) volverá vectores.

&& y || se debe utilizar para comparar escalares, no vectores.

Usted probablemente desea escribir

if max(dIx(:))<=103 && max(dIy(:))<=100 

pero no se puede decir con seguridad, ya que no sé lo que se supone que el código para hacer :)

5

Uso & y | de matrices en lugar de &&, ||.

&& y || son operadores de cortocircuito. Si lo piensas, no tienen sentido para las matrices. Por ejemplo, el cortocircuito o - || se detiene y devuelve true siempre que el primer argumento sea true.
Pero, ¿cómo ampliarías eso a una matriz?