Классификация и выделение объектов на изображениях
Здрайствуйте!
В связи со сферой своей деятельности, собрался, на мой взгляд, очень ценный материал, которым хочу поделиться с вами. Думаю некоторым он будет крайне важен и полезен, возможно мои наработки сэкономят Вам время, в случае чего буду рад. И так ближе к делу. На Хабре уже есть хороший обзор алгоритмов кластеризации данных. Детально рассмотрена теория, но практических результатов нет, как обычно практика не так легка, как кажется. Поэтому хочу представить вашему сведению реальные результаты, проблемы и их решений возникшее при кластеризации (точней сказать сегментации, потому что объект кластеризации — статическое изображение). Под катом будет и сегментация, и цифровая обработка изображений. Прошу…
Начнем
Сначала краткая постановка задачи, возникшая как подзадача для задачи планирования траектории: есть статическое изображение, полученное с помощью камеры мобильного робота:
это изображение можно рассматривать как среду с препятствиями (сцена), представляющую собой совокупность объектов различных цветов и размеров, причем заранее неизвестно какой из объектов полезный (цель), а какой является препятствием (помехой). Так же предполагается, что каждый объект на изображении (препятствия, фон и дорожное покрытие) описывается своими цветами – основной признак, по которому можно его классифицировать. Так вот необходимо уметь выделять любой из объектов представленных на изображении.
Буквально кратко напомню, что такое кластеризация данных, в общем случае кластерный анализ (англ. Data clustering) — задача разбиения заданной выборки объектов (ситуаций) на подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались. Задача кластеризации относится к статистической обработке, а также к широкому классу задач обучения без учителя. Кластерный анализ — это многомерная статистическая процедура, выполняющая сбор данных, содержащих информацию о выборке объектов, и затем упорядочивающая объекты в сравнительно однородные группы (кластеры)(Q-кластеризация, или Q-техника, собственно кластерный анализ). Кластер — группа элементов, характеризуемых общим свойством, главная цель кластерного анализа — нахождение групп схожих объектов в выборке.
И зачем это вообще надо и без кластеризации можно жить? Тоже никто так и не осветил, попробую снять завесу с назначения этого понятия.
- Понимание данных путём выявления кластерной структуры. Разбиение выборки на группы схожих объектов позволяет упростить дальнейшую обработку данных и принятия решений, применяя к каждому кластеру свой метод анализа (стратегия «разделяй и властвуй»).
- Сжатие данных. Если исходная выборка избыточно большая, то можно сократить её, оставив по одному наиболее типичному представителю от каждого кластера.
- Обнаружение новизны (англ. novelty detection). Выделяются нетипичные объекты, которые не удаётся присоединить ни к одному из кластеров.
В первом случае число кластеров стараются сделать поменьше. Во втором случае важнее обеспечить высокую степень сходства объектов внутри каждого кластера, а кластеров может быть сколько угодно. В третьем случае наибольший интерес представляют отдельные объекты, не вписывающиеся ни в один из кластеров. Во всех этих случаях может применяться иерархическая кластеризация, когда крупные кластеры дробятся на более мелкие, те в свою очередь дробятся ещё мельче, и т. д. Такие задачи называются задачами таксономии. Результатом таксономии является древообразная иерархическая структура. При этом каждый объект характеризуется перечислением всех кластеров, которым он принадлежит, обычно от крупного к мелкому. Классическим примером таксономии на основе сходства является биноминальная номенклатура живых существ, предложенная Карлом Линнеем в середине XVIII века. Аналогичные систематизации строятся во многих областях знания, чтобы упорядочить информацию о большом количестве объектов.
С головой хватит пока теории, вернемся к проблеме, теперь, когда кто-то познакомился с термином, кто-то освежил в голове, а кто и совсем пропустил, будем решать задачу. Для решения взят метод кластеризации к-средних (k-means), потому что данный метод не требует предварительных предположений относительно числа кластеров, для возможности использования этого метода необходимо иметь гипотезу о наиболее вероятном количестве кластеров. Общая идея алгоритма: заданное фиксированное число k кластеров наблюдения сопоставляются кластерам так, что средние в кластере (для всех переменных) максимально возможно отличаются друг от друга. Для любителей картинок и попытка «объяснить на пальцах» (при количестве кластеров равно двум):
Основные достоинства алгоритма k-средних:
- простота использования;
- быстрота использования;
- понятность и прозрачность алгоритма.
Недостатки алгоритма k-средних:
- алгоритм слишком чувствителен к выбросам, которые могут искажать среднее. Возможным решением этой проблемы является использование модификации алгоритма — алгоритм k-медианы;
- алгоритм может медленно работать на больших базах данных. Возможным решением данной проблемы является использование выборки данных.
Практические трудности и их решение
Хочу сразу сказать, что все выполнялось в математическом пакете Matlab компании Mathworks (описание реализации — отдельная обширная статья). Применив k-средних для исходного изображения, приведённого вначале, получим следующее сегментированное изображение:
Видно, что большинство кластеров не имеют четких границ, накладываются друг на друга. Сравнивая оба рисунка, не трудно заметить, что появились нетипичные объекты (“разводы” на стене и полу), которые желательно (скорей необходимо для реальной задачи) собрать в общий кластер. Это связано с тем, что алгоритм слишком чувствителен к выбросам, которые могут искажать среднее и необходимо выполнить предварительную обработку изображения.
Первое, что пришло в голову после долгих рассуждений, стало медианной фильтрацией изображения, которая является решением для эффективного удаление шума при сохранении важных для последующего распознавания деталей изображения. Сложность решения данной задачи существенно зависит от характера шумов. В отличие от детерминированных искажений, которые описываются функциональными преобразованиями исходного изображения, для описания случайных воздействий используют модели аддитивного, импульсного и мультипликативного шумов. А теперь плавно погрузимся в теорию.
Наиболее распространенным видом помех является случайный аддитивный шум, статистически независимый от сигнала. Модель аддитивного шума используется тогда, когда сигнал на выходе системы или на каком-либо этапе преобразования может рассматриваться как сумма полезного сигнала и некоторого случайного сигнала. Модель аддитивного шума хорошо описывает действие зернистости фотопленки, флуктуационный шум в радиотехнических системах, шум квантования в аналого-цифровых преобразователях и т.п. Аддитивный гауссов шум характеризуется добавлением к каждому пикселю изображения значений с нормальным распределением и с нулевым средним значением. Такой шум обычно появляется на этапе формирования цифровых изображений. Основную информацию в изображениях несут контуры объектов. Классические линейные фильтры способны эффективно удалить статистический шум, но степень размытости мелких деталей на изображении может превысить допустимые значения. Для решения этой проблемы используются нелинейные методы, например алгоритмы на основе анизотропной диффузии Перрона и Малика, билатеральные и трилатеральные фильтры. Суть таких методов заключается в использовании локальных оценок, адекватных определению контура на изображении, и сглаживания таких участков в наименьшей степени. Импульсный шум характеризуется заменой части пикселей на изображении значениями фиксированной или случайной величины. На изображении такие помехи выглядят изолированными контрастными точками. Импульсный шум характерен для устройств ввода изображений с телевизионной камеры, систем передачи изображений по радиоканалам, а также для цифровых систем передачи и хранения изображений. Для удаления импульсного шума используется специальный класс нелинейных фильтров, построенных на основе ранговой статистики. Общей идеей таких фильтров является детектирование позиции импульса и замена его оценочным значением, при сохранении остальных пикселей изображения неизменными.
Медианная фильтрация изображений наиболее эффективна, если шум на изображении имеет импульсный характер и представляет собой ограниченный набор пиковых значений на фоне нулей. В результате применения медианного фильтра наклонные участки и резкие перепады значений яркости на изображениях не изменяются. Это очень полезное свойство именно для изображений, на которых контуры несут основную информацию. При медианной фильтрации зашумленных изображений степень сглаживания контуров объектов напрямую зависит от размеров апертуры фильтра и формы маски. При малых размерах апертуры лучше сохраняются контрастные детали изображения, но в меньшей степени подавляется импульсные шумы. При больших размерах апертуры наблюдается обратная картина. Оптимальный выбор формы сглаживающей апертуры зависит от специфики решаемой задачи и формы объектов. Особое значение это имеет для задачи сохранения перепадов (резких границ яркости) в изображениях.
Ну все, теперь можно показывать результаты
Все стало вроде хорошо, но было принято решение не останавливаться на достигнутом и тут почти случайно наткнулся на технологический прием обработки фотографического изображения, который позволяет добиться эффекта ощущения большей его резкости за счет усиления контраста тональных переходов (Unsharp masking). Важно отметить, что нерезкое маскирование не повышает резкость изображения на самом деле. Оно не может восстановить потерянные на разных этапах производства изображения детали (при съёмке, сканировании, изменении размера, полиграфическом воспроизведении). Нерезкое маскирование усиливает локальный контраст изображения на тех участках, где изначально присутствовали резкие изменения градаций цвета. Благодаря этому изображение визуально воспринимается как более резкое.
Если наглядно, то после медианной фильтрации и нерезкого маскирования будет вот такая картинка:
Ну, а вот теперь выполним кластеризацию и сравним, что было и что стало:
Как видно, сразу уменьшилось количество кластеров и теперь они имеют более четкие границы, можно считать, что задача решена, только осталось предложить инструмент для выделения объекта на изображение.
Выделение объектов. Заключительный этап
Когда выполнен кластерный анализ, можно определить координаты целевого объекта на изображении. Для этого кластера представляются бинарными изображениями (масками), на которых значения каждого пикселя условно кодируются (0 — задний план или фон, 1 – передний план), то есть сегментация с выделением границ. Например, маска зеленного объекта будет
Спасибо за внимание, надеюсь, Вам было и будет полезно.
Источник
Выделение объектов
Перед выполнением любой операции следует выделить объект или группу объектов, над которыми данная операция будет производиться. Существуют следующие способы выделения:
· для выделения одного объекта достаточно один раз щелкнуть на его значке левой кнопкой мыши;
· для выделения группы объектов, расположенных подряд, следует нажать клавишу Shiftи щелкнуть левой кнопкой мыши на значке первого и последнего объектов группы, при этом все промежуточные объекты будут выделены автоматически;
· для выделения объектов, не расположенных подряд, необходимо нажать клавишу Ctrl и, не отпуская ее, щелкать левой кнопкой мыши на именах всех объектов, подлежащих выделению;
· для выделения в окне всех объектов можно выбрать команду Правка – Выделить все горизонтального меню.
Для отказа от выделения достаточно щелкнуть мышью в любом свободном месте экрана. Для выборочного снятия выделения следует нажать клавишу Ctrl и щелкать мышью на именах тех объектов, с которых требуется снять выделение.
Основные операции над объектами:
Большинство операций Windows выполняются следующими способами:
· при помощи команд горизонтального меню;
· при помощи пунктов контекстного меню;
· при помощи кнопок на панелях инструментов;
· путем перетаскивания объекта мышью.
Для создания новой папки необходимо на левой панели Проводника выделить значок того диска или открыть ту папку, где предполагается создание новой, после чего выбрать команду Файл – Создать – Папку. В результате на правой панели появится значок папки с именем Новая папка, вместо которого необходимо ввести выбранное имя папки и нажать клавишу Enter.
При создании папки с использованием контекстного меню следует открыть нужную папку, щелкнуть правой кнопкой мыши в любом свободном месте правой панели, выбрать пункт Создать – Папку, а затем выполнить действия, аналогичные вышеописанным.
Создание текстового файла при помощи редактора Блокнот.
Для выполнения этой операции необходимо открыть ту папку, в которой будет находиться создаваемый файл, и выбрать команду горизонтального меню Файл – Создать – Текстовый документ. На экране появится значок нового файла с именем Новый текстовый документ. Вместо него необходимо ввести выбранное имя файла и нажать клавишу Enter. Двойным щелчком на значке созданного файла запустится простейший текстовый редактор Блокнот, в котором можно набрать небольшой по размеру текст. Для сохранения набранного текста следует выбрать команду Файл – Сохранить.
Новый текстовый файл может быть создан также при помощи пункта контекстного меню Создать – Текстовый документ.
При создании ярлыка для объекта можно воспользоваться следующими способами:
· выделить объект и выбрать в горизонтальном меню команду Файл – Создать ярлык или в контекстном меню объекта пункт Создать ярлык, после чего на экране появится значок ярлыка с именем Ярлык для …;
· использовать для создания ярлыка специальную программу — мастер, которая работает в режиме диалога с пользователем, при этом диалог строится по принципу «запрос – ответ».
Для запуска Мастера создания ярлыка необходимо выделить объект и выбрать команду Файл – Создать – Ярлыкгоризонтального меню, после чего на экране появится диалоговое окно Создание ярлыка. В командной строке этого окна должен быть указан путь доступа к тому объекту, для которого создается ярлык. Если точный адрес объекта неизвестен, то для его нахождения используют кнопку .
В диалоговом окне Обзор при помощи раскрывающегося списка поля Папка или кнопки (на один уровень вверх) следует найти и открыть ту папку, в которой хранится объект (рис. 3.5.). Если ярлык создается для файла, то в раскрывающемся списке поля Тип файлов необходимо выбрать элемент Все файлы. В результате в рабочей области окна появится список всех файлов, находящихся в открытой папке. В списке следует выделить нужный файл и щелкнуть на кнопке
, после чего путь доступа к объекту будет автоматически занесен в командную строку окна Создание ярлыка.
Переход к следующему диалоговому окну Мастера выполняется щелчком на кнопке , после чего предлагается указать название ярлыка и завершить процесс создания щелчком на кнопке
.
Для изменения стандартного значка ярлыка, присвоенного системой, необходимо в контекстном меню ярлыка выбрать пункт Свойства, щелкнуть на кнопке , из предлагаемого списка выбрать понравившийся значок и закрыть оба диалоговых окна при помощи кнопки
.
Копирование и перемещение объектов.
При выполнении копирования или перемещения папку, из которой происходит одна из этих операций, называют источником, а папку, в которую выполняется операция, называют приемником.
В процессе копирования исходный объект остается на своем старом месте, а его копия помещается на новое место, тогда как в процессе перемещения исходный объект удаляется со старого места и перемещается на новое.
Операции копирования и перемещения могут быть выполнены следующими способами.
1. Использование буфера обмена.
· При помощи команд пункта горизонтального меню Правка.
Для выполнения необходимо раскрыть папку-источник, выделить объект и выбрать команду Правка – Копировать для операции копирования или команду Правка – Вырезать для операции перемещения. При этом объект направляется системой в специальную область оперативной памяти, которая называется буфером обмена. Буфер обмена используется для временного хранения объектов и обычно невидим для пользователя, но при необходимости его можно просмотреть, выбрав команду Пуск – Программы – Стандартные – Служебные – Буфер обмена.
Далее следует раскрыть папку-приемник и выбрать команду Правка – Вставить как для операции копирования, так и для операции перемещения. В результате объект будет размещен в выбранной папке.
· При помощи пунктов контекстного меню объекта.
Для выполнения необходимо раскрыть папку-источник, вызвать контекстное меню объекта и выбрать пункт Копировать для операции копирования или Вырезать для операции перемещения. Затем раскрыть папку-приемник и в контекстном меню выбрать пункт Вставить.
· При помощи кнопок ,
и
на панели инструментов.
· При помощи соответствующих комбинаций клавиш:
Ctrl + C – копировать в буфер;
Ctrl + X– вырезать в буфер;
Ctrl + V – вставить из буфера.
Объект, к которому была применена команда Вырезать, принимает блеклый вид.
2. Использование мыши.
· При помощи специального перетаскивания.
Для выполнения необходимо, чтобы на правой панели находился копируемый или перемещаемый объект, а на левой панели была видна папка-приемник. Значок объекта с правой панели перетаскивают на значок папки-приемника, находящийся на левой панели, правой кнопкой мыши. При этом в тот момент, когда значок папки-приемника изменит свой цвет, а пользователь отпустит правую кнопку мыши, на экране появится специальное всплывающее меню, в котором следует выбрать пункт Переместить или Копировать
· При помощи перетаскивания.
Значок объекта с правой панели перетаскивают на значок папки-приемника при нажатой левой кнопке мыши. При этом в процессе выполнения операции копирования должна быть нажата клавиша Ctrl на клавиатуре, а рядом с указателем мыши появится значок «+». При выполнении операции перемещения клавиша Ctrl не нажимается.
В том случае, если объект копируется на дискету, бывает удобно воспользоваться пунктом Отправить – Диск 3.5(А) контекстного меню объекта. При выполнении данной операции на экране в графическом виде отображается процесс копирования
Для выполнения операции переименования после выделения объекта необходимо:
· выбрать команду горизонтального менюФайл – Переименовать, в появившейся рамке ввести новое имя объекта и нажать клавишу Enter;
· использовать пункт Переименовать контекстного меню объекта;
· щелкнуть левой кнопкой мыши на имени выделенного объекта, после чего в рамке текстового поля ввести новое имя.
Для выполнения операции удаления необходимо выделить объект или группу объектов и выбрать команду горизонтального менюФайл – Удалить, либо пункт меню Удалить контекстного меню, либо щелкнуть на кнопке панели инструментов, либо нажать клавишу Delete. Затем в диалоговом окне Подтверждение удаления следует подтвердить удаление щелчком на кнопке
, после чего объект будет помещен в специальную папку Корзина.
Корзина представляет собой папку ограниченных размеров, в которой временно находятся удаленные объекты. Ошибочно удаленный объект можно восстановить, открыв окно Корзины и выбрав команду Файл – Восстановить или пункт Восстановить контекстного меню объекта, при этом объект восстанавливается в ту же самую папку, из которой был удален.
В том случае, если предполагается удалить из Корзины выборочно один или несколько объектов, их следует выделить и выбрать команду Файл – Удалить или пункт Удалить контекстного меню этих объектов. Для окончательного удаления всех объектов из Корзины необходимо выбрать команду Файл – Очистить Корзину и в диалоговом окне Подтверждение удаления щелкнуть на кнопке . Объекты, удаленные из Корзины, в дальнейшем восстановить невозможно.
Очистку Корзины можно производить также в ее закрытом состоянии, выбрав в контекстном меню значка Корзины на Рабочем столе пункт Очистить Корзину. Кроме того, пункт Свойства открывает диалоговое окно свойств Корзины, в котором установка флажка Уничтожать файлы сразу после удаления позволит удалять объекты, минуя Корзину.
Объекты, удаленные с дискеты, в Корзину не помещаются, а сразу удаляются окончательно без возможности их последующего восстановления.
Источник