2012-02-07 29 views
7

Po uruchomieniu kodu w Matlab napotykam ten błąd i nie wiem, jak go rozwiązać. Jak mogę rozwiązać ten problem.Jak rozwiązywać && operandy do logicznego skalarnego

Ostrzeżenie:

Argumenty do || i & & operatory muszą być wymienialne na logiczne wartości skalarne.

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 

Odpowiedz

7

Jeśli Dix i majsterkowiczów są macierzami (w przeciwieństwie do 1-D), wektory max(dIx) i max(dIy) powróci wektory.

&& i || powinny być używane do porównywania skalarów, a nie wektorów.

Ty prawdopodobnie chcesz wpisywać

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

ale nie mogę powiedzieć na pewno, jak nie wiem co kod ma robić :)

5

Korzystając & i | dla matryc zamiast &&, ||.

&& i || są operatorami zwarć. Jeśli o tym pomyśleć, nie mają one sensu dla matryc. Na przykład zwarcie lub - || zatrzymuje się i zwraca true, gdy pierwszy argument to true.
Ale jak rozszerzyłbyś to na matrycę?