УДК 621.395
Е. Е. Переславцева, М. В. Филиппов
ДВУХФАЗНАЯ ОЦЕНКА ЯДРА ДЛЯ УСТОЙЧИВОГО К ОШИБКАМ ВОССТАНОВЛЕНИЯ ИЗОБРАЖЕНИЯ, СМАЗАННОГО ПРИ ДВИЖЕНИИ
Одна из основных проблем, возникающих в фотографии, — смаз изображения, появляющийся при движении из-за тряски камеры. Восстановление четкой версии фотографии по смазанному изображению — предмет фундаментальных исследований в области цифровой фотографии.
В ходе исследования выявлено, что определение резких краев не всегда способствует правильной оценке ядра, а при некоторых обстоятельствах и ухудшает ее. Во избежание данной проблемы разработана новая метрика для измерения применимости информации о краях изображения. Предложен эффективный метод оценки ядра, который основан на использовании пространственного априорного распределения и улучшении ядра с помощью итеративного определения поддержки. Благодаря этому можно отказаться от применения жесткого порогового фильтра к элементам ядра. Полученные результаты говорят о высоком качестве восстановления даже при больших степенях смаза, что отличает данный алгоритм от существующих методов восстановления.
E-mail: [email protected]
Ключевые слова: восстановление изображений, смаз при движении, де-
конволюция.
Смаз при движении является общим дефектом, который приводит к появлению смазанных изображений с неминуемой потерей информации. Причина этого кроется в природе датчиков, принимающих поступающий свет за время съемки изображения. Если за время экспозиции датчики камеры двигаются, объект и камера перемещаются относительно друг друга, то происходит смаз изображения. Без ограничения общности можно предположить, что это перемещение вызвано движением объекта относительно камеры.
Изображение, полученное в результате смаза, может быть представлено в виде исходного изображения, к которому применен смазывающий оператор - функция импульсного отклика. В таком случае восстановление смазанного изображения будет состоять из двух этапов: нахождения функции импульсного отклика и получения исходного изображения по найденной функции.
Если смаз при движении инвариантен к сдвигу, то он может быть смоделирован с помощью конволюции (свертки) скрытого изображения и ядра сдвига, где ядро описывает след от датчика. Тогда удаление смаза с изображения можно осуществить операцией деконволю-ции. При "неслепой" деконволюции ядро сдвига известно, и задача
состоит в том, чтобы восстановить скрытое изображение из искаженного, используя это ядро - классические линейные методы восстановления. Существует много методов деконволюции, применяемых в подобной ситуации: обратная фильтрация, фильтр Винера, фильтрация методом наименьших квадратов, рекурсивный фильтр Калмана и принудительные итеративные деконволюционные методы. Различные подходы, описанные в литературе, зависят от особенностей искажений и модели изображения.
К сожалению, на практике функция смаза часто неизвестна, а количество информации о реальном изображении очень мало. Поэтому реальное изображение приходится восстанавливать непосредственно из смазанного с использованием неполной информации о процессе смаза. Такие оценочные подходы, в которых модель искажения предполагается линейной, называются слепой деконволюцией.
Постановка задачи. Слепая деконволюция — это задача восстановления четкой версии исходного смазанного изображения при условии, что ядро смаза неизвестно. Математически смазанное изображение В можно представить в виде:
В = I ® к + е, (1)
где I — визуально правдоподобное четкое изображение; к — неизвестное неотрицательное ядро смаза (функция импульсного отклика); е — шум (для удобства аналитического описания предполагаем, что он является приблизительно гауссовым) [1]. Цель слепой деконволюции — вывести к и I из входного В. Данная задача плохо обусловлена: существует бесконечный набор пар (к, I), с помощью которых можно объяснить любое полученное значение В. Например, решение, полностью удовлетворяющее уравнению (1) — это решение с отсутствием смаза: к — дельта ядра (тождественно ядру); I = В. Некорректная природа проблемы предполагает, что для В или к должны быть введены дополнительные предположения. В настоящей работе в качестве дополнительного условия полагаем, что к неотрицательно и его значение мало по сравнению с размером изображения.
Обзор существующих методов. Кратко рассмотрим слепые и неслепые методы деконволюции.
Неслепая деконволюция. При известной функции импульсного отклика процесс восстановления несмазанного изображения сводится к неслепой деконволюции. Ранние разработки, такие как алгоритм Ричардсона-Люси или фильтр Виннера, чувствительны к шуму. Юань и соавторы предложили прогрессивную мультиразмерную улучшающую схему, основанную на билатеральном методе Ричардсона-Люси сохранения краев. Для восстановления изображений также применяют регуляризатор общей вариативности (ссылающийся на лапласиа-ново априорное распределение), априорное распределение реальных
изображений с тяжелыми хвостами и априорное распределение гиперлапласиан.
Важным аспектом процесса восстановления является подавление шума. Бар и соавторы использовали для этого компоненту точности ¡1 совместно с регуляризатором Мамфорда-Шаха, отделяя импульсные помехи. Джоши и соавторы для подавления шума комбинировали локальные "двухцветные" априорные распределения. В этих методах исследователи итеративно применяют метод наименьших квадратов с повторным взвешиванием для решения задачи нелинейной оптимизации, включающей интенсивные вычисления. В настоящей работе для подавления шума разработан быстрый метод деконволюции ТУ-¡1, основанный на полуквадратичном расщеплении, который позволяет эффективно устранить посторонние значения и сохранить основные структуры.
Слепая деконволюция. Ранние работы по слепой деконволюции изображений позволяют оценить ядра смаза небольшого размера. Например, Ю и Каве предложили вариационный фреймворк для оценки небольших ядер Гаусса. Чан и Вонг применили общие регуляризато-ры вариативности для ядра и изображения. Методами другой группы не вычисляли смаз ядра, но пытались провести реверсию процесса диффузии.
В последнее время достигнут значительный прогресс в оценке функции импульсного отклика сложного смаза для одного изображения. Частично этот успех основан на использовании различных разреженных априорных распределений, применяющихся либо для скрытого изображения, либо для ядра смаза, а также на результатах применения фреймворков разного размера. Кай ввел в своей работе фрейм-системы и системы наборов кривых, чтобы получить представление для ядер и изображений в разреженном виде. Фергус и соавторы использовали нули совокупности гауссианов, чтобы соответствовать априорному распределению реального изображения с медленно убывающим хвостом. Применялся вариационной байесовский фреймворк. В работе Шана использованы редкие априорные распределения для скрытого изображения и ядра смаза. Устранение смаза достигали с помощью применения схемы попеременной минимизации.
Левин и соавторы показали, что общие МАР-методы, включающие оценку изображения и ядра, вероятнее всего дадут неверный результат, так как для них наиболее приоритетным является решение с отсутствием смаза. Для устранения проблем можно использовать дополнительные методы обработки, например, повторное взвешивание краев.
В ряде методов для оценки функции импульсного отклика применяют шаг явного предсказания краев. В частности, Джоши и соавторы
предсказали появление хорошо выраженных краев, поместив сначала шаг нахождения краев, а затем распространив локальные экстремумы интенсивности к краям. Такой метод использован для обработки сложных функций импульсного отклика в многомерной схеме. Для предсказания резких краев Чо и Ли применяли билатеральные фильтры совместно с шоковой фильтрацией: здесь предложено простое гауссовское априорное распределение, которое позволяет строить быстрые вычислительные схемы. Такой подход значительно сокращает время вычислений, однако, эти априорные распределения не могут передать разреженный характер структур функции импульсного отклика и изображения, которые иногда становятся причинами шума и плотности оценок.
Без ограничений, накладываемых разреженными априорными распределениями, итеративная оценка ядра легко попадает в локальный минимум, что может привести к появлению визуальных артефактов в восстановленном изображении. Однако минимизировать невыпуклую энергетическую функцию с редким априорным распределением ядра, как правило, вычислительно сложно.
Общее описание метода. Несмотря на эффективность и точность результатов исследований, существует проблема восстановления изображения, получаемого при движении, которая раньше не была изучена: влияние структуры изображения на оценку ядра. На основе исследований сделан вывод о том, что резкие края не всегда помогают улучшить ядро, а при некоторых обстоятельствах, наоборот, существенно снижают точность оценки. По результатам анализа проблемы предложен алгоритм автоматического выбора градиента, позволяющий исключить побочные структуры.
В разработанном методе предлагается:
использовать новый двухфазный алгоритм оценки ядра для отделения вычислительно дорогой невыпуклой оптимизации от быстрой инициализации ядра, что приводит к повышению эффективности и надежности процесса оценки ядра;
ввести новую пространственную априорную вероятность, позволяющую сохранить резкие края при быстром восстановлении скрытого изображения;
на стадии уточнения ядра использовать алгоритм итеративного определения поддержки — мощную численную схему, при которой удается соблюсти ограничения разреженности и правильно восстановить элементы с большими значениями. На этом этапе достигается эффект, аналогичный применению мягкого порогового фильтра;
для восстановления скрытого изображения применить целевую функцию ТУ-/ь которая устойчива к шуму. Также разрабатывается
эффективный алгоритм решения на основе полуквадратичного расщепления.
Рассмотрим двухфазный метод оценки функции импульсного отклика. Сначала (первая фаза) осуществляется вычисление грубой версии ядра без соблюдения сильной разреженности. Затем (вторая фаза) производится невыпуклая оптимизация с начальной оценкой ядра, рассчитанной на предыдущей стадии. Для получения конечного результата во второй фазе не требуется проводить никаких существенных вычислений.
Первая фаза: инициализация ядра. Проводится оценка ядра сма-за в мультимасштабном окружении. Если использовать гауссовское априорное распределение, то можно достичь высокой эффективности, так как для него существуют решения в аналитическом виде. Алгоритм содержит три основных этапа: построение резких краев, оценку ядра и грубое восстановление изображения.
Вначале, по аналогии с другими методами устранения смаза при движении, производится фильтрация изображения и предсказание выделяющихся краев, чтобы руководствоваться ими при инициализации ядра. Для предварительного сглаживания изображения используют фильтр Гаусса. Затем, чтобы определить выделяющиеся края, решают следующее дифференциальное уравнение в частных производных для шоковой фильтрации:
dl/dt = -sign (Д/) ||VJ|| ,Io = Ga ® Iinput, (2)
где VI = (Ix, Iy)' и Д/ = I2XIXX + IxIyIxy + Ij/yy — пространственные производные первого и второго порядков соответственно; I0 — входное изображение, сглаженное гауссианом, которое первоначально поступает на вход для итеративного обновления dI/dt.
Нерезкие края делают оценку функции импульсного отклика чувствительной к шуму [2-4]. Однако наблюдения зависимости между краями изображения и качеством оценки ядра показывают, что выделяющиеся края не всегда улучшают оценку ядра: если размер объекта меньше, чем ядро смаза, то информация о краях может навредить процессу оценки ядра.
В качестве примера на рис. 1, а и б приведены два сигнала 1, которые смазаны с одним и тем же гауссовым ядром. Наблюдаемые смазанные сигналы показаны сплошными кривыми 3. Нижние линии 4 обозначают входную ширину ядра. Так как сигнал слева узок по горизонтали, то его высота снижена (см. рис. 1, а) из-за процесса смаза, что приведет к неоднозначности при восстановлении. В частности, если восстанавливать смаз методом наложения разреженного априорного распределения на карту градиентов скрытого изображения, то
Рис. 1. Неопределенность в восстановлении движущихся объектов
при вычислении несмазанного сигнала результаты будут приближаться к сигналу 2, так как функция, показанная этой линией, представляет меньшие величины градиента. Кроме того, данный сигнал сохраняет общую вариативность лучше, чем сигнал 1. Это еще одна причина, по которой такой способ является более подходящим решением для группы методов, использующих предсказание резких краев, включая шоковые фильтры и метод, описанный в работе [3]. На этом примере видим, что если величина элементов изображения существенно изменяется после смаза, информация о краях может привести к ошибке при оценке ядра.
Крупномасштабный объект, приведенный для сравнения на рис. 1, б, даст стабильную оценку ядра, так как его ширина больше, чем размер ядра, что позволяет сохранить общую вариативность скрытого сигнала на его краях.
Предлагается новый критерий отбора информативных краев для оценки ядра. Новую метрику для измерения полезности градиентов определяем как
II £ ув(у)11
уемн (ж)
r(x) =
£
V&Nh(x)
UVB (y)|| +0, 5
(3)
где В — смазанное изображение; ^(ж) — окно размером к х к с центром в пикселе ж; величина 0,5 вводится для предотвращения получения больших значений г в однородных областях; значение У В(у) для узких объектов (пиков) в основном нейтрализуется в
11 Еуе^(х) УВ(У)|1; Еуе^(ж) ||УВ(у)|1 — сумма абсолютных величин градиента в ^(ж), по которой оценивается, насколько выражены структуры изображения в окне. По малой величине г можно предположить, что в изображении присутствуют либо пики, либо однородные области, что приводит к нейтрализации многих компонентов градиента.
Пиксели, принадлежащие областям с малым значением г, исключают с помощью маски
M = H(r - Tr),
(4)
где Н(*) — ступенчатая функция Хевисайда, возвращающая нули для отрицательных значений и оставляющая значения без изменений в противном случае; тг — порог. Окончательный список выделенных ребер для оценки ядра:
VI3 = VI • Н(М||У/||2 - т3), (5)
где I — изображение, подвергнутое обработке шоковым фильтром; т3 — величина порога градиента.
В уравнении (5) исключена часть градиентов в совокупной зависимости от величины |^/||2 и маски М априорного распределения. Этот процесс выбора снижает неопределенность при последующей оценке ядра.
Быстрая оценка ядра. С предварительным выбором краев начальная оценка ядра может быть значительно ускорена. Целевую функцию с гауссовским регуляризатором определяют как
Е(к) = <8> к - В||2 + 7||к||2, (6)
где 7 — вес.
На основании теоремы Парсеваля выполняется быстрое преобразование Фурье по всем переменным, а производные по к устанавливаются в ноль. В аналитическом виде решение описывается с помощью уравнения
к = р-1 Г Ш3)Р (6ХВ) + Г (ду 13)Г (ду В)\
^ Г (дх13)2 + Г (ду I3)2 + 7 ()
где Г(•) и Г-1(^) — быстрое преобразование Фурье и обратное быстрое преобразование Фурье, соответственно; Г(•) — комплексно-сопряженный оператор.
Грубая оценка изображения с пространственным априорным распределением. Для восстановления грубой версии скрытого изображения используют предсказанные острые края градиента VI3. Целевую функцию задают в виде
Е(I) = ||1 < к - В||2 + А|^1 — VI3||2, (8)
где новое пространственное априорное распределение — VI3||2 не усиливает малые значения градиента вблизи резких краев, обеспечивая таким образом резкое восстановление, даже с регуляризатором Гаусса. Для данного уравнения существует решение в аналитической форме.
Вторая фаза: уточнение ядра на основе итеративного обнаружения поддержки. Для того чтобы получить разреженную функцию импульсного отклика, в предыдущих методах [1-4] применяли жесткий или гистерезисный пороговый фильтр для оценки ядра. Однако при этих операциях пренебрегают внутренней структурой смаза, что
приводит к возможному снижению качества ядра. Сохранение только тех элементов, которые имеют большие значения, не может оставить без изменения сложную структуру функции импульсного отклика движения.
Данную проблему можно решить методом итеративного обнаружения поддержки (КБ), использование которого обеспечивает высокое качество восстановления смаза при удалении шума. Идея метода заключается в том, чтобы сохранить элементы функции импульсного отклика с большими значениями, итеративно ослабляя ограничения регуляризации. Тогда эти элементы не будут существенно изменены регуляризацией на следующем шаге улучшения ядра. При такой стратегии [5] проводят корректировку неточной оценки и обеспечивают быструю сходимость метода.
КБ-метод является итеративным. В начале каждой итерации ранее оцененное ядро к используется для формирования частичной поддержки: элементы с большими значениями помещаются в набор £г+1, а все остальные принадлежат множеству £г+1; £г+1 строится как
^ О : к] > е5}, (9)
где ] индексирует элементы в ядре к¿; — положительное число, изменяющееся с каждой итерацией для формирования частичной поддержки. Число настраивается с помощью правила "первого значительного скачка" [5], т.е. в ядре к сортируются все элементы в порядке увеличения их значений и вычисляются разницы А0, А1,.. .между каждыми двумя соседними элементами. Полученные величины последовательно просматривают, начиная с А0, и находят первый элемент А], удовлетворяющий неравенству
А3 > ||кг|и/(2кг),
где к — ширина ядра; ||кг||^ возвращает наибольшее значение в к, после чего значению ядра в позиции ] присваивается значение Затем для уточнения функции импульсного отклика минимизируется выражение:
Е(к) = 2||УГ ® к -УВ||2 + 7 £ к|. (10)
Различия между функцией (10) и ее аналогами, которые используются в [2], заключаются в определении термов регуляризации. В уравнении (10) в процессе адаптивной регуляризации применяется мягкое пороговое отсечение, что позволяет сосредоточиться на существенных значениях и, следовательно, автоматически поддерживает разреженность функции импульсного отклика, согласно процессу восстановления.
Для того чтобы найти минимум уравнения (10) при частичной поддержке, используется итеративный метод повторного взвешивания наименьших квадратов (IRLS). При записи свертки как перемножения матриц скрытое изображение I, ядро k и входное смазанное изображение B представляют в виде матрицы A, вектора Vk, и вектора VB соответственно. Уравнение (10) затем минимизируют путем итеративного решения линейных уравнений относительно Vk. В t-м проходе соответствующее линейное уравнение записывают в виде
[AT A + 7diag(Vs^-1)]Vt = AT Vb , (11)
где AT — транспонированная версия A; VS — векторная форма от S; ф = max(l\V^~l||1,1e-5) — вес, связанный с оценкой ядра на предыдущей итерации; diag() по входному вектору создает диагональную матрицу.
Уравнение (11) может быть решено методом сопряженных градиентов в каждом проходе. Так как функция импульсного отклика имеет небольшие размеры по сравнению с изображением, вычисления выполняются очень быстро.
Результирующее ядро отражает многие элементы с небольшими значениями, однако оно имеет разреженную структуру. Оптимизация на этой фазе сходится всего за несколько итераций. Изображение, восстановленное с помощью вычисленной функции импульсного отклика, содержит правильно реконструированные текстуры и небольшие края, с помощью которых проверяется качество оценки ядра.
Быстрая TV-l1 деконволюция. Предположение о соответствии данных гауссову распределению во многих случаях является не совсем верным. Как показано в литературе по данной тематике, это предположение приводит к некорректной обработке резко выделяющихся значений. Для достижения высокой надежности предлагается модель деконволюции ТУ-/1, которую можно записать в виде
E(I) = ||I <8> k — B|| + A||VI||. (12)
Она содержит нелинейные штрафные значения и для данных и для термов регуляризации. В предложенном решении используется эффективный метод попеременной минимизации, основанный на полуквадратичном разделении l1 -минимизации [6].
Для каждой точки вводится переменная v как эквивалент меры I < k — B. Обозначим w = (wx, wy) — градиенты изображения в двух направлениях. Использование этих вспомогательных переменных приводит к модификации целевой функции
E(I,w,v) = ±-||I®k — B — v||2 + ¿||VI — w||2 + ||v|| + A||w||, (13)
где первые два терма используются для обеспечения подобия между измерениями и соответствующими вспомогательными переменными. При в ^ 0 и в ^ 0 решение уравнения (13) приближается к уравнению (12).
При заданной формулировке уравнение (13) может быть решено с помощью эффективного метода попеременной минимизации (АМ), в котором поочередно производится вычисление I, ы и V независимо друг от друга (при этом остальные переменные фиксируются); ы и V инициализируются нулями.
На каждой итерации сначала производится вычисление I с начальными или оценочными значениями ы и V путем минимизации
Е(I; ы, V) = ||1 <8> к - В - ^^||2 + в||У! - ы||2. (14)
в
Уравнение (14) эквивалентно уравнению (13) после исключения констант. В соответствии с теоремой Парсеваля после преобразования Фурье уравнение (14) как квадратичная функция является основой решения, заданного в аналитическом виде при минимизации. Оптимальное значение I записывается как
р (1) = Р (к)Р (В + V) + в/в(Р (дх)Р (ыж) + Р (ду )Р (ыу)) (15)
( ) Р (к)Р (к)+ в/в(Р (дх)Р (дх)+ Р (ду )Р (ду )) ,
здесь используют те же обозначения, что и в уравнении (7).
При решении для ы и V, при полученной оценке I оптимизацию ы и V проводят независимо, так как данные параметры не связаны друг с другом в целевой функции, поскольку они принадлежат различным термам. Две отдельные целевые функции задают как:
Е(ы; I) = !||ы -VI||2 + вЛ||ы||2;
!2 (16) Е(V; I) = 21|V - (I < к - В)||2 + в||v||.
Каждая целевая функция в уравнении (16) сводится к задаче оптимизации с одной переменной, поскольку переменные для разных пикселов пространственно не связаны между собой. Оптимальные решения для всех ых могут быть получены в соответствии с формулой сжатия:
д I
ых = тт=Х^~ шах(|^!||2 - вЛ, 0), (17)
|| 2
здесь используется изотропный регуляризатор ТУ, т. е. ||2 = = ^/(^Х^У^+^^у^)2; значение ыу может быть вычислено аналогично с использованием указанного выше метода.
Вычисление V еще проще, так как оно является одномерным сжатием:
v = sign(1 ® k - B) max(||1 ® k - B|| - в, 0), (18)
где в и в — два небольших положительных числа, обеспечивающих подобие между дополнительными переменными и соответствующими термами.
Результаты, полученные в ходе вычислительных экспериментов. Примеры смазанных изображений (слева) и результаты восстановления (справа) показаны на рис. 2. Размеры изображения, пиксели: 406 х 462 (а), 539 х 397 (б), время восстановления составляет 8 с. Три цветовых канала обрабатываются независимо.
Также проведены эксперименты с несколькими композиционно сложными объектами, на которых изображения смазаны с крупными ядрами. При оценке ядра начальные значения ts и тг устанавливают адаптивно, используя метод, предложенный в работе [4]. Для оценки ядра размером 23 х 23 для изображения 814 х 701 требуется 23 с. Грубая оценка ядра занимает 10 с в мульти-масштабной обработке, а уточнение ядра — 13 с, так как оно выполняется только в наилучшем масштабе изображения.
б
Рис. 2. Результаты восстановления
Рис. 3. Восстановление изображения, содержащего мелкие детали. Смазанное изображение взято с официального сайта компании Adobe [7]
На рис.3,а в качестве примера показано изображение, содержащее много небольших, но структурно важных объектов, из-за которых сложно выполнить высококачественную оценку ядра. Результаты (рис. 3, б) метода [2] содержат несколько визуальных артефактов ввиду несовершенства оценки ядра. На рис.3, в приведен результат применения описываемого метода без выполнения выбора краев: по сравнению с изображением на рис. 3, г его качество хуже, что указывает на важность включения маски градиента M в определение целевой функции. На рис. 3, д представлено ядро, полученное для восстановленного изображения (см. рис. 3, г).
Заключение. Существующие методы устранения смаза при движении могут давать плохие результаты, когда в скрытом изображении присутствуют достаточно интенсивные, и в то же время узкие структуры. Предложен новый метод устранения смаза при движении с эффективным алгоритмом вычисления маски для адаптивного выбора используемых краев при оценке ядра. Уточнение ядра, основанное на ISD-методе, обусловливает еще большее повышение качества результата с адаптивной регуляризацией. На последнем шаге деконволюции используется терм данных 1\, устойчивый к шуму. Он решается по новой итерационной схеме оптимизации. В результате тщательного тестирования алгоритма было обнаружено, что благодаря использованию выборочной карты краев с его помощью удается восстанавливать изображения с очень большими ядрами смаза.
Высокое качество восстановления получено даже при больших степенях смаза, что отличает данный алгоритм от существующих методов восстановления.
СПИСОК ЛИТЕРАТУРЫ
1. Fergus R., Singh B., Hertzmann A., Roweis S. T., Freeman W. T. Removing camera shake from a single photograph // ACM Trans. Graph. - 25. - 787-794 (2006).
2. S h a n Q., J i a J., A g a r w a l a A. High-quality motion deblurring from a single image // ACM Trans. Graph. - 27 (2008). - P. 1566-1573.
3. J o s h i N., S z e l i s k i R., K r i e g m a n D. J. Psf estimation using sharp edge prediction // CVPR (2008). - P. 1-8.
4. C h o S., Lee S. Fast motion deblurring // ACM Trans. Graph. - 28 (2009).
5. Wang Y, Yin W. Compressed Sensing via Iterative Support Detection // CAAM Technical Report TR09-30 (2009). - P. 1-31.
6. Wang Y, Yang J., Yin W., Zhang Y. A new alternating minimization algorithm for total variation image reconstruction // SIAM Journal on Imaging Sciences. - 1. - 248-272 (2008).
7. URL: http://blogs.adobe.com/photoshopdotcom/2011/10/behind-all-the-buzz-deblur-sneak-peek.html?replytocom=12761
Статья поступила в редакцию 10.05.2012