Ответ 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: его цена