Перейти к содержимому
Compvision.ru

Smorodov

Главные администраторы
  • Количество публикаций

    3 873
  • Зарегистрирован

  • Посещение

  • Days Won

    346

Все публикации пользователя Smorodov

  1. Это число выражает степень схожести изображения под признаком и самим признаком, наибольшее число будет если признак наложен сам на себя. Если глаза темнее щек, какая тут абстракция ? тут откликнется вполне конкретный признак (сверху черный, снизу белый).
  2. По поводу изображения в серых тонах. Можно использовать и цветное (гонять по всем цветовым слоям), просто будет в три раза больше вычисленных признаков. Значение признака = сумма всех пикселей под белой областью признака - сумма всех пикселей под черной областью признака. Вообще говоря вы имеете дело с 250000 мерными точками. Некоторые из них, это лицо. Задача классификатора провести гиперплоскость разделяющую лица от не лиц. "Сильные признаки" - это совокупность "слабых" признаков. Прочитайте про статейку про adaBoost в теме которую я упоминал выше. Просмотр идет от ступеней с максимальной вероятностью к уточняющим. То есть идет окно вычисляем признак 1 - прошло, 2 - прошло, 3 - не прошло. отбрасываем - вывод - не лицо. 1 - прошло, 2 - прошло, 3 - прошло, - N - прошло принимаем - вывод - лицо. Обучение одной ступени каскада выглядит примерно так: То же самое, но представьте это в 200 000 мерном пространстве.
  3. Детектор Хаара работает с изображениями в серых тонах, не с цветными. Признаки - это всего лишь правило суммирования пикселей (если пиксель под белой областью + , если под черной - ). Максимальные значения будут если признак наложить сам на себя (попробуйте). Совокупность признаков образует дескриптор, дескриптор является "выжимкой" полезной информации и ее унификацией. Мы не работаем с абсолютными значениями пикселей, а работаем со сжатым описанием области ("верх темнее низа" или "точка на темном фоне"). Это удобно. Да они не 2х2, а могут быть разных размеров. В окошке сканирования размещают все возможные комбинации этих признаков каждый дает числовой отклик. Итого, для каждого положения окна сканирования мы вычисляем числа для каждого признака . Признаков в окне может разместиться очень много каждый в каждой возможно позиции скользящего окна, во всех возможных масштабах, всех возможных типов. Вот для каждого варианта вычисляем число и кладем в вектор дескриптора скользящего окна. После этот вектор идет на обучение классификатора. Именно классификатор после обучения отделяет слонов от лиц. Но если нужны слоны, можно обучить классификатор и для них. В детекторе Виолы Джонса используется каскадная система. То есть "сильные" признаки отсутствие которых сразу с большой вероятностью говорит "это не лицо", приверяются первыми, если они не обнаруживаются, процесс анализа окна прекращается и оно переходит на новую позицию (см. видео выше).
  4. Вот здесь кое что есть: Ну и отвечу на вопросы которые вы задали. Для окошка сканирования 24х24, признаков Хаара, (прямоугольников с белыми и черными областями) может быть, насколько я помню, около 200000. Так вот. Каждая позиция окна сканирования дает нам вектор и 200к чисел. И эти числа являются удобным представлением содержимого окна для дальнейшего анализа. Вычисляются признаки как вы и упоминали, суммируются яркости под светлой частью признаков Хаара и вычитаются не что под темной, это является мерой схожести куска изображения под признаком и этого признака. Для поиска в различных масштабах, мы масштабируем окно сканирования, а не изображение. Чтобы узнать есть ли в окошке лицо, нужно отправить извлеченный вектор признаков на классификатор. В OpenCV используется AdaBoost. Этот классификатор и решает есть лицо или нет в данной позичии окна сканирования. Чтобы это все работало, классификатор вначале обучают.
  5. OpenCV и WinForms

    Попробуйте код отсюда: http://git.net/ml/lib.opencv/2006-04/msg00196.html Правда IplImage и C интерфейс уже очень сильно устарел, OpenCV сейчас работает с cv::Mat и C++ интерфейсом. Скоро IplImage вообще уберут.
  6. OpenCV и WinForms

    Посмотрите в этой ветке:
  7. Если там скрыта синусоида, то надо делать разложение в ряд Фурье. FFT даст пик на частоте синусоиды. Статейка с Хабра: https://habrahabr.ru/post/219337/ Имел дело с подобными кривыми когда измерителем пульса баловался: HartRateMeasure.zip Работа по которой делал: "Non-contact, automated cardiac pulse measurements using video imaging and blind source separation." легко гуглится.
  8. Что то вроде этого: http://stackoverflow.com/questions/21795643/image-edge-smoothing-with-opencv/21801424#21801424
  9. НЕ загружаются изображения imread

    Пробовали изображения бросать к экзешнику и запускать командной строкой из той же папки ? Вообще странно, никогда таких проблем не было, может OpenCV собралось плохо?
  10. НЕ загружаются изображения imread

    А, ок, мой глюк. Путь до изображения указываете полный? Какой формат изображений ?
  11. НЕ загружаются изображения imread

    img_obj и img_s не должны быть одной и той же матрицей. Клонируйте матрицу одну от другой, чтобы data были разные, если A=B то матрицы указывают на те же данные, делайте A=B.clone();
  12. Можно и не выравнивать, а просто швы блендингом замазать. Делаете маску с элементами 0 для первого изображения, 1 для второго, размываете, и получаете результат как res=mask.mul(I_1)+(1-mask).mul(I_2). Нужно делать поканально, все матрицы преобразовать к CV_32FC1. Получим плавный переход в месте стыка.
  13. Ну так можно же фотографию 24 MP уменьшить до 0.3 MP и собрать ту же статистику намного быстрее. Ну или собирать данные с заданным шагом, а не каждый пиксель, а в одной из программ я просто 100000 точек со случайными координатами собирал и по ним кластеры считал.
  14. Взаимодействие Opencv и ToupCam SDK

    В примерах SDK есть пример захвата видео или получения кадра с камеры ? Если есть, то создайте cv::Mat и заполните его данные данными полученными с камеры при помощи SDK. Это будет полезно: http://docs.opencv.org/2.4/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html
  15. Как я понял, в статье по ссылке упоминается как раз подход с k-means сегментацией. Цвета палитры это центры кластеров.
  16. А, наверное я неправильно понял. Посмотрите тогда color dithering , например здесь есть: https://github.com/dpiccone/dithering_algorithms
  17. Подойдет любой кластеризатор, например: kmeans, гауссовы смеси, для особо изощренных, можно использовать нейронные сети.
  18. Объем памяти для CUDA ?

    Так грузите по частям, кусок обработали, загрузили новый.
  19. Понадобился решатель разреженных СЛАУ. Попробовал Eigen (сопряженный градиент) и MATLAB, сравнил по скорости... МАТЛАБ быстрее в 6 раз. Кто нибудь видел быструю либу для таких целей, нормально собирающуюся под виндой? Рыл сеть, нарыл неплохой список: http://www.netlib.org/utk/people/JackDongarra/la-sw.html Но все что пробовал (elemental, MUMPS,PaStiX) требует много танцев. Есть еще cuSparse, но хотелось бы CPU-шный вариант.
  20. Это может быть, может быть на AF можно реализовать быстрый решатель, но изначально, как я понял, AF не математическая библиотека, а скорее подобие stl, и математический функционал на ней нужно реализовывать руками. Тот пример, который я брал, он сильно напрямую реализован, безо всяких стабилизаций, ускорений, учета структуры матрицы, поэтому и работает медленно и неточно.
  21. import cv2 oprncv-шная либа import numpy as np //что за numpy? библиотека работы с матрицами, в питоне нет cv::Mat, там их заменяют матрицы numpy. from matplotlib import pyplot as pl библиотека для отрисовки графиков и изображений. Это питоновские "#include" для С++ хватит и "#include opencv2/opencv.hpp" остальное в питоне и в C++ вариантах очень похоже.
  22. 12 строчек ! За 6 дней можно не то что разобрать пример, но и питон выучить, если есть желание, а если нет, тогда привет.
  23. Я собирал opencv под vs2015 x64, все собирается гладко.
  24. Opencv нормально собирается и в x32 и в x64 конфигурациях солюшн генерируется при помощи CMAKE.
  25. Значит так, ArrayFire, довольно стремная штука, и решает очень медленно, сильно медленнее чем Eigen. Скорее всего это связано с тем, что пример решателя, который я взял самый наипростейший. И еще, в документации и примерах везде инициализация рандомом. Как затолкать и вытащить в массив/из массива то что мне надо я ковырялся целый день. В результате нашел решатель в MKL, пол дня разбирательств с blas-подобными командами, и готово. Решает намного быстрее и стабильнее чем Eigen, примерно как MATLAB. Пример работы с этой штукой у меня на диске лежит здесь: c:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.2.187\windows\mkl\examples\examples_core_c.zip\solverc\source\dss_sym_c.c DSS, насколько я понял это надстройка над PARDISO намного более гибкой штукой, но параметров там сильно больше нужно задавать.
×