Как замаскировать часть изображения в Matlab? - PullRequest
3 голосов
/ 16 мая 2010

Хотелось бы узнать, как замаскировать часть изображения в ЧЕРНО-БЕЛЫЙ?

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

Спасибо !!

EDIT

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

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

EDIT2

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

Ответы [ 2 ]

6 голосов
/ 16 мая 2010

Если у вас есть 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
0 голосов
/ 24 июля 2016
function masked = maskout(src,mask)
    % mask: binary, same size as src, but does not have to be same data type (int vs logical)
    % src: rgb or gray image
    masked = bsxfun(@times, src, cast(mask,class(src)));
end
...