Java или C для обработки изображений - PullRequest
6 голосов
/ 14 июня 2010

Я хочу изучать язык программирования (пройти курс) для анализа и обработки изображений.Возможно, Биоинформатика тоже.На каком языке мне идти?C или Java?Другие языки не вариант для меня.Также, пожалуйста, объясните, почему один из языков является лучшим вариантом для моего приложения.

Ответы [ 7 ]

4 голосов
/ 14 июня 2010

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

  1. Java Advanced Imaging
  2. Утилиты 2D-графики (взгляните на BufferedImages)
  3. ImageJ и т. Д.
  4. Получите его для работы с JAMA
4 голосов
/ 14 июня 2010

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

Все зависит от объема.

Что более важно, я предлагаю вампоищите библиотеки и фреймворки, которые уже существуют, посмотрите, какие из них подходят ближе всего к тому, что нужно сделать, и выберите язык, на котором была написана библиотека, будь то C, Java или Fortran.

Для Java я нашел BioJava.org в качестве отправной точки.

3 голосов
/ 14 июня 2010

Спросите кого-нибудь в области, в которой вы работаете (например, биоинформатика)

Для солнечных изображений большая часть работы выполняется в IDL, Fortran, Matlab, Python, C или Perl (PDL). (Примерно в таком порядке ... IDL определенно на первом месте, так как большая часть программного обеспечения для калибровки прибора написана на IDL)

Из-за этого на этих языках уже написано множество наборов инструментов для нашей области. Часто с большими наборами справочных данных PI выпускает некоторый программный пакет в качестве примера того, как интерпретировать / взаимодействовать с форматом данных. Я могу только предположить, что Биоинформатика будет похожа.

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

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

1 голос
/ 12 июня 2012

Самая популярная библиотека компьютерного зрения (обработка изображений, анализ изображений) - OpenCV , написанная на C ++, но также может использоваться с Python и Java (официальная OpenCV4Android и неофициальный JavaCV ).

Существуют биоинформационные приложения, которые в основном обрабатывают изображения, поэтому OpenCV позаботится об этом. Но есть и такие, которые не являются, например, основанными на машинном обучении, поэтому, если вам нужно что-то, не связанное с изображением / видео, вам понадобится другая Биоинформационно-ориентированная библиотека. В Opencv также есть модуль машинного обучения, но он больше ориентирован на компьютерное зрение.

О языках C против Java большинство было сказано в других ответах. Я должен добавить, что эти библиотеки теперь основаны на C ++, а не на простом C. Если у ваших приложений есть потребности в обработке в реальном времени, C ++, вероятно, будет лучше для этого, если нет, Java будет более чем достаточно, так как он более дружественный.

0 голосов
/ 12 июня 2012

Отказ от ответственности: я работаю на TunaCode.

Если вам придется выбирать между разными языками, чтобы начать работу с Image Processing, я бы рекомендовал начать с C ++. Вы можете использовать необработанный указатель доступа, который необходим, если вы хотите работать с отдельными пикселями.

Далее, какие изображения вам интересны? Только для забавных фильтров изображений или некоторых тяжелых вещей, таких как оценка движения, отслеживание и обнаружение и т. Д.? Для этого я бы порекомендовал вам взглянуть на CUVILib , так как раньше, чем позже, вам понадобится производительность при работе с функциями обработки изображений, и именно это обеспечивает CUVI. Вы можете использовать его как автономный, если он служит вашим целям, или вы можете подключить его к другим библиотекам, таким как Intel IPP, ITK, OpenCV и т. Д.

0 голосов
/ 30 июня 2011

просто моя цена в два пенса: java не позволяет использовать указатели в отличие от C / C ++ или C #.Так что, если вы собираетесь напрямую манипулировать пикселями, то есть писать собственные функции обработки изображений, они будут намного медленнее, чем эквивалент в C ++.С другой стороны, C ++ - это полный кошмар языка по сравнению с Java.вам понадобится как минимум вдвое больше времени, чтобы написать эквивалентный бит кода на c ++.так что при всем приросте производительности вы, вероятно, можете позволить себе купить компьютер, который компенсирует разницу во времени выполнения; -)

я знаю, что другие языки не подходят для вас, но лично я очень рекомендую c #для обработки изображений или компьютерного зрения: он позволяет указателям и, следовательно, функциям IP в c # только вдвое медленнее, чем в C ++ (я думаю, что это приемлемый компромисс), и имеет отличную интеграцию с нативным C ++ и хорошую библиотеку-обертку для opencv.

0 голосов
/ 15 июня 2010

В идеале вы должны использовать что-то вроде Java или (даже лучше) Python для «высокоуровневых» вещей и компилировать в C подпрограммы, требующие большой вычислительной мощности (например, с использованием Cython и т. Д.).

Некоторые научные библиотеки существуют для Python (SciPy и NumPy), и они являются хорошим началом, хотя объединить Python и C пока непросто (нужно немного подправить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...