Я получаю много запросов поделиться своим предложением GSOC, которое было выбрано VTK на GSOC 2015. Поэтому ниже я воспроизведу почти все свое приложение целиком. Мне очень хотелось изменить некоторые из приведенных ниже пунктов, но я решил оставить их в покое, чтобы вы знали об ошибках, которые я совершил, и не внушали вам ложной уверенности в том, что это было идеально.

Прежде чем вы начнете, позвольте мне рассказать вам немного больше о моем приложении. Мне потребовалось около недели, чтобы изучить это приложение и сделать это предложение. Я начал довольно поздно, так как меня не очень интересовал GSOC, но я был больше заинтересован в том, чтобы показать Eulerian Motion Magnificaiton большему количеству людей в мире. Спасибо Rohan Prinja за то, что направили меня к этому проекту в GSOC. Пожалуйста, используйте это приложение только в качестве шаблона, не пытайтесь слишком сильно его придерживаться. Будьте изобретательны и изобретательны! Свяжитесь с нами, если возникнут вопросы.

Эйлеров-движение-увеличение

Личная информация

Имя: Ашрай Малхотра

Университет: Индийский технологический институт, Бомбей

Электронная почта: отредактировано (свяжитесь со мной в linkedin)

Телефон: отредактировано

Обмен мгновенными сообщениями: отредактировано

Twitter: https://twitter.com/ashray_malhotra

Страна проживания: Индия

Часовой пояс: IST (GMT + 0530)

Основной язык: английский

Я учусь на четвертом курсе двойного диплома и получаю степень бакалавра технических наук. + M.Tech. Кандидат электротехники (специализация по обработке сигналов) в Индийском технологическом институте, Бомбей. Мой семестр закончится в конце апреля, и у меня останется достаточно времени, чтобы подготовиться к проекту GSoC. Если меня выберут, я смогу работать над проектом около 40 часов в неделю, хотя готов приложить больше усилий, если этого требует работа.

Почему именно этот проект?

Этот метод увеличения движения открывает совершенно новые возможности, такие как обнаружение кровеносных сосудов, увеличение движений маленьких детей и т. Д. Я смотрю на эту технологию с точки зрения возможности использования совершенно нового измерения. Поэтому наша цель должна заключаться в том, чтобы предоставить его пользователям / разработчикам в максимально гибкой форме, чтобы люди могли использовать его в своих личных сценариях использования, которые они могут придумать.

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

Технические знания

Я учусь на 4-м курсе двойного диплома в ИИТ Бомбее. Я учусь на 5-летнем бакалавриате технических наук. + M.Tech. курс. Моя специальность - электротехника (хотя это больше математика и электроника). Моя специализация - связь и обработка сигналов. Курсы, которые я прошел, включают

Я прошел много курсов по алгоритмам и машинному обучению на coursera.

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

  • Проект Dental Imaging Project с ReDx (MIT Media Lab) построил систему в реальном времени (разработанные алгоритмы) для обнаружения кариеса (кариеса) с помощью внутриротовой камеры. Это видео резюмирует всю работу.
  • Распознавание цифр с помощью Adaboost
  • Стабилизация видео с использованием RANSAC и наименьших квадратов на функциях SIFT
  • Удаление шумов на изображениях МРТ
  • Распознавание цифр по базе данных MNIST. Достигнута точность почти 91% для 100-мерного подпространства (для изображений размером 28 * 28 = 784) с использованием метода PCA. Внедрены методы LDA (Fisher’s LDA) и ICA.

Некоторые из моих проектов по обработке сигналов включают в себя -

  • Локализация источника
  • Разделение источника звука
  • Система распознавания речи

В настоящее время я работаю над многими интересными проектами, включая обнаружение радужной оболочки глаза, поиск инновационных методов для улучшения временного разрешения сигнала (исследовательский проект с Профом Субхасисом Чаудхури) и т. Д. Я также в настоящее время работаю над реализацией алгоритма увеличения видео. Прочтите в разделе личной мотивации причины, по которым я уже работаю над внедрением этой техники (этот раздел был отредактирован).

Я проходил практику в Goldman Sachs Technologies на третьем курсе. Моя работа заключалась в широком использовании Java. Goldman работал с командами по всему миру. Так что мне комфортно работать с людьми из разных часовых поясов, и это не будет проблемой в процессе разработки. Я работал с C ++ в моем продвинутом курсе вычислений. Основываясь на моих навыках, меня выбрали ассистентом преподавателя на Первый онлайн-курс IIT Bombay, в котором программирование преподавалось на C ++.

Языки программирования, с которыми я ранее работал, включают C ++, Java, Cilk, Python, Matlab, openGL, CUDA, программирование на языке ассемблера и т. Д. Я построил VTK на своем MacBook. Я также запустил несколько тестовых кодов с сайта, и это было потрясающе: D. Это был цилиндрический тест. Я также работал с более продвинутыми инструментами, такими как Slicer.

Проект

Аннотация проекта

Этот проект направлен на разработку алгоритмов для выделения тонких изменений в наборе данных, зависящих от времени, и их усиления. Начнем с того, что набор данных можно рассматривать как видео (2D-данные с каждым временным разрешением), но объем проекта может быть изменен, чтобы иметь дело с разными размерными наборами данных в каждый момент времени. Мы также планируем создать пользовательские представления для увеличения видео в VTK. Мы извлекаем временные и пространственные частоты из заданных данных и усиливаем определенные частоты в соответствии с нашим вариантом использования.

Технические подробности

Ниже мы объяснили важные шаги алгоритма.

  • Начнем с рассмотрения каждого кадра видео независимо для анализа.
  • Мы выбираем подходящее цветовое пространство, в котором хотим работать. Это может зависеть от конкретного приложения, с которым мы имеем дело, хотя в статье авторы использовали цветовое пространство NTSC для дальнейших операций.
frame = rgb2ntsc(rgbframe);
  • Для каждого уровня цвета (или уровня спектра для гиперспектральных изображений) мы строим пирамиду Лапласа. Обратите внимание, что пирамида Лапласа построена из изображения NTSC, а не изображения RGB.
[pyr,pind] = buildLaplacianPyramid(frame(:,:,1))
  • Мы инициализируем фильтр нижних частот, чтобы получить значения пирамиды Лапласа. Позже мы изменим значения пределов фильтра, чтобы выполнить временную фильтрацию сигнала.
  • Мы рассматриваем следующий кадр и выполняем аналогичный расчет лапласианской пирамиды на нем (после преобразования в цветовое пространство NTSC).
  • Значение лапласовских пирамид последующих кадров используется для временной фильтрации сигнала. Точный метод временной фильтрации может варьироваться в зависимости от приложения, например. мы могли бы использовать фильтр Баттуорта, БИХ-фильтр и т. д. Для БИХ-фильтра мы выполняем простое мультипликативное обновление обоих пороговых значений фильтра.
lowpass = (1-const_factor)*lowpass + const_factor*pyramid;
  • Разница вычисленных пороговых значений дает нам диапазон частот для работы (увеличивать или подавлять, в зависимости от уровня пирамиды лапласа)
filtered = (cutoff1 - cutoff2);
  • Теперь мы выполнили временную селекцию сигнала. Мы будем выборочно выполнять пространственное увеличение сигнала. Обратите внимание, что уравнение, которое мы будем использовать для увеличения пространственных частот (степень увеличения определенной пространственной частоты), может варьироваться в зависимости от различных сценариев использования, но в этой статье авторы использовали линейно увеличивающееся увеличение с пространственными длинами волн с определенным порогом. после чего увеличение остается постоянным.

  • На приведенном выше рисунке показано значение увеличения (ось Y) на каждом уровне пространственной длины волны (ось X) (который задается индексом пирамиды). Мы умножаем отфильтрованный сигнал выше на соответствующий коэффициент умножения (или увеличения), чтобы получить измененные значения фильтра. Обратите внимание, что нам нужно будет сделать это для всех изображений в пирамиде.
  • Используя эти окончательные отфильтрованные значения, мы снова воссоздаем кадр изображения из новой пирамиды изображения.
  • Мы также можем рассмотреть возможность добавления некоторой хроматической аберрации, если мы либо хотим лучше смешать увеличенный сигнал движения и исходный сигнал (более однородно без странных цветовых артефактов), либо мы хотим показать четкое движение в последующих кадрах, следовательно, четко разделить увеличение движения и кадр (мы можем иметь между ними контраст). Какой из двух случаев произойдет, будет зависеть от точного метода (и значения) хроматической аберрации.
output(:,:,1) = output(:,:,1)*chromaticAttenuation1; //Red channel chromatic attenuation
output(:,:,2) = output(:,:,2)*chromaticAttenuation2; //Green channel chromatic attenuation
output(:,:,3) = output(:,:,3)*chromaticAttenuation3; //Blue channel chromatic attenuation
  • Итак, мы наконец получили увеличенное движение. Но нам нужно увеличенное движение на изображении. Следовательно, мы добавляем это увеличенное движение к исходному входному кадру, чтобы получить выходной кадр, который мы будем записывать обратно в выходное видео.
output = frame + output;

Практически наблюдая за выходами описанного выше алгоритма

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

Детский образец видео (первая часть видео ниже) был использован для создания изображений ниже.

Ниже второй кадр видео. Это то, что входит в наш алгоритм.

Алгоритм определяет разницу между кадром 1 и кадром 2 и дает нам следующий результат

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

Чтобы решить эту проблему, мы используем факторы хроматической аберрации. Мы видим, что большая часть полезной информации здесь выделена красным, поэтому мы подавляем другие цветовые каналы (умножая их на 0,1, уменьшая их до 10% от исходного значения). После выполнения вышеуказанного расчета рамка становится

Теперь очень ясно, что основное движение - это движение молнии ребенка. Этого следовало ожидать, потому что другие области более непрерывны и, следовательно, имеют меньшие частотные компоненты, тогда как застежка-молния похожа на разрыв, который вносит несколько частот и, следовательно, имеет более высокий вклад в разностный кадр.

Мы добавляем указанный выше кадр к нашему исходному кадру (в области RGB) и получаем последний кадр (для выходного видео) ниже.

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

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

Это утверждение подтверждается тремя изображениями ниже.

Мы также видим гораздо меньшие артефакты в кадрах 29–30, потому что через некоторое время ошибка, вызванная начальным условием, обнуляется.

Ясно, что мы можем видеть, что вышеупомянутый метод может идентифицировать движение в кадре (мы можем сказать это, потому что он идентифицирует движение тела ребенка или движение его молнии и игнорирует другие тела в кадре). Также, как мы видели, новые созданные кадры не представляют большой проблемы для качества видео (артефакты).

Окончательно обработанное видео было создано путем запуска полного кода. Выходное видео можно найти ниже.

Что в основном доказывает, что увеличение видео потрясающее: D

Лента новостей

Pre GSOC

Реализуйте алгоритм увеличения видео. Я даже сейчас работаю над алгоритмом в качестве своего курсового проекта, и его нужно будет завершить до конца апреля, то есть до начала проекта GSOC. Это также облегчает мою задачу за эти 12 недель и помогает мне сосредоточиться на написании профессионального кода.

Связь с сообществом

Знакомство с кодовой базой VTK и процедурой, которой необходимо следовать, чтобы отправить код и получить его на рассмотрение. Обсуждение с командой того, что именно должно быть постановкой проблемы (мельчайшие детали, например, тип набора данных, который мы хотим использовать, какие параметры должны быть выбраны пользователем, например коэффициенты увеличения, что должно быть решено алгоритмически на основе типа входных данных и т. Д.) .

1 неделя

Разберитесь в соответствующих частях кодовой базы VTK и попытайтесь выяснить, как должен выглядеть конечный продукт, сколько и какие виды нужно сделать и т. Д.

2 неделя

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

3 неделя

Наконец, перейдем к видео (и / или некоторым другим изменяющимся во времени данным, если команда решит заняться этим вариантом использования). Разберитесь в временной фильтрации сигналов и начните кодировать временную фильтрацию сигналов.

5–6 неделя

Кодируйте все различные типы временных фильтров (IIR, Ideal и т. Д., Какие из них реализовать, будет решено в период объединения сообщества. Я лично выбрал код 4, используемых в статье). Также это будет период среднесрочного обзора.

7-8 недели

Когда у нас есть готовые пространственные и временные фильтры, объединить эти два кода будет легко. Нам нужно будет потратить время, пытаясь оптимизировать параметры для конкретных случаев использования. Мы можем провести достаточное количество экспериментов, чтобы придумать руководство или свод правил о том, как выбирать параметры. Это будет полезно для разработчиков, когда они захотят использовать этот код для своих приложений и вариантов использования.

9–10 недели

Начните работу над созданием представлений для реализации этого кода в наборе инструментов.

Неделя 11–12

Получайте отзывы от сообщества, повторяйте дизайн и импровизируйте в вариантах использования. Обеспечьте качество кода, добавив больше тестовых примеров и работая с большим количеством видео. Работайте над созданием документов, блогов или видеороликов, которые помогут увеличить базу пользователей этого продукта (при условии одобрения сообщества разработчиков).

Неделя 13

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

Личное вдохновение для проекта

Я очень рад работать над идеей увеличения видео. Я слежу за этой темой очень давно, впервые узнал о ней из их выступления на TED, которое вдохновило меня прочитать их исследовательскую статью. Я также работал в недельном лагере ReDX, проводимом лабораторией MIT Media (проводил профессор Рамеш Раскар). Одним из проектов этой лаборатории было обнаружение артерий человека. Я был шокирован, узнав, что врачам все еще нужно остановить кровоток, а затем найти артерии. По некоторым данным, собранным во время семинара, на поиск правильных кровеносных сосудов у младенцев (или пожилых людей) может потребоваться до 7 минут; в решающей операции это могло быть смертельным. Команда на той неделе придумала ИК-устройство, которое будет помогать RGB-камере мобильного телефона и с помощью дополненной реальности накладывает кровеносные сосуды (видимые в ИК-диапазоне) на RGB-камеру смартфона.

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

(1 абзац из исходного приложения удален)

Все мы знаем, что увеличение видео может решить «эту» простую проблему, единственная проблема заключается в том, что кажется, что никто на самом деле не приложил усилий, чтобы донести ее до людей. Я решил сам внедрить эту технологию из интереса и в качестве курсового проекта в моем курсе обработки медицинских изображений. К концу апреля (в этом году) я бы сам реализовал эту технику (что означало бы, что я полностью знал бы, как это работает, а не только имел бы теоретическое понимание). Я буду бесплатно летом и даже в последний год (5-й год), у нас просто исследовательский проект и курс или два. Моя цель - получить эту технологию в руки как можно большего числа людей. У меня уже были планы поработать над внедрением этой технологии во время летних каникул. Я был бы рад, если бы смог сделать это в составе GSOC вместе с Kitware.

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

использованная литература

Большая часть содержимого, включая изображения и исходное видео для этого документа, взято с веб-сайтов авторов статьи.