Нужна помощь относительно построения пикселя от двоичных изображений до разреженного изображения
У меня есть двоичное изображение, и я хочу построить только пиксели переднего плана в разреженное изображение с помощью MATLAB. Я знаю, что местоположение пикселя на переднем плане изображения (белого цвета) должно быть известно. Для этого я следующий код:
close all
clear all
original = imread('/gt_frame_2.bmp');
fig1 = figure(1)
[x y]=find([original])
Входные данные, используемые здесь, выглядят следующим образом:
И ожидаемое разреженное изображение будет примерно таким:
Выше изображение в GIMP. Просто чтобы дать представление о том, как будет выглядеть разреженное изображение. Содержит пиксели изображения переднего плана. Но не все пиксели построены.
После нахождения координат X Y пикселей мне нужно нанести то же самое на разреженное изображение. Здесь, где я потерялся, я не знаю, как построить разреженное изображение. Любая помощь приветствуется.
1 ответ
Вам не нужен xy, если вы просто хотите выбрать некоторое подмножество пикселей, линейное индексирование будет проще. Синтаксис 1:step:end
это очень полезный способ выделения подмножества вектора или матрицы. Это работает, даже если размер матрицы не является точным кратным вашего step
Например, проверьте в командной строке, что это делает:
n = 1:5
n(1:3:end)
Итак, вот очень простой способ сделать это:
n = find(I); % list of non-zeros
I2 = zeros(size(I)); % blank image of same size
I2(n(1:10:end))=1; % every tenth pixel
Мы могли бы стать более сложными (думаю, что для этого требуется набор инструментов для обработки изображений). Если есть только один твердый объект, используйте bwperim
чтобы вернуть только границу, затем заполните случайное подмножество пикселей:
I2 = bwperim(I);
% randperm for sampling without replacement
n2 = randperm(numel(n),floor(numel(n)/10);
I2(n(n2))=1;