Super Resolution OpenCV: проблема усиления разрешения (суперразрешение) / OpenCV / Recog.ru - Распознавание образов для программистов


Super Resolution OpenCV: проблема усиления разрешения (суперразрешение)

Основные теоретические моменты, на которых базируются реализованные в OpenCV функции, описаны в работах [1,2]. Основная суть проблемы показана в работе [1]. Есть две копии изображения различного качества:

Нужно получить одно. Там же в работе показано, как это сделать. Результаты объединения копий изображений:


Помимо этого суперразрешение помогает получить изображение более высокого разрешения из набора изображений низкого.
Доступный интерфейс описан ниже.

superres::SuperResolution
Базовый класс. Класс используется только для определения общего интерфейса для всего семейства алгоритмов суперразрешения.

superres::SuperResolution::setInput
Устанавливает входной источник кадров для алгоритма суперразрешения.
void superres::SuperResolution::setInput(const Ptr<FrameSource>& frameSource);

Параметры:
frameSource – входной источник кадров

superres::SuperResolution::nextFrame
Обрабатывает следующий кадр из источника входных изображений и записывает на выход.
void superres::SuperResolution::nextFrame(OutputArray frame);

Параметры:
frame – выходной результат.

superres::SuperResolution::collectGarbage
Очистить все внутренние буферы.
void superres::SuperResolution::collectGarbage();


superres::createSuperResolution_BTVL1
Создание суперразрешения по методу Bilateral TV-L1 [2].
Ptr<SuperResolution> superres::createSuperResolution_BTVL1();
Ptr<SuperResolution> superres::createSuperResolution_BTVL1_GPU();

Вот важные члены класса, которые контролируют алгоритм, который можно установить после построения экземпляра класса:
int scale – фактор масштабирования.
int iterations – количество итераций.
double tau Асимптотическое значение метода наискорейшего спуска.
double lambda Весовой коэффициента баланса данных и сглаживания…
double alpha Параметр пространственного распределения в Bilateral-TV.
int btvKernelSize Размер ядра в фильтре Bilateral-TV.
int blurKernelSize Размер ядра для размывания Гаусса.
double blurSigma – sigma в размывании Гаусса.
int temporalAreaRadius Радиус временной области поиска.
PtropticalFlow Непрозрачный алгоритм оптического потока.

Рассмотрим пример, представленный вместе с библиотекой. Прежде всего стоит отметить, что разработчики не предоставили никаких данных для тестов – чтобы оперативно можно было посмотреть как это работает (версии 2.4.6 -2.4.7). В том же каталоге с тестами есть файл 768x576.avi, но в ответах на сайте answers.opencv.org по этому поводу пишут – данный метод предназначен только для небольших видео, поэтому не хватает памяти. Уменьшите разрешение и upscale фактор или temporal radius. Т.е. если мы хотим посмотреть какой-либо результат нам нужно или изменить данные или пример.
Текст программного кода вы можете посмотреть в файле opencv super_resolution.cpp. Я не буду его здесь дублировать, а отмечу некоторые моменты касательно суперразрешения.

Ptr<SuperResolution> superRes; // Объявление класса супреразрешения


Инициализация:
superRes = createSuperResolution_BTVL1();

superRes->set("scale", scale);
superRes->set("iterations", iterations);
superRes->set("temporalAreaRadius", temporalAreaRadius);
superRes->set("opticalFlow", createOptFlow(optFlow, useGpu));


Далее идет объявление источника видео, приемника (файла), пропуск начального кадра, поскольку результат будет объединяться с несколькими, а в начале — только один. Ну а затем в цикле перебираются все фреймы — вызывается функция superRes->nextFrame(result). Результат записывается в видео-файл.

Для тестов я взял видоизмененное видео атрофического гастрита разрешением 60x88. Первые 2 картинки:

Пример вызывался со следующими параметрами:
-v Atrofic_Gastritis2.mpg -o Atrofic_Gastritis3.mpg -s 2 -t 2
Результат, изображения размером 106x162


Технология применима для очень маленьких изображений, поскольку для таких изображениях на CPU AMD-FX(tm)-6100 Six-cores 3.3GHz при занятом на 50% этим приложением процессоре обработка одного изображения была около 8 секунд (34 секунды первое).

Литература:
1. S. Farsiu, D. Robinson, M. Elad, P. Milanfar. Fast and robust Super-Resolution. Proc 2003 IEEE Int Conf on Image Process, pp. 291–294, 2003.
2. D. Mitzel, T. Pock, T. Schoenemann, D. Cremers. Video super resolution using duality based TV-L1 optical flow. DAGM, 2009.
  • 0
  • 08 декабря 2013, 21:00
  • vidikon

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.