Zastanawiałem się, który język jest najlepszy do przetwarzania obrazów? Wiem, że MATLAB ma dobrą bibliotekę i społeczność użytkowników. Nie sprawdziłem tego, jest tam również Python.
Jaki jest na to najbardziej wydajny język?
źródło
Zastanawiałem się, który język jest najlepszy do przetwarzania obrazów? Wiem, że MATLAB ma dobrą bibliotekę i społeczność użytkowników. Nie sprawdziłem tego, jest tam również Python.
Jaki jest na to najbardziej wydajny język?
Nie chodzi tylko o język programowania, ale o bibliotekę, z której korzystasz. Mogę myśleć o następujących kwestiach:
MATLAB - możliwości przetwarzania obrazu są w porządku, ale do bardziej zaawansowanego przetwarzania w czasie rzeczywistym potrzebne byłyby pewne rzeczy niskiego poziomu. Ponadto nie zapewnia bardzo dobrej przenośności.
Mathematica - dobra do prototypowania i szybkiej wizualizacji, ale to wszystko moim skromnym zdaniem.
OpenCV - Myślę, że jest to najpopularniejsza biblioteka w społeczności IP. Świetne możliwości ( obliczenia na GPU, moduł Machine Learning, GUI - czego jeszcze potrzebujesz? ), Szybki i wciąż w fazie rozwoju (tak więc drobne błędy są usuwane bardzo szybko). Jeśli chodzi o społeczność - jest duża! Głównie do programowania w C / C ++, ale także w Pythonie (prawdopodobnie Ci odpowiada).
JAI - Java Advanced Imaging - tylko jeśli lubisz Javę. Osobiście mi się nie podoba.
ImageMagick - możesz go używać z wieloma językami programowania, sprawdź API .
CxImage - dobrze, jeśli chcesz stworzyć coś lepszego niż MS Paint i z pewną funkcjonalnością Photoshopa.
CImg - oczywiście do użycia z C ++, ale OpenCV jest jeszcze lepszy.
PIL - biblioteka specyficzna dla języka Python z wieloma funkcjami. Jeśli Ci się spodoba, możesz przyjrzeć się bliżej.
SimpleCV - w zasadzie jest to wiązanie Pythona OpenCV z pewnymi poprawkami. Bardzo łatwy w użyciu i dość wydajny.
scikit-image - także biblioteka Pythona, ale moim zdaniem gorsza niż SimpleCV (chociaż mój przyjaciel nie zgodziłby się na to). Jedną z zalet jest to, że zawierają one ekstraktor funkcji DAISY - całkiem przydatny, jeśli potrzebujesz gęstych funkcji.
GIL - część Boost , ale mniej funkcjonalna niż OpenCV. Chociaż jeśli podoba ci się i używasz wzmocnienia, to dla niektórych podstawowych funkcji powinno być w porządku.
ResIL - kontynuacjaprojektu DevIL . Główną zaletą jest obsługa wielu formatów plików, w tym niektórych plików gier.
RÓŻOWY - pierwotnie napisany w C ++. Ostatnio go wypróbowałem i bardzo miło było z nim pracować. Świetna integracja z Pythonem i szybkie osadzanie w C. Poza tym mają wiele fajnych algorytmów.
Oczywiście istnieje wiele innych bibliotek przetwarzania obrazu, ale z tymi miałem kontakt. Więc jeśli chcesz zacząć od czegoś, wybierz OpenCV (najlepiej z frameworkiem C ++) - nie pożałujesz! Z drugiej strony, jeśli twoje umiejętności programowania nie są silne, możesz pomyśleć o użyciu bibliotek opartych na języku Python - naprawdę łatwe do nauczenia się i skonfigurowania.
MATLAB to najlepszy język do nauki przetwarzania obrazu. (to moja opinia)
Jest łatwy do nauczenia się, niezależny od sprzętu, bardziej elastyczny niż jakikolwiek skompilowany język, być może bardziej wydajny niż języki skryptowe (z powodu wbudowanych bibliotek DLL zoptymalizowanych do przetwarzania sygnałów na poziomie maszyny), ma dobre wsparcie akademickie i inżynierskie.
C / C ++ to najlepszy język do tworzenia samodzielnych aplikacji do przetwarzania obrazów. W ramach swojego zestawu IDE możesz generować kod natywny, który jest najbardziej wydajny. IDE dla C ++ zapewniają lepsze funkcje debugowania na poziomie komputera.
Niektóre języki skryptowe są również używane. Są rzeczywiście elastyczne, przenośne, a nawet znacznie wydajne, jednak debugowanie może nie być łatwe na niskich poziomach.
Również nowe możliwości przetwarzania GPU w CUDA, OpenCL itp. Znacznie zwiększają przepustowość obliczeniową. (Jednak trudniej się ich nauczyć, ponieważ powinieneś zdawać sobie sprawę z podstawowej architektury sprzętowej potoku GPU, aby wykorzystać wzrost wydajności)
Jeśli chcesz rzucić własne algorytmy lub kod, dołącz OpenCL, ponieważ wiele jąder przetwarzania obrazu jest „żenująco równoległych”.
Lub, na Big Iron, Fortran wciąż bije większość innych języków przy liczbowej wydajności wektorowej.