2013-07-19 3 views
2

Я довольно новичок в Matlab, но это ситуация. У меня есть спутниковый образ океана, с небольшим количеством земли и некоторыми лодками. Используя пороговое значение для создания бинарной маски и bwlabel, мне удалось создать набор меток, которые соответствуют лодкам на воде. Вот накладывается изображение этикетки над лодками (и земли), так что вы можете увидеть, что я имею в виду:MATLAB анализ некоторых разделов изображения

enter image description here

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

Поэтому я предполагаю, что я спрашиваю, есть ли способ извлечь цветные разделы из этого изображения, проанализировать их дальше (путем создания отдельных сегментов или с использованием гистограмм или что-то еще) для создания нового набора меток содержащие только лодки, но также сохраняйте места расположения этих новых меток по отношению к исходному изображению неповрежденными, чтобы снова наложить их обратно на исходное изображение? Если да, то как?

Спасибо!

ответ

2

Несколько вопросов здесь.

1. Есть ли способ извлечь цветные разделы из этого изображения?

Да.

Позвольте ярлыку изображения, которое вы получили от bwlabel, должно быть L, а оригинальное изображение должно быть I. Затем S = regionprops(L,'BoundingBox'); предоставит вам ограничивающий прямоугольник, связанный с каждой областью, в L. Используйте I2 = imcrop(I,S(2).BoundingBox);, чтобы извлечь регион из списка S(2). Вам нужно будет проверить, соответствует ли S(2) метке 2 в L (если нет, исправление является тривиальным).

2. Проанализируйте их далее (путем создания отдельных сегментов или используя гистограммы или что-то еще) для создания нового набора меток, содержащих только лодки.

Не так просто. Это сильно зависит от ваших изображений. Вы можете играть с функциями порога MATLAB по умолчанию, чтобы заставить его работать. Предположим, что вы получаете двоичные маски для каждого обрезанного изображения (например, IB1).

3. Также сохраняйте места расположения этих новых меток относительно исходного изображения неповрежденными, чтобы снова наложить их обратно на исходное изображение?

Да. Поскольку у вас есть набор ограничивающих полей S, просто замените новую маску на L.

L(round(S(1).BoundingBox(2):S(1).BoundingBox(2)+S(1).BoundingBox(4)),... round(S(1).BoundingBox(1):S(1).BoundingBox(1)+S(1).BoundingBox(3))) = IB1;

, где I1 является улучшенной маски.Не забудьте установить все ненулевые значения в маске в индекс метки при назначении L.

Подробнее о том, почему используется round, look here.

+0

Спасибо за это, это была отличная помощь. – user2599252

0

Можете ли вы умножить старое изображение на помеченные области (или im_label ~ = 0, так как они будут иметь разные значения меток), чтобы удалить ненужную информацию, а затем обработать изображение снова, используя метод «независимо» после фон удаляется?

Смежные вопросы