MATLAB - Несколько значений изображения [дубликат]

Если вы не инициализировали ссылочный тип и хотите установить или прочитать одно из его свойств, он будет генерировать исключение NullReferenceException.

Пример:

Person p = null;
p.Name = "Harry"; // NullReferenceException occurs here.

Вы можно просто избежать этого, проверив, является ли переменная не нулевой:

Person p = null;
if (p!=null)
{
    p.Name = "Harry"; // Not going to run to this point
}

Чтобы полностью понять, почему выбрано исключение NullReferenceException, важно знать разницу между типами значений и ссылочные типы .

Итак, если вы имеете дело со типами значений, NullReferenceExceptions не может произойти. Хотя вам нужно поддерживать оповещение при работе со ссылочными типами!

Только ссылочные типы, как следует из названия, могут содержать ссылки или буквально буквально ничто (или «нуль»). Если типы значений всегда содержат значение.

Типы ссылок (эти должны быть проверены):

  • динамический
  • объект
  • string

Типы значений (вы можете просто игнорировать эти):

  • Числовые типы
  • Интегральные типы
  • Типы с плавающей запятой
  • decimal
  • bool
  • Пользовательские структуры

2
задан gnovice 26 March 2012 в 14:52
поделиться

3 ответа

Вы можете сделать это, используя функцию SUB2IND , чтобы преобразовать ваши пары индексов в линейный индекс:

mtx(sub2ind(size(mtx),co_ords(1,:),co_ords(2,:))) = 0;
6
ответ дан thron of three 3 September 2018 в 14:20
поделиться

Другой ответ:

mtx(co_ords(1,:)+(co_ords(2,:)-1)*500)=0;
1
ответ дан Junuxx 3 September 2018 в 14:20
поделиться

Я наткнулся на этот вопрос, пока искал аналогичную проблему в 3-D. Я имел индексы строк и столбцов и хотел изменить все значения, соответствующие этим индексам, но на каждой странице (так что все 3-е измерение). В принципе, я хотел выполнить mtx(row(i),col(i),:) = 0;, но без циклов через строки и столбцы.

Я думал, что поделился бы моим решением здесь вместо того, чтобы задавать новый вопрос, поскольку он тесно связан.

Еще одно отличие заключалось в том, что линейные индексы были доступны мне с самого начала, потому что я определял их с помощью find. Я включу эту часть для ясности.

mtx = rand(100,100,3); % you guessed it, image data
mtx2d = sum(mtx,3); % this is similar to brightness
ind = find( mtx2d < 1.5 ); % filter out all pixels below some threshold

% now comes the interesting part, the index magic
allind = sub2ind([numel(mtx2d),3],repmat(ind,1,3),repmat(1:3,numel(ind),1));
mtx(allind) = 0;
0
ответ дан scenia 3 September 2018 в 14:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: