Я пытаюсь создать маску (или аналогичный результат), чтобы стереть фрагменты двоичного изображения, которые не привязаны к объекту, окруженному границей. Я видел эту нить (http://www.mathworks.com/matlabcentral/answers/120579-converting-boundary-to-mask), чтобы сделать это из bwboundaries, но у меня возникли проблемы с внесением в нее подходящих изменений. Моя цель - использовать этот код, чтобы изолировать часть этой карты топографии, которая подключена, и избавиться от лишних частей. Мне нужно сохранить структуру внутри ограниченной области, так как тогда я собирался использовать bw-границы для создания дополнительных граничных линий «внутренней» структуры основного объекта.Создать маску из bwtraceboundary в Matlab
Ниже мой код, чтобы сначала создать единую пограничную линию с помощью функции поиска для нижнего левого пикселя черной области, чтобы начать трассировку. Он просто ищет первый столбец изображения, который не является полностью белым, и выбирает последний черный пиксель. Второй раздел должен был создать внутренние граничные линии. Обратите внимание, что я пытаюсь выполнить этот двухэтапный процесс, но если есть способ сделать это только с одним, я бы тоже хотел услышать это решение. В конечном счете, мне просто нужны границы для основной, большой черной области и отверстий внутри нее, в то же время избавляясь от лишних предметов, висящих вокруг.
figName='Images/BookTrace_1';
BW = imread([figName,'.png']);
BW=im2bw(BW);
imshow(BW,[]);
for j=1:size(BW,2)
if sum(BW(:,j))~=sum(BW(:,1))
corner=BW(:,j);
c=j-1;
break
end
end
r=find(corner==0);
r=r(end);
outline = bwtraceboundary(BW,[r c],'W',8,Inf,'counterclockwise');
hold on;
plot(outline(:,2),outline(:,1),'g','LineWidth',2);
[B,L] = bwboundaries(BW);
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2)
end
Любые предложения или советы приветствуются. Если есть вопросы, пожалуйста, дайте мне знать, и я обновить сообщение. Спасибо!
EDIT: Для пояснения моя конечная цель такова, как на рисунке ниже. Мне нужно проследить все внешние и внутренние границы, привязанные к основному объекту, при этом исключая любые запасные мелкие кусочки, которые не привязаны к нему.
Это отличная функция, чтобы узнать о! Прошу прощения, я думаю, что, возможно, я не совсем понял, что мне нужно. Я хочу удалить все за пределами зеленой границы, но держать все внутри. Значит, эти два варианта дают мне только один или другой, если я не пойму? – jmolaro
@jmolaro Прошу прощения, я не понимаю ... если вы хотите удалить все за пределами зеленой границы, не будет ли это вторым вариантом? Можете ли вы показать мне, как выглядит идеальный результат? – rayryeng
@jmolaro - ОК, вы хотите удалить эти пиксели в изображении, которые обозначены зеленым? Я до сих пор не совсем понимаю, чего вы хотите. – rayryeng