Pull to refresh

Comments 19

Для наклонных прямоугольников надо будет сосчитать ещё одно интегральное изображение?
Всё зависит от желаемой точности. Именно для задачки сравнения изображений я не считал ни разу, хватает 6 самых первых в обычной ориентации.
Для распознавания лиц они точность неплохо повышают.
Да, нужно другое интегральное преобразование(впрочем, довольно очевидное), а формула SumOfRect с ним останется такой же.
Коротко и ясно, спасибо.
Сначала прочитал заголовок «использование каскада Хабра». :)
О, круто. Я как раз недавно думал использовать их для детектирования объектов на картинке. Но в итоге пошел в стень Гистограмм Направленных Градиентов (HOG).

Было бы кстати интересно как себя показывает Хаар для сравнения изображений, в сравнении, скажем, с SIFT/SURF, которые обычно для этого используются.
Он, безусловно, значительно хуже точность и изменение геометрии чем SURF и SIFT держит. Но существенный плюс, что он быстрее и значительно проще. Если разработка идёт с нуле и точность SURF не нужна — Haar самое то будет.
По поводу скорости. На сколько я знаю, SURF & SIFT считаются не в каждой точке, а в сосредоточении градиента. На сколько я знаю, с Хааром немного не так. Мы пробегаем по всей картинке и ищем в каждой позиции какую частичку Хаара. Таким образом, выходит ли это быстрее? Черт, теперь чешутся руки проверить. :)
Мы когда-то опробовали SURF & SIFT (правда это было давно, года 4 назад), у нас не очень быстро он работал. В принципе, не исключаю, что там можно сильно оптимизировать, у нас тогда не было цели посмотреть, была цель поиграться:)
Но Хаар хорошо оптимизируется. Можно строить дерево, начиная сравнение с крупных модулей (два примитива на картинку), а когда накапливается расхождение, то переходить к следующей точке. Тогда оно в десятки раз ускориться по сравнению с полным перебором.
О, большое спасибо, это объяснение меня полностью устраивает. Таки может быть и быстрее. Я забыл про то, что можно строить дерево. Хотя все равно интересно сравнить. Я где-то год назад писал распознавание местности с помошью SIFT и мне кажется, что было быстро. Но я не на 100% уверен. Надо откопать код :)
Это дескрипторы SIFT/SURF считаются только в локальных экстремумах градиента, а при поиске этих экстремумов бегаем по всему изображению. Плюс к накладным расходам прибавляйте необходимость матчинга фич между изображениями, а эта операция со сложностью O(n*m) (если считать не приближенные матчи, а перебирать все расстояния между фичами).
Ну и еще надо учитывать, что SIFT/SURF запатентованные алгоритмы — поэтому с их использованием в коммерческих продуктах могут быть сложности.
О, и еще одно. Про интегральные изображения для тех, кто с ними не знаком. Я недавно должен был свою статейку презентовать, где они использовались и для презентации сделал иллюстрацию на пальцах:
integral image


Здесь, например, квадратик А отвечает прямоугольнику того же цвета на оригинальной картинке. И все это дает нам возможность посчитать площадь любого прямоугольника за О(1)
Наглядно! Интегральное представление всё же на редкость полезная штука.
Я ничерта не понял, но вам, парни, респект!
например для центра лица человека будет всегда отрицательна следующая свёртка:

Глаза будут темнее, чем область между ними, так же как область рта будет темнее чем лоб.
Разве всегда?
Осторожно, большие картинки!
Ох тыж чорт. Второе, я думаю, OpenCV-шный поиск лиц не осилит.
Вот такие лица вылезают в Гугле по запросу «face»:) Видимо, никто не пишет «face» к лицу, если это нормальное лицо.
Можно ещё на blackface полюбоваться.
Иллюстрация
image
…и в догонку
image
В большинстве случаев, когда нужно простое сравнение двух достаточно похожих фрагментов изображения его реализуют через их ковариацию (или что-нибудь аналогичное).

Вроде бы это раньше называлось «свёрткой» (convolution). А на ковариацию это не похоже как по формуле, так и по смыслу. Дальше в примере Вы правильно употребляете «свёртка».
В принципе и то и то конечно можно обзывать свёрткой (хотя оно не соответствует математическому определению), но мне хотелось как-то различить эти два процесса, разделив, что «свёртка» — с известной функцией, а корреляция/ковариация — с неким набором точек. Но, походу, получилось не очень.
Only those users with full accounts are able to leave comments. Log in, please.