Как отделить объект от фона на изображении? - PullRequest
4 голосов
/ 24 января 2010

У меня есть сегментированное изображение, выглядит так:

// Я не могу публиковать фотографии, так как я новый участник, поэтому только ссылка:

// Оказывается, я не могу также опубликовать две гиперссылки, поэтому я собираюсь опубликовать только ссылку на файл карты.

Редактировать: теперь я могу публиковать изображения:

альтернативный текст http://img4.imageshack.us/img4/917/test0seg.jpg

У меня также есть файл карты, который четко показывает сегменты:

альтернативный текст http://img4.imageshack.us/img4/6904/test0map.jpg

Теперь мне нужно создать двоичный файл изображения, состоящий только из оленей в центре, окрашенных в белый цвет, а остальное изображение - в черный.

Какие методы вы предлагаете для объединения сегментов?

Я имею в виду нечто подобное:

  1. Рассчитать средние значения цвета для каждого сегмента.
  2. Сравните их и объедините самые похожие сегменты.

Если я это сделаю, я получу 3 сегмента: пол (белая часть), стена (черная и светло-серая части вместе) и объект (серая часть).

На этом этапе что можно сделать, чтобы правильно получить объект?

Обратите внимание, что объект не обязательно должен быть в центре, он может даже быть частично за кадром.

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

Я бы очень признателен за любую помощь. Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 08 февраля 2010

Это довольно сложный вопрос, поскольку «объект» - это субъективный термин. Понятно, что вам нужен самый интересный объект, поэтому нам просто нужно решить, как выглядит интересный объект. Это должно быть что-то статистическое.

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

Я бы просто поигрался, сложив вместе различные функции партитуры. Некоторые хорошие могут быть:

  • расстояние или квадрат в квадрате от центра сегмента до точного центра изображения (это позволит найти ваш пример объекта).
  • количество пикселей сегмента, которые находятся на границе изображения (это может найти ваш пример объекта, так как плохие кластеры имеют большие границы)
  • количество ребер Канни внутри сегмента, разделенного на количество пикселей в сегменте, если вы думаете, что ваш объект будет "более интересным", чем фон
  • количество точек SIFT, деленное на количество пикселей, такое же обоснование, как и в предыдущем
  • разбить пространство RGB на относительно небольшое количество бинов, например 512 (поэтому разбейте каждый из R, G, B на 8 грубых уровней, например 0-31, 32-63 и т. Д., Если вы работаете с 8- битовые изображения) и посмотрите на свойства каждого сегмента, рассматриваемого как распределение по этому пространству. Интересный объект может иметь распределение с более высокой энтропией или распределение с более низкой энтропией, в зависимости от вашего контекста.
0 голосов
/ 24 января 2010

Для сегментации попробуйте вырастить срезанный алгоритм http://en.wikipedia.org/wiki/GrowCut_algorithm

Публикация от 2005 года, и библиотека MATLAB доступна по адресу http://www.mathworks.com/matlabcentral/fileexchange/19091-growcut-image-segmentation

Знаете ли вы заранее, что вас интересует?

Например, олени коричневые, и это может помочь в сравнении гистограмм.

0 голосов
/ 24 января 2010

Я не понял, вы уже создали карту сегментации (С чем вы связались)?

Или ссылка на само изображение? Если он находится в Matlab, то, получив карту сегментации, вы можете легко создать из нее двоичную матрицу и просто умножить ее на исходное изображение. Следовательно, все, что осталось, это та часть, которую вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...