2012-06-21 37 views
10

Tôi sẽ sớm bắt đầu một dự án Kỹ thuật năm cuối cùng, bao gồm theo dõi thời gian thực các đối tượng di chuyển trên bề mặt 2D. Các đối tượng sẽ được thuật toán của tôi đăng ký sử dụng feature extraction.Theo dõi đối tượng: MATLAB so với Python Numpy

Tôi đang cố gắng thực hiện một số nghiên cứu để quyết định có nên sử dụng MATLAB hay sử dụng Python Numpy (Numerical Python) hay không. Một số trong những yếu tố tôi có tính đến:

1.) Kinh nghiệm

Tôi có kinh nghiệm hợp lý trong cả hai, nhưng kinh nghiệm có lẽ nhiều hơn trong xử lý hình ảnh sử dụng NumPy. Tuy nhiên, tôi luôn thấy MATLAB rất trực quan và dễ nhận.

2.) Real-Time khả năng

Nó là rất quan trọng là lựa chọn của tôi có thể hỗ trợ việc mua lại thời gian thực của dữ liệu hình ảnh từ một máy ảnh bên ngoài. Tôi tìm thấy liên kết này cho MATLAB cho biết cách thực hiện. Tôi chắc chắn rằng điều tương tự sẽ có thể cho Python, có lẽ bằng cách sử dụng thư viện OpenCV?

3.) Hiệu suất

Tôi đã nghe nói, mặc dù không bao giờ được sử dụng, mà MATLAB có thể dễ dàng chia tính toán độc lập trên multiple cores. Tôi nghĩ rằng điều này sẽ rất hữu ích, và tôi không chắc liệu điều tương tự cũng đơn giản như vậy đối với Numpy?

4.) Giá

Tôi biết rằng có một chi phí liên quan với MATLAB, nhưng tôi sẽ làm việc tại một trường đại học và do đó sẽ có quyền truy cập vào MATLAB đầy đủ mà không cần bất cứ giá nào để bản thân mình, vì vậy giá không phải là một hệ số.

Tôi rất cảm kích mọi đầu vào từ bất kỳ ai đã làm điều gì đó tương tự và trải nghiệm của bạn là gì. Cảm ơn!

+2

Về khả năng làm việc sau khi tốt nghiệp, tôi nghĩ Matlab là lựa chọn tốt hơn nhiều nếu bạn dự định thực hành kỹ thuật. –

+2

Tôi nghĩ rằng rất phụ thuộc vào nơi bạn làm việc. Tốt hơn nên biết cả hai. – Benjamin

Trả lời

7

Python (với NumPy, SciPy và MatPlotLib) là Matlab mới. Vì vậy, tôi khuyên bạn nên Python trên Matlab.

Tôi đã thực hiện thay đổi hơn một năm trước và tôi rất hài lòng với kết quả.

Dưới đây là một danh sách pro/con viết tắt của Python và Matlab

ưu Python:

  • Object Oriented
  • Dễ viết lớn và chương trình "thực"
  • Open Source (do đó hoàn toàn miễn phí)
  • Nhanh (hầu hết các thuật toán tính toán nặng có trình bao bọc python để kết nối với các thư viện C ví dụ: NumPy, SciPy, SciKits, libSVM, libLINEAR)
  • Môi trường thoải mái, có thể cấu hình cao (iPython, mô-đun python cho VIM, ...)
  • Cộng đồng phát triển nhanh của người dùng Python. Tấn tài liệu và con người sẵn sàng giúp đỡ

Python khuyết điểm:

  • Có thể là một nỗi đau để cài đặt (đặc biệt là một số module trong OS X)
  • Lô thao tác không phải là đẹp/dễ dàng như trong Matlab, đặc biệt là lô 3D hoặc hình ảnh động
  • nó vẫn là một ngôn ngữ kịch bản, vì vậy chỉ sử dụng nó cho (nhanh) prototyping
  • Python cũng không dành cho lập trình đa lõi

Matlab ưu:

  • Rất dễ dàng để cài đặt
  • hộp công cụ mạnh mẽ (ví dụXử lý tín hiệu, hệ thống Biology)
  • Unified tài liệu, và hỗ trợ cá nhân miễn là bạn mua giấy phép
  • Dễ dàng để có hình ảnh động cốt truyện và đồ họa tương tác (mà tôi tìm thấy thực sự hữu ích cho các thí nghiệm chạy)

Matlab khuyết điểm :

  • Không miễn phí (và đắt tiền)
  • Dựa trên Java + X11, trông vô cùng xấu xí (ok, tôi chấp nhận tôi hoàn toàn thiên vị ở đây)
  • Khó viết lớn và mở rộng các chương trình
  • Rất nhiều người sử dụng Matlab đang chuyển sang Python :)
+3

Cảm ơn! Tôi đã nói chuyện với một số người khác ngày hôm nay, và có vẻ như tôi sẽ đi với Python. – casper

+0

Tôi rất vui khi biết điều đó. Lập trình vui vẻ! –

5
  1. Nếu bạn có kinh nghiệm với cả hai ngôn ngữ, đó không thực sự là tiêu chí quyết định.

  2. Matlab gặp sự cố khi đối phó với cài đặt thời gian thực, đặc biệt vì hầu hết các thuật toán về thị giác máy tính đều rất tốn kém. Đây là lợi thế của việc sử dụng một thư viện đã thử và thử nghiệm như OpenCV, nơi nhiều thuật toán bạn sẽ sử dụng được triển khai hiệu quả. Matlab cung cấp khả năng biên dịch mã thành các tệp Mex nhưng đó là rất nhiều công việc.

  3. Matlab có song song cho các vòng parfor làm cho việc xử lý đa lõi trở nên dễ dàng (hoặc ít nhất là dễ dàng hơn). Nhưng câu hỏi đặt ra là nếu điều đó đủ để có được tốc độ thời gian thực.

  4. Không có nhận xét nào.

  5. Ưu điểm chính của Matlab là bạn sẽ có được một chương trình đang chạy rất nhanh do tài liệu tốt của nó. Nhưng Tôi thấy rằng khả năng sử dụng lại mã không tốt với Matlab trừ khi bạn nhấn mạnh vào nó.

Tôi nghĩ quyết định cuối cùng là nếu bạn phải/có thể chạy thuật toán thời gian thực mà tôi nghi ngờ trong Matlab, nhưng điều đó phụ thuộc vào phương pháp bạn dự định sử dụng.

+0

Cảm ơn bạn đã nhập! Nhưng, ý của bạn là gì khi bạn nói rằng khả năng sử dụng lại mã có hại với Matlab? Tại sao nó như vậy? – casper

+2

Nhiều người có xu hướng sử dụng tập lệnh quá nhiều theo ý kiến ​​của tôi khiến việc sử dụng lại mã như vậy do va chạm tên và phụ thuộc rất khó. Ngoài ra rất khó để thực thi cấu trúc dữ liệu (ví dụ dữ liệu đầu vào) có nghĩa là hầu hết người dùng sẽ phải tìm hiểu cách họ phải cấu trúc dữ liệu đầu vào (có phải là hàng vectơ hoặc cột vectơ không?). Tôi không nói rằng nó không thể tái sử dụng mã Matlab tốt nhưng có rất nhiều mã xấu xung quanh và mọi người có xu hướng không suy nghĩ về reusability khi mã hóa. – denahiro

7

Tôi muốn giới thiệu python.

Tôi chuyển từ MATLAB -> python khoảng 1/2 cách thông qua phd của tôi và không hối tiếc. Theo cách đơn giản nhất, python là ngôn ngữ đẹp hơn, có các đối tượng thực, v.v.

Nếu bạn mong muốn làm bất kỳ phần nào của mã trong c/C++, tôi chắc chắn sẽ giới thiệu python. Giao diện mex hoạt động, nhưng nếu xây dựng của bạn trở nên phức tạp/lớn thì nó bắt đầu là một nỗi đau và tôi chưa bao giờ tìm ra cách gỡ lỗi hiệu quả nó. Tôi cũng gặp khó khăn lớn với mex + phân bổ các khối lớn tương tác với quản lý bộ nhớ của MATLAB (tôi không có khả năng khắc phục vấn đề đó là điều khiến tôi chuyển đổi).

Là một lưu ý phụ/tự quảng cáo, tôi có Crocker-Grier trong c++ (với giấy gói swig) và tinh khiết python.

4

Những người khác đã làm cho rất nhiều ý kiến ​​tuyệt vời (tôi đã phát biểu về chủ đề này trước đây trong một câu trả lời https://stackoverflow.com/a/5065585/392949), nhưng tôi chỉ muốn chỉ ra rằng Python có một số công cụ thực sự tuyệt vời để tính toán song song/chia nhỏ công việc trên nhiều lõi. Dưới đây là một đoạn ngắn và không phải là danh sách toàn diện:

Bạn cũng sẽ có thể tìm thấy cython được nhiều để trở thành một công cụ lớn hơn hẳn so với những gì Matlab cung cấp nếu bạn cần phải giao tiếp các thư viện C bên ngoài hoặc viết các phần mở rộng C, và nó có hỗ trợ gọn gàng tuyệt vời được xây dựng ngay.

Có một danh sách với một số tùy chọn khác tại đây: http://wiki.python.org/moin/ParallelProcessing

Các vấn đề liên quan