Medical Imaging Software Development

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Привет всем. Помогите определится с OS для Medical Imaging Software Development.

Предыстория: Два месяца назад пересел на openSUSE. Прекрасный дистрибутив, но мне Windows роднее (да и продуктивность работы намного выше).

Задачи: Image processing, сегментация, трехмерное конструирование. Работа с DICOM.

Инструменты: Qt, MITK, VTK, ITK, OpenCV

Вопрос: Стоит ли дальше «мучить себя» Linuxом или можно вернутся в родной Windows ?

Собственно данный топик сводится к поиску причин не бросать Linux. Единственная причина по которой я обратил внимание на Linux — периодическое мелькание в загрнан. вакансиях по medical imaging software development.

PS: Дабы избежать holy wara. Linux прекрасная OS, но мы друг другу не подходим ;) .

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
В свете последних неприятных новостей о Qt приходится искать ей замену. Если адекватная замена Qt в плане GUI под С++ ? Сейчас смотрю в сторону FLTK и gtkmm, wxWidgets страшен как MFC.

Как запасной вариант можно пилить image/video processing на С#.NET, но что то мне подсказывает, что в плане поиска работы по processingу это тупик.

Я бы не заморачивался, Вам хватит и Qt 3, максимум 4 с головой, а оно rock stable.

Собственно возник еще один вопрос. Какими инструментами нужно обладать чтобы стать junior/middle по работе с графикой (image/video processing) ? Сейчас есть: C++, openCV, MATLAB, Qt, OpenGL. Что нужно еще ? Заранее спасибо.

Я от не зовсім чітко зрозумів, яка кінцева мета?
1) оволодіти фреймворками
2) оволодіти предметною частиною
3) зробити розрахунки для дисера
4) звалити на запод

5) інше.

Конечная цель — получить более высокооплачиваемую работу в этой стране (если очень сильно повезет, то свалить :) ). Естественно без знание предметной части и фреймворков это не получится. Вот собственно и вопрос, что нужно еще знать ?

Конечная цель -получить более высокооплачиваемую работу в этой стране (

Якщо все зводиться до заколочування бабла, то імідж процесінг не є ефективною стратегією, так як можна, з меншим напрягом заколочувати бабло, то раз, а по друге, у Вас буде потенційний один максумум два-три роботодавця.

На данный момент я работаю с image processing. Какой мне смысл разворачиваться и идти в другом направлении :) ? Я, наоборот, хочу расширить свою область для получения $ .

У меня есть планы изучить Javу, но это как нибудь потом.

Тонны лет опыта из куча знаний из области предметной. Иначе трейни будете.

Кеп, вы как всегда правы :) .

По image processing, различные имеджевые форматы, как растровые, так и векторные. Используемые алгоритмы сжатия. Предоставляемые возможности ОС по работе и отображению, для винды — GDI/GDI+. Посмотреть .NET: System.Drawing, System.Windows.Drawing.
По video processing, в принципе, аналогично, можно начать изучение с ffmepg, DirectShow, Media Foundation.

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

консоль + греп логов — это то, чего мне больше всего не хватает в разработке под маздаем

Вероятность того что вас перевезут заграницу если ваши познания в Image Processing будут ограничиваться OpenCV и ему подобными не очень велика.

Я не мебель чтоб меня перевозить :) . Что же тогда может «возвысит» меня в глазах Заграницы ?

Для начала подойдёт и OpenCV, но вот если чего с OpenCV сделать неполучиться, то тогда начнётся постижение великого алгоритмическо-математического дао и заграница откроет свои двери :)

постижение великого алгоритмическо-математического дао

Подскажите с чего начать, на что ориентироваться ?

Функциональный анализ, мат анализ, теория вероятностей

Я ж не знаю, что надо будет делать :) Вообще по цифровой обработке изображений массово были книги, изданные в 80х-90х годах, там же были очень новомодные алгоритмы, многие из которых даже сейчас реализуют в железе, как самые оптимальные. Тогда был интересный период, когда только начали появляться первые 3D акселераторы типа S3 Virge 3D, которые скорее являлись 3D замедлителями, нежели акселераторами. Поэтому в то время получился очень сильный скачок в алгоритмах обработки изображений, как и для 3D графики, так и для прочей обработки изображений.

Поэтому проще сказать что надо, а мы уже посоветуем что лучше реализовать :)

Я б выбрал для этого QT + C++ или GTK + C

Главное чтоб мой старенький ноут это все потянул :( . Можно ли нормально работать с CUDA, Stream или OpenCL на Mobile Intel® 4 Series Express Chipset Family (GMA 4500MHD) ? Windows 7 дала ей оценку 3.5 из 7.9.

У меня Intel Pentium Dual T3400 2.16 Ghz и 2 Gb ОЗУ. Возможно нужно поднять до 4 Gb дабы стало немного лучше?

. Можно ли нормально работать с CUDA, Stream или OpenCL на Mobile Intel® 4 Series Express Chipset Family (GMA 4500MHD)

первые два однозначно не будут (откуда поддержка технологии нвидии/ати в ителовских процах?), OpenCL — думаю тоже нет, но посмотри на их сайте поддерживаемые процы

Черт, OpenCL не поддерживает Mobile Intel® 4 Series Express Chipset Family. Придется апгрейдится ...

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

3rd Generation Intel® Core™ Processors (i3, i5, i7)
2nd Generation Intel® Core™ Processors (i3, i5, i7, i7 Extreme)
Previous Generation Intel® Core™ Processors (i3, i5, i7, i7 Extreme)
Intel® Core™ 2 Extreme Processor, 9000 series
Intel® Core™ 2 Quad Processor 8000 and 9000 series
Intel® Core™ 2 Dou Processor, 8000 series
Intel® Core™ 2 Dou Processor, E7200 series

* All other versions of Intel® Core™ 2 processors are not supported

Core 2 Dou? Доу уже свои процессоры выпускает?

Осталось разобраться с CUDA и Stream. Говорят, что CUDA предпочтительней.

Опять же лучше взять OpenCL как кроспплатформенный стандарт, нежели CUDA или Stream. Хотя иметь представление о CUDA и Stream стоит.

Я склоняюсь к варианту OpenCL + CUDA. Или даже к QtOpencl (Qt + OpenCL) без CUDA.

QtOpencl

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

Я не помню, как обстоит сейчас дела с CUDA, но OpenCL может использовать в том числе и обычный процессор для своих вычислений, что удобно, если целевой компьютер будет иметь 4-8 ядер, плюс начать писать код можно без видеокарты :)

Лучше расскажи как в Medical ISD занесло и какие успехи?

как в Medical ISD занесло

да как то само собой получилось ...

какие успехи?

работаем потихоньку, похвастаться пока что нечем :)

В вакансиях часто пишут Linux. т.к такое ПО пишется для embedded устройств частенько, где мастдай нафиг не уперся.

Не знаю, как сейчас видел лет 6 назад томографы на лету делающие послойный скан мозга, но там в качестве ПО был вообще OСaml и Linux, правда не знаю или они нашли достаточно потребителей...

P.S: Когда ты говоришь, что «поставил openSuse», это значит что ты поставил дистрибутив, с кучей xрени, а когда говоришь «поставил Linux» имеется ввиду другое, ядро скомпилял? нет, так что это не линукс тебя мучает, а суся. Поставь себе в виртуалку и не мучайся, если с винды не можешь уйти, все равно на Qt пишеш (не дай бог тебе написать на форуме кьютешников «QT» разорвут, это аббривиатура QuickTime ).

Удачи.

До этого я соприкасался с Ubuntu и Fedora, но openSuse как то ближе к Windows. Собственно и не в дистрибутивах дело, мне просто неприятна сама архитектура системы. Хотя бесспорно Linux имеет множество прекрасных решений.

Она неприятна потому, что непонятна.
Однако, Linux хорош тем, что его можно обкарнать так что поместится в чип для кофеварки с нужными приложениями. В мегабайт так 150 (вот Androidoфоно миллионы миллионов уже).

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

P.S: Но терминал заменяется PowerShell, Emacs можно поставить на венду тоже ибо кроссплатформенность. 100% довод, помимо сомнительной продуктивности в будущем, тебе не дадут, а то получается «ну уговорите меня»...

Вопрос: Стоит ли дальше «мучить себя» Linuxом или можно вернутся в родной Windows ?

Разрешаю не мучаться. Если изначально всё правильно написать, то пофиг по большому счёту где проект потом компилить и запускать.

Спасибо :-D ! Пользуясь моментом задам еще вопрос. На чем проще/интереснее/продуктивнее писать imaging software (Qt C++ или С# .NET) ?

Я бы выбрал первое исходя из соображений кроссплатформенности.

А я бы выбрал Си по старинке. Тут главное, когда на реальные продукты писать начнете, не наломайте вот таких вот дров, какие были в известном баге на девайсе лучевой терапии. Там как бы эээ пострадали люди. А из того что вы написали, думаю выбрал бы тоже кюти, сам щас вот пишу на нем встроенное ПО для заказчика. Правда дрова под линух на сях с ограничениями. А с Линухом конечно со временем вас попустит, но если не втерпеж, то бросайте :).

ru.wikipedia.org/wiki/Therac-25

Мне кажется странным предложение — писать на Си по старинке, в таком контексте.

Мне кажется в первую очередь стоит как раз отказаться от Си, с его родными функциями, опасность scanf и подобных функций давно признана. Как раз таки переполнение, когда программа записывая значение по указателю — полезет в соседние переменные — вполне может вызвать неожиданное увеличение мощности гипотетического аппарата лучевой терапии без какого либо предупреждения.

Как минимум тогда уже С++ и не по старинке, а с полностью отказаться от старых функций Си-шки.

Но если посмотреть причины инцидента Therac-25, то и С++ не так уж безопасен в этом плане, лучше всего брать язык более высокого уровня со строгой типизацией, где вероятность испортить память, и вызвать переполнение — минимальна.
Конечно как вариант — использовать С++ и какой то анализатор кода, который бы отлавливал типичные ошибки потенциально проблемные места.

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

Мне кажется в первую очередь стоит как раз отказаться от Си, с его родными функциями, опасность scanf и подобных функций давно признана.

Могу поставить 5$, что эта функция использоваться не будет :) А вот snprintf() вполне безопасна.

Могу поставить 5$, что эта функция использоваться не будет :)

Согласен.
Но опасности все равно остаются) Например в виде коллеги плохо знающего С++, который передает наружу из функции указатель на объект в стеке))

Хотя в принципе — если обращать внимание на каждый варнинг компилятора, поставить какой то статический анализатор кода, и жестоко ревивать у друг друга код, то можно избежать таких проблем (наверно).

И при этом, свой любимый C#, наверно я не смогу предложить как ультимейт солюшен =(, так как работать с картинкой по пикселям, и всякими бинарными форматами — на нем не так уж удобно. Тем более автоматический сборщик мусора — плохая идея для работы в реальном времени с опасным железом (правда не имею опыта с таким, так что чисто теоретически размышляю)?

Коментар порушує правила спільноти і видалений модераторами.

Спс, учтем. Теперь нужно литературу/ресурсы какие то найти по этому делу.

Так будет использоваться OpenCV, в котором есть всё, что нужно. Смысл делать то же самое в матлабе?

Та даже джедаи плачут горячими слкзами от фич матричного R.

Пользуйте Matlab/Sage Math для прототипирвоания. Весь низкий уровень пишите на родимом С и делайте максимально портабельный код без выпендрежа. А оборачивайте дальше уже во что душа пожелает.

Тут пришла в голову идея. Алгоритмы & обработку делать в Matlab, а потом портировать при помощи MATLAB Coder в OpenCV.

Эмм... А быстродействие не нужно? Matlab Coder не особо что-то годное делает, посему код ускоряецца не настолько, как если бы это было ручками. А вот как в OpenCV вы это портировать собрались дял меня загадка. Кодер даст вам что-то работоспособное и линкабельное, но он, насколько я помню, таки не конвертит код с применением либ сторонних. Или вы хотите подлинковать к внутри матлабовского кода opencv, как мех, а птом все это уже компилить? Или хоите в код, пользующий опенцв, вставить выхлоп от матлаб кодера?

MATLAB способен генерировать MEX function или dll. Что мне мешает запилить алгоритм обработки в dll, подключить в мой проект, а в OpenCV доделать тот функционал который мне надо ?
В принципе если я пишу бред, то скажите :) . Если OpenCV даст мне все нужные инструменты по обработке, тогда я к MATLAB прибегать не буду.
Собственно вдохновлен на подобный хоровод этим постом xanthippi.ceid.upatras.gr/.../matlab_opencv

Если смысл тратить время на освоение MATLAB для image/video processing, когда есть такие инструменты как OpenCV и тп.?

Если смысл тратить время на освоение MATLAB для image/video processing, когда есть такие инструменты как OpenCV и тп.?

“Вам шашечки или ехать?”

Тобто освоювати фреймворки, чи вирішувати конкретні задачі?

Нужен ответ специалиста. Если смысл мучится с МATLAB, когда есть OpenCV и тп. ? Я понимаю, что знание МATLAB это плюс, но меня больше волнуют технологии/инструменты которые затребованы работодателем. Когда гуглил вакансии, то МATLABа не встречал, зато OpenCV есть немного. В осн. отправной точкой является OpenGL и для меня загадочное multimedia processing.

Підписатись на коментарі