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

slicktail

Пользователи
  • Количество публикаций

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

  • Посещение

  • Days Won

    1

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

  1. Использую Opencv 2.3 и класс Mat. Каким образом можно вывести два изображения рядом друг с другом в одном окне? Спасибо.
  2. Еще вопрос, где можно взять набор неректифицированных изображений для теста?
  3. Спасибо, скажите, зачем указывают две карты диспаритета? Насколько я понимаю, карта диспаритета одна строится по двум изображениям. Какую брать?
  4. Подскажите, как можно сравнить disparity maps между собой? Насколько я понимаю, они представляют собой матрицу нормализованную со значениями от 0 до 255 (уже после нормализации). Как можно таким образом сравнить два алгоритма между собой?
  5. А каким образом можно в clr-проекте сделать кнопку, при нажатии на которую бы вызывались все функции, написанные не под win forms? Например, button: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { cv::Mat frame2 = cv::imread("1.bmp",1); cv::namedWindow("My Window", CV_WINDOW_AUTOSIZE); cv::imshow("My Window",frame2); } Появляется окно созданное, и тут же возникает ошибка. "External component has thrown an exception."
  6. Работа с контурами

    Сравниваю изображения при помощи моментов. 1.Черный квадрат 8х8 (все пиксели со значением 0) 2.Белый квадрат 8х8 (все пиксели со значением 255) 3.Черный квадрат 8х8 с белыми пикселями (пиксели со значением 0, немного 255 значений) На 1 больше всего похоже изображение 3. В этом можно убедиться, если сравнить попиксельно их (см моменты m00 - это и есть сумма пикселей). Как видно, моменты изображения 3 меньше моментов изображения 2. Но как только дело доходит до нормализованных моментов и моментов Ху, то на изображение 1 более похожим становится изображение 2, хотя это очевидно не так. Прошу совета, где здесь подводный камень. Моменты Черный квадрат 8х8 Белый квадрат 8х8 Черный квадрат 8х8 (немного белых пикселей) m00: 0.00000000000000000 m00: 16320.000000000000 m00: 66.000000000000000 m10: 0.00000000000000000 m10: 57120.000000000000 m10: 201.00000000000000 m01: 0.00000000000000000 m01: 57120.000000000000 m01: 66.000000000000000 m20: 0.00000000000000000 m20: 285600.00000000000 m20: 813.00000000000000 m11: 0.00000000000000000 m11: 199920.00000000000 m11: 201.00000000000000 m02: 0.00000000000000000 m02: 285600.00000000000 m02: 66.000000000000000 m30: 0.00000000000000000 m30: 1599360.0000000000 m30: 3747.0000000000000 m21: 0.00000000000000000 m21: 999600.00000000000 m21: 813.00000000000000 m12: 0.00000000000000000 m12: 999600.00000000000 m12: 201.00000000000000 m03: 0.00000000000000000 m03: 1599360.0000000000 m03: 66.000000000000000 mu20: 0.00000000000000000 mu20: 85680.000000000000 mu20: 200.86363636363637 mu11: 0.00000000000000000 mu11: 0.00000000000000000 mu11: 0.00000000000000000 mu02: 0.00000000000000000 mu02: 85680.000000000000 mu02: 0.00000000000000000 mu30: 0.00000000000000000 mu30: 0.00000000000000000 mu30: 47.603305785124121 mu21: 0.00000000000000000 mu21: 0.00000000000000000 mu21: 0.00000000000000000 mu12: 0.00000000000000000 mu12: 0.00000000000000000 mu12: 0.00000000000000000 mu03: 0.00000000000000000 mu03: 0.00000000000000000 mu03: 0.00000000000000000 nu20: 0.00000000000000000 nu20: 0.00032169117647058818 nu20: 0.046111945905334344 nu11: 0.00000000000000000 nu11: 0.00000000000000000 nu11: 0.00000000000000000 nu02: 0.00000000000000000 nu02: 0.00032169117647058818 nu02: 0.00000000000000000 nu30: 0.00000000000000000 nu30: 0.00000000000000000 nu30: 0.0013451703132773241 nu21: 0.00000000000000000 nu21: 0.00000000000000000 nu21: 0.00000000000000000 nu12: 0.00000000000000000 nu12: 0.00000000000000000 nu12: 0.00000000000000000 nu03: 0.00000000000000000 nu03: 0.00000000000000000 nu03: 0.00000000000000000 Моменты ХУ [0]: 0.00000000000000000 [0]: 0.00064338235294117635 [0]: 0.046111945905334344 [1]: 0.00000000000000000 [1]: 0.00000000000000000 [1]: 0.0021263115551764808 [2]: 0.00000000000000000 [2]: 0.00000000000000000 [2]: 1.8094831717226144e-006 [3]: 0.00000000000000000 [3]: 0.00000000000000000 [3]: 1.8094831717226144e-006 [4]: 0.00000000000000000 [4]: 0.00000000000000000 [4]: 3.2742293487473322e-012 [5]: 0.00000000000000000 [5]: 0.00000000000000000 [5]: 8.3438790131086014e-008 [6]: 0.00000000000000000 [6]: 0.00000000000000000 [6]: 0.00000000000000000
  7. Работа с контурами

    Вот ответ на мой вопрос: "Mat-s should be of type either CV_32SC2 or CV_32FC2 and have dimention 1xN or Nx1; this is because contour is a sequence of Points, i.e. a single row or a single column of X & Y pairs."
  8. Работа с контурами

    Хотел бы сравнить два изображения при помощи matchShapes Mat image = imload("image.jpg"); Mat grey_scale = cvtColor(image,grey_scale,CV_RGB2GRAY); matchShapes(grey_scale,grey_scale,CV_CONTOURS_MATCH_I1,0); Получаю Unhandled exception А в описании написано: double matchShapes(InputArray object1, InputArray object2, int method, double parameter=0 ) Parameters: object1 – First contour or grayscale image. object2 – Second contour or grayscale image. Если же указывать вместо Mat контуры, то все отлично. Посоветуйте, в чем может быть загвоздка?
  9. Работа с контурами

    С другой стороны, вообще-то нигде не говорится, что это контуры. Ну это ж также, центр масс изображения и т.п. - моменты же это и обозначают. Матрица - это изображение. Мне кажется можно и использовать моменты для grayscale
  10. Работа с контурами

    Вот, получается данную матрицу 8х8 нужно бинаризовать? Содержит она значения пикселей яркости от 0 до 255
  11. Работа с контурами

    А зачем тогда есть возможность вычислять момент матрицы? Может быть эта функция считает контур матрицы и находит именно момент этого контура?
  12. Работа с контурами

    Смысл в том, чтобы сравнивать блоки не при помощи метрики SSD или SAD. А вычислить моменты двух блоков, и сравнить их.
  13. Работа с контурами

    "Parameters: C++: Moments moments(InputArray array, bool binaryImage=false ) array – Raster image (single-channel, 8-bit or floating-point 2D array) or an array ( or ) of 2D points (Point or Point2f ). binaryImage – If it is true, all non-zero image pixels are treated as 1’s. The parameter is used for images only. moments – Output moments." Получается, в OpenCV для матрицы 8х8 нельзя посчитать момент? А что тогда это считает у меня данная функция?
  14. Работа с контурами

    Продолжу тему с моментами в Opencv. Допустим, есть две матрицы 8х8 с числами от 0 до 255. Задача - вычислить моменты такой матрицы и сравнить их. Mat M_Block_yPrev(8,8,CV_8UC1); Moments moments_Block_yPrev = moments(M_Block_yPrev,false); double Hu_moments_Block_yPrev[7]; HuMoments(moments_Block_yPrev,Hu_moments_Block_yPrev); В moments_Block_yPrev и Hu_moments_Block_yPrev я получу данные. Для второй матрицы - аналогично. Теперь, каким образом сравнить моменты двух матриц с помощью matchShapes() ? Спасибо.
  15. Получил матрицу векторов объектов движения. Хотел бы объединить вектора движения посредством кластеризации, например k-means. Кто-либо делал такое под OpenCV? Мне показались для моей задачи слишком навороченными функции в OpenCV (в разделе ml. Machine Learning). "You may want to look at MeanShift clustering which has several advantages over K-Means: Doesn't require a preset number of clusters K-Means clusters converge to n-dimensional voronoi grid, MeanShift allows other cluster shapes" Как можно просто сгруппировать в кластеры схожие значения из матрицы посредством OpenCV? Интересует какой-нибудь пример кода из вашей задачи.
  16. Сравнение двух кадров видео

    Использую OpenCV 2.3 и C++ Каким образом получить доступ в одном цикле к двух последовательным кадрами видеопоследовательности? VideoCapture capture("C:\\ice_cif.avi"); double rate= capture.get(CV_CAP_PROP_FPS); int delay= 1000/rate; Mat frame; namedWindow("frame"); bool stop(false); while(!stop){ if(!capture.read(frame)) break; for(int c=0;c<frame.cols;c+=16) for(int r=0;r<frame.rows;r+=16) { //здесь и ко второму кадру обратиться line(frame,Point(c,r),Point(c,r),(60,80,120),1,1,0); } imshow("frame",frame); if(waitKey(delay)>=0) stop = true; } capture.release();
  17. Сравнение двух кадров видео

    Разобрался в итоге, может кому пригодится: int main() { VideoCapture capture("C:\\ice_cif.avi"); double rate= capture.get(CV_CAP_PROP_FPS); int delay= 1000/rate; Mat currFrame; Mat prevFrame; namedWindow("currFrame"); namedWindow("prevFrame"); capture.read(currFrame); currFrame.copyTo(prevFrame); bool stop(false); while(!stop){ if(!capture.read(currFrame)) break; imshow("currFrame",currFrame); imshow("prevFrame",prevFrame); currFrame.copyTo(prevFrame); if(waitKey(delay)>=0) stop = true; } capture.release(); }
  18. Сравнение двух кадров видео

    Block Matching Algorithm Самый простой метод - FSA (Full Search Algorithm). Непонятно, как попиксельно сравнить два кадра в OpenCV без функций OpenCV на весь кадр. (хотел реализовать свой метод).
  19. Сравнение двух кадров видео

    Мне не нужны функции OpenCV(cvAbsDiff или cvReduce). Представьте, что я хочу реализовать один из методов BMA. А это значит попиксельная обработка двух последовательных кадров.
  20. Сравнение двух кадров видео

    В принципе, я взял тестовое видео, в .y4m. Сохранил его в .avi с помощью VirtualDub в несжатом виде. Буду признателен, если покажете, как в OpenCV два последовательных кадра сравнить.
  21. Сравнение двух кадров видео

    Цель - сравнить два последовательных кадра поблочно в одном цикле.
  22. Несжатое видео в OpenCV

    Возник вопрос. Каким образом открыть, или получить доступ с несжатому видео в OpenCV? Вот здесь указывают, что для этого у файлов *.y4m нужно удалить заголовок. Кто-нибудь сталкивался с таким?
  23. Несжатое видео в OpenCV

    Действительно, проще оказалось воспользоваться фреймсервером Avisynth. Кидаем в папку с плагинами плагин rawsource.dll Пишем скрипт: RawSource("C:\soccer_cif.y4m") Открываем его в VirtualDub. После чего сохраняем видео в avi: Video->Direct stream copy.
  24. Продолжу тему. В OpenCV реализованы моменты Ху. Насколько я выяснил: "Продолжением было опробование других множеств полиномов в качестве базисных функций. Ч. Х. Тех и Р. Т. Чин предложили в качестве базисных функций использовать ортогональные полиномы псевдо- Зернике и полиномы Лежандра [Teh & Chin, 1988], Ю. Шенг и Л. Шен ввели ортогональные моменты Фурье-Меллина [sheng & Shen, 1994], Р. Мукундан и др. предложили моменты на основе полиномов Чебышева [Munkundan et. al., 2001], П.Т. Яп и др. предложили использовать моменты на основе полиномов Кравчука [Yap et. al, 2003], Х.К. Жу и др. ввели в обращение моменты Рака [Zhu et. al., 2007]." Источник Ссылка Вот человек пытается реализовать моменты Зернике в OpenCV: Ссылка Насколько это правильно, реализовывать для своей задачи методы моментов, приведенные выше? Моя подзадача стоит именно в новизне (хоть какой-то) моментных методов, применительно к нахождению инвариантного ансамбля векторов движения. Грубо говоря, машинка на видеопоследовательности повернула на какой-то угол, а тут я кадр проанализировал моментами, и отследил ее. Вопрос, стоит ли реализовывать существующие новые методы моментов в OpenCV, если да, то какие?
  25. Зачем здесь WaitKey, вывод ведь на форму осуществляется? Да и до этого не доходит, изображение считать не получается во frame.
×