Сегментация изображенийСайт курса:http://cvbeginner.blogspot.com/1
Из прошлой лекции…Цветовые моделиГистограммаМасочные операцииТипы шумовТипы фильтров от шума2
Пример сегментации3
Где используетсяМедицинаОбработка космических снимковВекторизация изображений4
ЗадачаРазделить изображение на области связанные между собой по определенным признакамЧасто сегментация зависит от задачи5
Типы сегментацииБинарнаяОбластиПримитивыВопрос: Как бы вы сформулировали что такое хорошая сегментация?6
Хорошая сегментацияОбласти сегментированного изображения должны быть однородны по некоторому признакуВнутренние части сегментированных областей должны иметь простую форму и не содержать большого количества мелких отверстийСмежные сегменты должны существенно отличаться по выбранному признаку7
ПространстваЧтобы разделить изображение на области нам нужно выбрать признаки по которым будем делить.Вопрос: Какие пространства можно использовать?8
ПространстваЯркостьЦвет (RGB,HSV другие)Текстурные признакиПространственные связи…9
Цветовое пространствоRGBHSV10
Текстурные характеристикиЭнтропияЭнергияИнерцияЛокальный диапазон11
Локальный диапазон12
Энтропия13
МетрикиМанхеттен (L1)Эвклида (L2)Есть еще метрики…14
Бинарная сегментацияРазделить на два класса: обычно объект фонОбычно выбирается порог l из промежутка [0..255]Если значение яркости пикселя больше порога то присваиваем значение 1, иначе 015
Пример разные пороги16
РеализацияMatlabBW = im2bw(I,0.5)OpenCVthreshold(Входное изображение, Выходное изображение, Порог, 255, Тип порога);17
Тип порога в OpenCV18
Мяч19
Бинаризация на основе гистограммыХотим сделать автоматический выбор порогаДля этого можно использовать статистикуПростой анализМетод Otsu20
Простой анализ гистограммыСгладить гистограмму найти два максимумаНайти минимум между ними21
Простой анализ гистограммыL1 = max(hist(1:120));L2 = max(hist(120:255));T = min(hist(L1:L2));22
Метод OtsuИдеяГистограмма содержит две модыОптимальный порог - минимальная взвешенная сумма внутригрупповых дисперсийMatlabThreshold(Исходное, Результат, 0, 255, THRESH_OTSU);OpenCVgraythresh(I)23
Метод OtsuАлгоритмГде H(i) гистограмма,        дисперсия первой моды распределенияРешается перебором или через полную дисперсию24
Метод OtsuИллюстрация25
Не всегда работает26Неравномерность освещения
Адаптивная бинаризацияДля окрестности R пикселя I(x,y) вычисляется порог TЕсли I(x,y) > T + C, то B(x,y)=1 иначе B(x,y) = 0T – среднее по области RT – медианнаT – (max – min)/2C – произвольная константа27
Различные параметры28
ИмплементацияOpenCVadaptiveThreshold(Исходное изображение, Выходное изображение, 255, алгоритм выбора T, THRESH_BINARY, Размер окна, константа)29
КластеризацияРазделение пространства на несколько однородных зонВопрос: Как выбрать количество кластеров?30
K-means (К средних)Выбираем случайно K точек в нашем векторном пространствеДля всех точек из выборки приписываем их к классу к которому они ближе всегоПересчитываем центры кластеровна шаг 2Останавливаемся, когда смещения всех центров масс меньше порога или истекло кол-во итераций31Matlab: Demo
K-means 6 классов32Matlab: Demo
РеализацияMatlabKmeans(M,k)OpenCVKMeans233
ПерерывВопросы34
Метод Оландера35
В чем минусы?Работает плохо в случае большого количества мелких объектовНе работает на сильно текстурированных объектах36
Методы основанные на разбиении графа Изображение – граф (V-его элементы, E - дуги)Разрез графаЗадача: Минимизировать разрез графа37
Методы основанные на разбиении графа 38
Методы основанные на разбиении графа X(i) – место расположение узла IF(i) – вектор признаковДля полутоновых изображений F(i) = I(i)Для цветных F(i)=[v,v*s*sin(h),v*s*cos(h)](i), где h,s,v – цветовая кодировка HSV39
Результат40Demo: Matlab
GrabCut [Rother, Kolmogorov Siggraph’04]41
МинусыМинусыТребует пользователяПлюсыКачественная сегментация42
РеализацияOpenCVgrabCut(Входное изображение, маска в которой выделены области принадлежащие объекту и фону, прямоугольник внутри которого содержится объект, Выходная маска фона (можно подавать существующую для уточнения), Выходная маска переднего плана, К-во итераций, Режим см. док)См. пример samples/grabcut.cpp43
Выделение краевЗадача:Выделить точки по которым проходит разрыв яркостиПрямое решение:Взять градиент, например оператор prewittи потом выделить по порогуВопрос: чем такое решение плохо?44
Толстая линия разрыва45
Связанность областей46
Детектор краев Кенни (Canny)47
Параметры АлгоритмаРазмер ядра ГауссаThВерхний порогTlНижний порог (обычно Tl=Th/2)48
Шаги алгоритмаСгладить изображение ГауссомВычисляем направление градиента и силу градиентаУтончаем границы (supress_nonmaxima)Следуем вдоль границ49
Утончение границы (supress_nonmaxima)Если по направлениям градиента (+,-) существует значение с силой больше чем в интересующей точки, то  обнуляем точку50Вопрос: Почему по направлению градиента а не по области?
Следовать вдоль границИщем во всем изображении точки, в которых сила градиента больше порога ThНайдя такую точку идем помечаем ее как точку контура и проверяем соседние точкиЕсли есть точки больше порога Tlто переходим в эту точку (шаг 2)51
РеализацияMatlabBW = edge(G,’canny’);OpenCVvoid Canny(Серое входной изображение, Выходной бинарное изображение, порог Th, Порог Tl,Размер аппретуры, Метрика вычисления градиента)52
Обнаружение прямыхЗадача обнаружить прямы на изображенииВопрос: Чем плох прямой подход как в операторе Кенни?53
Преобразование Хафа (Hough)Идея:Перевести черно-белое изображение в пространство параметров прямойСоздать новое изображение с параметрами угол и расстояние 54
Преобразование Хафа (Hough)for i=1:N	for j=1:Mdi=rowgrad(I,i,j) dj=colgrad(I,i,j)θ=atan2(di,dj) //Угол         r = |i*cos(θ)-j*sin(θ)|//Расстояние         A(r, θ)+=(|di|+|dj|)/2//Сила градиента   endendA – выходной массив55
Преобразование Хафа (Hough)56
Преобразование Хафа (Hough)57
РеализацияMatlab[H,theta,rho] = hough(BW);P = houghpeaks(H)lines = houghlines(BW,theta,rho,P…)OpenCVHoughLines(бинарное изображение, выходной вектор из прямых, шаг дискретизации расстояния, шаг дискретизации угла, порог .. )58
Вопросы59

Лекция 3 Сегментация