Как решить && операнды в логическом скаляре - PullRequest
7 голосов
/ 07 февраля 2012

После запуска кода в matlab я сталкиваюсь с этой ошибкой и не знаю, как ее решить. Как я могу решить эту проблему.

Внимание:

Операнды к || и операторы && должны быть преобразованы в логические скалярные значения.

    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

Ответы [ 2 ]

7 голосов
/ 07 февраля 2012

Если dIx и dIy являются матрицами (в отличие от 1-D векторов), max(dIx) и max(dIy) будут возвращать векторы.

&& и || должны использоваться для сравнения скаляров, а не векторов.

Вы , вероятно, хотите ввести

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

, ноЯ не могу сказать наверняка, так как я не знаю, что должен делать код:)

5 голосов
/ 07 февраля 2012

Используйте & и | для матриц вместо &&, ||.

&& и || - операторы короткого замыкания.Если вы думаете об этом, они не имеют смысла для матриц.Например, короткое замыкание или - || останавливается и возвращает true всякий раз, когда первым аргументом является true.
Но как бы вы расширили это до матрицы?

...