Подтвердить что ты не робот

Почему Matlab так популярен в сообществе компьютерных виджетов, даже когда OpenCV является настолько полным?

Я заметил, что Matlab очень популярен среди сообщества разработчиков компьютеров и обработки изображений по сей день, хотя OpenCV - очень зрелый пакет для С++. Я никогда не использовал Matlab, но, глядя на него, я не вижу никаких преимуществ перед OpenCV на С++. Это так часто используется, однако, что я собираюсь собрать его.

Почему он так популярен среди этой толпы? Каковы его преимущества перед OpenCV?

4b9b3361

Ответ 1

Я студент-программист в области компьютерного зрения, и я уже ответил на вопрос о сравнении между Matlab и python для ученых в этом вопросе: Что такое MATLAB? Почему он так используется университетами? Когда это лучше, чем Python?

Я обновлю свой ответ для сравнения между Matlab и opencv для компьютерного зрения:

Я использовал код только с С++/OpenCV некоторое время назад, но с самого начала моего phD (3 года вперед) я кодирую только в Matlab. поэтому я хорошо знаю тему.

Есть одна причина, почему Matlab настолько хорош и так широко используется по сравнению с opencv:

ЧРЕЗВЫЧАЙНЫЙ БЫСТРЫЙ КОДИРОВАНИЕ

Лично я кодирую примерно в 10 раз быстрее в matlab, чем в OpenCV/С++, и в конце есть намного меньше ошибок.

1) Компьютерное зрение Исследователи нуждаются в быстром прототипировании

В исследовательской среде у нас (надеюсь) часто появляются новые идеи, и мы хотим проверить их на самом деле быстро, чтобы увидеть, стоит ли продолжать в этом направлении. И чаще всего только крошечная часть того, что мы кодируем, будет полезна. Более того, часто невозможно заранее догадаться, будет ли идея работать или нет.

Matlab часто немного медленнее во время выполнения, а opencv, безусловно, является самым быстрым для времени выполнения, но нам все равно. Поскольку мы не знаем заранее, какой метод будет успешным, мы должны попробовать много вещей, поэтому наша бутылочная шея - это время программирования, потому что наш код будет чаще всего запускаться несколько раз, чтобы получить результаты публикации и все.

Итак, посмотрим, как Matlab может помочь улучшить время программирования.

2) Все, что мне нужно, уже есть

У Matlab действительно много функций, которые мне нужны, поэтому мне не нужно постоянно изобретать их:

измените индекс матрицы на 2d-координату: ind2sub извлеките все патчи изображения: im2col; вычислить гистограмму изображения: hist(Im(:)); найти уникальные элементы в списке unique(list); добавить вектор ко всем векторам матрицы bsxfun(@plus,M,V); свертка на n-мерных массивах convn(A); вычислить время вычисления подчасти кода: tic; %%code; toc; графический интерфейс для обрезки изображения: imcrop(im);

Список может быть очень длинным... И их очень легко найти, используя справку.

Однако, учитывая чистые функции компьютерного зрения, я думаю, что основной Opencv немного более исчерпывающий, чем matlab plus toolboxes. Но сегодня многие исследователи публикуют свой исходный код в Matlab, что, если вы хотите протестировать последнее открытие, вам в основном нужно использовать matlab.

3) Нет особых проблем на С++

Не нужно выделять и освобождать память. Matlab делает это для вас, поэтому вы можете сосредоточиться на своей работе.

Нет переполнения буфера. Поэтому больше не нужно пытаться выяснить, где он сбой. Matlab автоматически останавливается и сообщает, где код пытается получить значение вне диапазона матриц.

Нет времени компиляции...

Нет заголовка для записи...

4) IDE

Пример: я запускаю script. Это вызывает ошибку из-за матрицы. Я все еще могу выполнить код с командной строкой. Я визуализирую его: imagesc(matrix). Я вижу, что последняя строка матрицы является странной. Я исправляю ошибку. Все переменные все еще установлены. Я выбираю оставшийся код, нажмите F9, чтобы выполнить выбор, и все будет продолжаться. Отладка быстро становится.

Matlab подчеркивает некоторые мои ошибки перед выполнением. Поэтому я могу быстро увидеть проблемы. Он предлагает некоторый способ ускорить мой код.

С OpenCV/С++/Visual Studio, я могу отлаживать. Но этот отладчик не позволяет мне выполнять код во время отладки, поэтому я не могу, например, визуализировать матрицы и т.д. Поэтому на практике мне нужно скопировать какой-нибудь код в дамп-матрицы, чтобы проверить где ошибка. Это очень болезненно.

В среде IDE есть удивительный профилировщик. KCahcegrind для С++ - такая боль, чтобы использовать по сравнению с этим.

Я написал там больше: Есть ли альтернативные редакторы для .m файлов?

5) Краткий код

Matlab-код является более consize, что означает, что проще отлаживать, читать, понимать и: код выглядит как мои формулы.

Чтобы нормализовать все столбцы матрицы (что мне нужно все время), я делаю: bsxfun(@times,A,1./sqrt(sum(A.^2)))

Чтобы удалить из матрицы все столбцы с малой суммой:

A(:,sum(A)<e)=[]

Выполнение вычислений на графическом процессоре:

gpuX = gpuarray(X); 
%%% code normally and everything is done on GPU

Чтобы парализовать мой код:

parfor n=1:100
%%% code normally and everything is multi-threaded

Какой язык может побить это?

И, конечно, мне редко приходится создавать циклы, все включено в функции, которые упрощают чтение кода, а головная боль с индексами. Поэтому я могу сосредоточиться на том, что я хочу запрограммировать, а не на том, как программировать его.

6) Инструменты для построения чертежей

Matlab славится своими инструментами рисования. Они очень полезны. OpenCV имеет только основные функции построения.

7) Отличная документация

И очень легко получить его, набрав doc

PS: И что я ненавижу с помощью Matlab: его цена

Ответ 2

API С++ для OpenCV является довольно новым. Кроме того, у него было много ошибок, когда он вышел, теперь он более сглажен. До этого, с C API, было довольно больно писать код с OpenCV. Например. у вас не было бы легкого доступа к ячейкам матрицы, была бы дифференциация между IplImage и другими матрицами, и не было матричных выражений.

Я думаю, что это основная причина, по которой большинство людей в компьютерном зрении все еще придерживаются идеи "Matlab для быстрого развития". Верно, что для большинства задач cv в настоящее время на С++ и OpenCV не требуется гораздо больше времени и больше нагрузок или больше строк кода, чем в Matlab.

Однако есть больше причин использовать Matlab, чем это:

  • Matlab поставляется со всей инфраструктурой графического интерфейса пользователя, где очень легко проверить ваши переменные, матрицы, графики и всевозможные материалы. Отладка также проще из-за интерпретации языка.
  • У Matlab есть кое-что в панелях инструментов, которые все еще отсутствуют в OpenCV, например, в панели инструментов Wavelet.
  • Большинство исследователей не являются хорошими программистами на C++. Это правда. Как правило, они в лучшем случае являются посредственными программистами на C++. И это приводит к ошибкам или неожиданному поведению и т.д. Так легко попасть в ловушки с С++, если вы не эксперт. Оператор OpenCV странный = перегрузка ему не помогает. И тогда они скажут, что в Matlab им нужно меньше времени, чтобы добиться результата и работать.

Я хотел бы добавить, что мне очень жаль, что целая исследовательская группа придерживается частной среды, где доступны свободные и хорошие альтернативы.

Ответ 3

Matlab подходит для исследователей компьютерного зрения, он имеет огромные алгоритмы, которые экономит много времени исследователей; когда вы реализуете новый алгоритм, вы также обнаружите, что Matlab экономит ваше время, чем OpenCV. Но Matlab не очень хорош, если производительность - это ваша важная проблема.

Преимущество OpenCV заключается в том, что он высоко настраиваемый, а производительность хорошая благодаря встроенному C/С++.

Если вы делаете продукт, связанный с видением компьютера, или вам нужно обработать много изображений за короткое время, другими словами, производительность имеет решающее значение, тогда вы должны использовать OpenCV.

Если вы занимаетесь исследованиями по новому алгоритму визуализации или изображения, а производительность не вызывает беспокойства, выберите Matlab.

Ответ 4

У Matlab есть не только возможности обработки изображений, но и математические функции, которые на С++ вам придется подключать к другим библиотекам (и, когда вы занимаетесь обработкой изображений, очень важны математические библиотеки).

Ответ 5

Matlab на порядок быстрее во времени разработки по сравнению с С++. Я не могу сказать точное число, но любой, кто испытал на обоих языках, будет поддерживать заявку.

Если вы хотите поиграть с алгоритмами, если Matlab обладает необходимыми функциями, он сразу же выбирается над С++.