Для чего этот оператор MATLAB: [MN ~] = size (imge) ;? - PullRequest
4 голосов
/ 20 июля 2011

Что означает это утверждение ???

[M N ~] = size(imge);

Я не понимаю причину использовать это "~", и это утверждение также дает сообщение об ошибке.

Ответы [ 2 ]

4 голосов
/ 20 июля 2011

В версиях MATLAB, начиная с 2009b, вы можете использовать тильду (~) , чтобы игнорировать выходные данные, которые вам не нужны . Если он выдает ошибку, это означает, что ваша версия не поддерживает это использование тильды, и вы должны заменить его на фиктивное имя переменной следующим образом:

[M N dummy] = size(imge);

Как объясняет Сумона, M будет содержать число или строки в изображении, а N - количество столбцов; фиктивная будет 1 (для одного черно-белого изображения), 3 (для одного цветного изображения) или произвольное целое число (для стека изображений).

Обычно имеет смысл использовать тильду, если есть другие параметры, которые вас потом интересуют. size здесь исключение в том смысле, что он проверяет (используя nargout), сколько выводов он должен произвести, и соответственно изменяет свое поведение, , как описано здесь.

То есть

test = zeros(3,4,5);
[M N dummy] = size(test);

дает M = 3, N = 4, как и следовало ожидать, но

test = zeros(3,4,5);
[M N] = size(test);

производит М = 3, N = 20.

В вашем конкретном случае я предполагаю, что imge - это стек изображений, и программист хотел выяснить размер отдельных изображений, но не их количество.

0 голосов
/ 20 июля 2011
Команда

[M N D]=size(img);

size выдаст вам число строк в первой переменной M, количество столбцов во второй переменной N и количество измерений втретья переменная D для параметра изображения в этом случае.Если это серое масштабированное изображение, то D = 2, а если это RGB-изображение, то D = 3.Если ваше утверждение дает ошибку, то разумно придерживаться нормального соглашения, как я показал вам.Надеюсь, это поможет :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...