Как замаскировать часть изображения в Matlab?

Я хотел бы знать, как замаскировать часть изображения, которое находится в ЧЕРНО-БЕЛОМ цвете?

У меня есть объект, который должен быть обнаружен по краям, но у меня есть другие белые мешающие объекты на заднем плане, которые находятся ниже целевого объекта ... Я хотел бы замаскировать всю нижнюю часть изображения черным, как я могу это сделать ?

Спасибо !!

ИЗМЕНИТЬ

Я также хочу замаскировать некоторые другие части (верхняя часть) ... как я могу это сделать?

Пожалуйста, объясните код, потому что я действительно хочу узнать, как он работает, и реализовать его в своем собственном понимании.

РЕДАКТИРОВАТЬ2

Мое изображение 480x640 ... Есть ли способ замаскировать определенные пиксели? например 180х440 с картинки ...


person NLed    schedule 15.05.2010    source источник
comment
Когда вы говорите «нижняя часть», вы имеете в виду нижнюю часть в пространстве или по интенсивности?   -  person mmr    schedule 16.05.2010


Ответы (1)


Если у вас 2-мерная интенсивность оттенков серого изображение, хранящееся в матрице A, вы можете сделать нижнюю половину черной, выполнив следующие действия:

centerIndex = round(size(A,1)/2);         %# Get the center index for the rows
A(centerIndex:end,:) = cast(0,class(A));  %# Set the lower half to the value
                                          %#   0 (of the same type as A)

Для этого сначала нужно получить количество строк в A с помощью функции SIZE, разделив полученное значение на 2 и округлив, чтобы получить целочисленный индекс около центра высоты изображения. Затем вектор centerIndex:end индексирует все строки от центрального индекса до конца, а : индексирует все столбцы. Для всех этих индексированных элементов установлено значение 0, что соответствует черному цвету.

Функция CLASS используется для получения типа данных A, чтобы 0 можно было преобразовать в этот тип с помощью функции CAST < / а>. Это может не обязательно, поскольку 0, вероятно, будет автоматически преобразован в тип A без них.

Если вы хотите создать логический индекс для использования в качестве маски вы можете сделать следующее:

mask = true(size(A));  %# Create a matrix of true values the same size as A
centerIndex = round(size(A,1)/2);  %# Get the center index for the rows
mask(centerIndex:end,:) = false;   %# Set the lower half to false

Теперь mask - это логическая матрица с true (т. Е. «1») для пикселей, которые вы хотите сохранить, и false (т. Е. «0») для пикселей, которые вы хотите установить в 0. Вы можете установить для других элементов mask значение false по своему желанию. . Затем, когда вы захотите применить маску, вы можете сделать следующее:

A(~mask) = 0;  %# Set all elements in A corresponding
               %#   to false values in mask to 0
person gnovice    schedule 15.05.2010
comment
Спасибо за код :) Не могли бы вы подробно объяснить, что делает код? Я хотел бы узнать, как это работает :) Можете ли вы также сказать мне, как я могу также замаскировать конкретную часть, а не только половину? потому что оказывается, что мне нужно также замаскировать несколько вертикальных пикселей из верхней части изображения .. СПАСИБО! - person NLed; 16.05.2010
comment
@ZaZu: Нет проблем. ;) Я обновил свой ответ объяснением и кодом для создания логической маски. - person gnovice; 16.05.2010
comment
Большое спасибо :) Одна проблема, логический индекс, используемый для маскировки, здесь не работает :( Я не уверен, почему !! Предыдущий работает хорошо, но он срезает последнюю точку, где объект падает (объект падает немного после 1 / 2 размера изображения) .. Могу ли я использовать первый метод для блокировки и верхнего пространства? ИЗМЕНИТЬ Могу ли я использовать способ блокировки определенных пикселей? У меня есть изображение 480x640 .. - person NLed; 16.05.2010
comment
@ZaZu: Не уверен, почему логический индекс не работает. Какое сообщение об ошибке вы получаете? Вы можете заблокировать другие части изображения, установив для других диапазонов индексов значение 0 (как я сделал в первом примере). Например, A(1:5,:) = 0; устанавливает черные первые 5 строк, а A(180,440) = 0 устанавливает черный пиксель в строке 180 и столбце 440. - person gnovice; 16.05.2010
comment
Хорошо !! Я понял ... Я поместил mask(1:5,:) вместо image(1:5,:) .... Теперь у меня есть первые несколько строк = false, и я рад, что это работает :) спасибо ... теперь я могу замаскировать эти первые строки И последние 50 строк Например ? - person NLed; 16.05.2010
comment
О, вы уже упомянули пример A (180 440), спасибо, теперь он работает !! :) Очень признателен за вашу помощь и за ответ! - person NLed; 16.05.2010