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

У меня есть двоичное изображение, и я хочу построить только пиксели переднего плана в разреженное изображение с помощью 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;
Другие вопросы по тегам