Jump to content
Compvision.ru

Pavia00

Пользователи
  • Content count

    102
  • Joined

  • Last visited

  • Days Won

    15

Everything posted by Pavia00

  1. Это меняет задачу. В 3 строчки не сделать. Но прежде хочу сказать, следующее вам нужны именно Безье. Кривая Безье - это система из 2-х кубических полиномов. В противном случае будете иметь вот такие вот проблемы https://forum.sources.ru/index.php?showtopic=416325&st=0&#entry3815075 Что касается вашей задачи. Набор данных надо сгладить и вычислить производную найти участок с не более 2-мя изменениями знака производной. Остальные выкинуть. Использовать метод вернее эвристику максимального правдоподобия для улучшения МНК.
  2. Да и самому не трудно написать. // МНК для полинома B[0]+B[1]*x+B[2]*x^2+...+B[p]*x^p=y // p -степень полинома // Входные параметры: // - точки в виде масивов их координат x,y // - степень желаемого полинома p // Выходные параметры: // - коэффициенты полинома B procedure PolyFit(y,x:TArrayReal; p:Integer; var B:TArrayReal); var a,at,temp:TMatrixNM; Temp2:TMatrixNN; i,j,N:Integer; c:Real; begin if (Length(y)<>Length(x)) or (p<0) then exit; N:=Length(Y); // Минимизация коэффициентов полинома методом наименьших квадратов. // Строим матрицу Вандерморда SetLength(A,N,p+1); for i:=0 to N-1 do begin c:=1; for j:=0 to P do begin a[i,j]:=c; c:=c*x[i]; end; end; // Применяем метод Moore–Penrose at:=Transpose(A); Temp2:=MatrixMulMatrix(At,A); Temp:=Invert(Temp2); B:=MatrixMulVector(MatrixMulMatrix(Temp,At),Y); end;
  3. Нету, так как такая операция для кривовй уже на 5-7 степени упирается в точность Single. По этмоу лучше использовать сплайны и кривые Безье. Что есть в OpenCV? Строим контур цепным кодом из него, получаем полигон путем оптимизации approxpolydp https://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#approxpolydp Тут лучше староннее что-то использовать к примеру https://www.alglib.net/translator/man/manual.cpp.html#sub_spline1dfitpenalizedw И для полиномов там тоже есть https://www.alglib.net/translator/man/manual.cpp.html#sub_polynomialfit
  4. cvAdaptiveThreshold(src, dst2, 250, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, 1); Если шумы останутся увеличь сигму.
  5. По моему бинаризации неплохо работает.
  6. Фильтрация облака точек

    Я бы вот эти методы попробовал бы. http://ceur-ws.org/Vol-2391/paper23.pdf Медианы она когда у вас много кадров. А тут явно по 1 снимку восстанавливают. Нужно отсеявать по аналогии с мат.морфологий,- если точка имеет более 2-х соседний на расстоянии L то оставляем. Если соседний менее или вовсе, нет то удаляем. Можно ещё как тут. При еденичных и малом числе фото. https://vision.in.tum.de/data/datasets/intrinsic3d Нейронные сети https://vision.in.tum.de/research/image-based_3d_reconstruction/singleviewreconstruction
  7. Если у вас фотошоп то используйте кисть восстановления на номере. А так да обрабатывать его отдельно от машины. Вернее я бы его вовсе нетрогал. Выбрать по порогу яркие кляксы(blobs) заполнить внутренние пустоты матморфологией close. Смешать по маске исходное и фильтрованное. source and mask + filtered and (not mask) Лучше конечно маску размыть(blur) и в качестве альфы использовать в блендинге.
  8. Вот что мне тут гугл подбросил. Там ссылки на несколько десятков проектов. https://github.com/timzhang642/3D-Machine-Learning Я бы использовал угловой детектор и обучил бы классификатор так, что-бы каждый объект со своими углами поворота являлся отдельным классом.
  9. Есть метод BRISK - https://www.robots.ox.ac.uk/~vgg/rg/papers/brisk.pdf Сам не пробовал.
  10. На рисунке слипшиеся объекты. Классическим методом для разделения являются НС. Ещё можно через мат. морфологию оператор открытия - open . Ещё можно искать углы и восстанавливать четвёртый по трём другим. Через детектор особых точек(ищем углы). А далее школьная классика перебор точек через 3-и цикла и поиск прямоугольных треугольников.
  11. MIPI CSI-2 это стандарт шины. Тот который идёт от кристалла матрицы и он выдаёт 500 МБит/с не больше. 2592 px x 1944 px х8 бит= 40 Мбит 500/40=12٫5 кадров. Что бы обеспечить заявленные 60 камера выполняет сжатие. Просто оно минимальное по сравнению с остальными. GigE - это IP камера? Скорее нет чем да.
  12. idrua, "человек" - там отлично виден. Чётко видны: глаза, нос, рот - но это обычные jpeg артефакты. Взять траву или песок и там найдётся куча таких же литц. Конечно тут видны руки и шея. Но самом деле это известная фотография, одной фирмы по OCR, с демонстрацией бликов. - человек тут отсутствует. Мы не видим водителя значит и пассажира видеть не должны, следовательно это блик.
  13. На фото Вольво XC90. Россия
  14. Я бы классификатор на тренировал.
  15. Одназначно надо. Дисторсия она всегда большая. Да и углы тоже уплывут из-за афинных преобразований. Не говоря про перспективу. В opencv заложенно решение только для шахмотной доски.
  16. Железо. orange pi pc - оптимизированы для снежения энергопотребления. Поэтому скорости от них ждать не стоит. Что касается 64-битных процессоров то при одинаковой частоте они в 2 раза медленее по умножению. В среднеем по остальным командам на 30-50% медлее чем 32 бита. Вот если бы вы использовали криптографию тогда выигрышь возможен. Fpga сравнимый с pi вам обойдётся в 10 раз дорожи 150-300$. Dsp - как правило заточены под радио и звук. В таких платах просто нехватает памяти и производительности. Нужны специальные видеопроцессоры. А они как правило очень дорогие. Есть ещё процессоры для видеорегистраторов. 4 раз быстрее чем CPU - pi. Одна беда close hardware. Через несколько лет возможно появятся как открытые. Так что после pi берём дешовый комп i3 за 250-300 баксов. И если надо то видеокарту. Или б/у ноутбук, комп можно сэкономить. Код. Вам однозначно надо оптимизировать. Расчёт углов это медленная операция. А вот прр GPU - отпишитесь как удалось завести его или нет?
  17. Почитайте как правильно задавать вопросы. http://www.rsdn.org/Info/howtoask.xml Так как из вашего описания непонятно, что вы хотите? Какую задачу хотите решить? Поэтому и непонятно что отвечать. Вместо описания того, что вы делали вы должны были сказать, что вы хотите получить. Что касается разделения. То есть такая вещь как кляксы Blobs и контуры Conturs. Есть структуры, вернее классы которые их описывают. К примеру контуры описывают цепным кодом. А для клякс обычно матрица закрашенная номером кляксы. Вот используя такие алгоритмы, которые по вашим данным построят эти структуры и по ним вы можете определить моменты и/или координаты своих объектов. А когда найдёте координаты своих объектов далее уже определяйте к какому классу фигур(объектов, изображений) они относятся. Распознавание решается перебором и только перебором. Другое дело что есть ряд оптимизаций: пропуск белых пикселей, пирамида изображений с переходом на более высокий уровень, работа только там где есть особые точки (углы, контуры и др). ещё есть каскады и куча других методов для ускорения перебора.
  18. FPGA это не паноцея. 66 умножителей конечно много, но частота маленькая. Да и задействовать их непросто. По сравнению с DSP процессорами. При тойже цене, FPGA раза в 4 быстрее. Но сейчас взять что-то подороже непроблема.
  19. Проекция --> в 3D

    Обратное преобразование к проекции не имеет однозначного отображения. А если зафиксировать Z. То мы получим аффинное(матричное) преобразование.
  20. Аналог ф-ии bwareaopen MatLab

    Так как IplImage унаследован от Mat то можете смела его использовать как матрицу. Прямое и обратное преобразование будет происходить автомотически. Чтобы явно написать можно сделать так. //Преобразование из IplImage в CvMat, без копирования данных. CvMat cvmat = image; // convert cv::Mat -> CvMat Что касается обратного, то тогда если используете явное преобразование, то надо будет приляпать заголовок. IplImage stub, *dst_img; dst_img = cvGetImage(src_mat, &stub);
  21. Аналог ф-ии bwareaopen MatLab

    Разница в семантике. 1) Для того что-бы другие люди могли вас правильно понимать вы должны осмысленно давать имена переменным, классам. 2) Разделяй и властвуй. Для архитектуры важно разграничивать разные блоки. Так вот есть два различных понятия матрица и изображения. Матрица это математическое понятие и к графике оно не имеет отношения. Но над матрицами определены операции сложения умножения, собственные вектора и тд. Над изображением определены другие операций перевод в градации серого, оператор границ. Правильнее использовать IplImage*Image=cvLoadImage("70.jpg"); cvShowImage("input", image); А если нужно сделать вычитание или сложение, то переводишь в матрицу cv::Mat mat Это культура программирования. И она важна, когда над проектом работает много людей.
  22. Свертка (convolution)

    http://ru.wikipedia.org/wiki/Алгоритм Советую прочитать формальное определение алгоритма. Да, это разные понятия. В математическом смысле функция она шире оператора. Что касается не математического, то не знаю. Если верить википедии, то не любой. Но большинство будут исчислимы. Я бы не сказал что из функции получают ядро. Её просто используют как ядро.
  23. Если взять среднее из 5 и 7 то должна получиться хорошая картинка.
  24. Kinect и карта глубины

    Если нужно среднее так и считай его. cvAvgSdv Если нужно среднее для многих точек то достаточно сделать размытие cv::blur Это быстрее чем интегральное изображение.
  25. Обработка сканов книг

    Есть хорошо известные правила ведения проектов. В том числе и научных. Обычно начинают с поиска аналогов. А вообще по обработке книг очень хорошей сайт. http://www.djvu-soft.narod.ru/ Там найдёте и программы для обзора и методы и и даже часть реализаций. А возможно вам даже не придётся писать и вы возьмёте одну из существующих программ.
×