Вывод обратного фильтра ядра свертки изображения - PullRequest
4 голосов
/ 17 января 2010

У кого-нибудь есть идеи, как рассчитать инверсию двумерного фильтра?

Допустим, у меня есть фильтр 3x3:
0 1 0
1 1 1
0 1 0
Я хочу найти это наоборот. Это легко сделать с помощью DFT. Но скажем, я хочу сделать это путем свертки. Вот в чем проблема, Matlab символика - не моя специальность. Предполагая, что есть обратный фильтр 3X3, это означает, что свертка двух приведет к:
0 0 0
0 1 0
0 0 0
Задача состоит в том, чтобы создать правильный набор уравнений для этого и решить его. Делать это с символами легко, но я не смог.

Есть идеи? Спасибо.

P.S. Я не уверен, что есть обратный фильтр для этого, так как он имеет нули в DTFT.

Более того, кто-то должен разрешить использование Latex на этом форуме, как это делает MathOverflow.

Ответы [ 5 ]

5 голосов
/ 18 января 2010

Пусть h [n] будет конечной импульсной характеристикой 1D-фильтра. Что это означает о его обратном фильтре? Обратное не может быть FIR.

Доказательство. Пусть H (омега) G (омега) = 1 для всех омега, где H - DTFT для h [n], а G - DTFT для g [n]. Если h [n] является FIR, то g [n] должен быть IIR.

Конечно, есть способы приблизить обратный БИХ-фильтр с КИХ-фильтром. Основным методом является адаптивная фильтрация, например алгоритм наименьших средних квадратов (LMS). Или просто обрезать БИХ-фильтр. Вам все еще нужно беспокоиться о стабильности.

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

РЕДАКТИРОВАТЬ: Пусть y [n] = b0 x [n-0] + b1 x [n-1] + ... + bN x [n-N]. Пусть это уравнение характеризует прямую систему, где у - выход, а х - вход. По определению, импульсный отклик является выходом, когда на входе есть импульс: h [n] = b0 d [n-0] + b1 d [n-1] + ... + bN d [n-N]. Этот импульсный отклик имеет конечную длину N + 1.

Теперь рассмотрим обратную систему, где x - это выход, а y - это вход. Тогда импульсный отклик описывается рекуррентным уравнением d [n] = b0 h [n] + b1 h [n-1] + ... + bN h [n-N]. Эквивалентно, b0 h [n] = d [n] - b1 h [n-1] - ... - bN h [n-N].

Без ограничения общности предположим, что b0 и bN отличны от нуля. Для любого m, если h [m] отлично от нуля, то h [m + N] также отлично от нуля. Поскольку эта система имеет обратную связь, ее импульсный отклик бесконечно долго. QED.

Причинность не имеет значения. Обратная задержка - это аванс, и наоборот. Ни задержка, ни опережение не изменяют конечность импульсного отклика. Сдвиг бесконечного импульсного отклика влево или вправо; это все еще бесконечно.

РЕДАКТИРОВАТЬ 2: Для пояснения, это доказательство не связано с моим первоначальным "доказательством". Один был в частотной области, другой во временной области.

3 голосов
/ 30 января 2010

На практике одним полезным решением является деконволюция Винера http://en.wikipedia.org/wiki/Wiener_deconvolution, которая в основном в пространстве Фурье делится на спектр данного фильтра. Нули обрабатываются добавлением термина выдумки: вместо 1 / H (w) используйте H (w) / (abs (H (w)) ^ 2 + c), где H (w) - дискретное преобразование Фурье фильтра h (x) (добавьте 2-е измерение по своему усмотрению) и «w» должно быть омега. Константа выбирается исходя из уровня шума сигнала или изображения.

1 голос
/ 14 января 2019

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

Например, фильтр 1D [1, -1] - это, возможно, самое простое дискретное дифференциальное приближение, которое существует.

Его матрица будет иметь две диагонали 1 на главной диагонали и -1 на первой диагонали.

Обратный будет встроенным фильтром. БИХ-фильтр с бесконечным следом 1 с. Поскольку наша матрица имеет ограниченный размер, на практике это будет означать заполнение матрицы единицами всюду на одной стороне диагонали.

1 голос
/ 25 января 2010

Для отдельного фильтра (т. Е. Такого, в котором вы можете извлечь горизонтальный и вертикальный фильтр, который можно применить в любом порядке и дать тот же результат, что и у составного 2-D фильтра), вы можете попытаться вычислить обратный каждого по отдельности.

Обратный фильтр H (w) имеет вид G (w) = 1 / H (w), поэтому один из способов сделать это - взять импульсный отклик (коэффициенты временной области h [n]) и обратный -ДФТ им. Не всегда легко получить аналитическое выражение для такого фильтра, поэтому вы можете либо вычислить его численно (приближенно с желаемой точностью), либо выполнить адаптивную обратную фильтрацию, как предложил Стив. См. Widrow и Stearn's Адаптивная обработка сигналов для получения дополнительной информации об этом последнем методе.

0 голосов
/ 15 января 2019

Получение обратного ядра данного двумерного ядра свертки

Это, по сути, обобщение вопроса - Вывод обратного фильтра ядра свертки изображения .

Постановка задачи

Для данного сверточного ядра $ f \ in \ mathbb {R} ^ {m \ times n} $ найдите свое обратное ядро, $ g \ in \ mathbb {R} ^ {p \ times q} $ такое, что $ f \ ast g = h = \ delta $.

Решение I

Можно построить матричную форму оператора свертки.
Форма Matrix может дублировать различные режимы фильтрации изображений (эксклюзивные):

  • Граничные условия (Применяется как заполнение изображения и применяется Свертка в действительном режиме).
    • Zero Padding Заполнение изображения нулями.
    • Круговой
      Использование кругового / периодического продолжения изображения. Свертка в частотной области соответствия.
    • Репликация
      Репликация значений ребер (ближайший сосед).
      Обычно создает наименьшее количество артефактов в реальном мире.
    • Симметричный
      Зеркальное отображение изображения по краям.
  • Форма свертки
    • Полное Размер вывода в полном объеме - $ \ left (m + p - 1 \ right) \ times \ left (n + q - 1 \ right) $.
    • То же самое
      Размер вывода соответствует размеру ввода («Изображение»).
    • Действительно
      Размер вывода - это размер полного перекрытия изображения и ядра.

При использовании Фильтрации изображений выходной размер соответствует входному размеру, поэтому матричная форма является квадратной, а обратная определяется.
При использовании Convolution Matrix матрица может быть не квадратной (если не выбрано «Same»), поэтому следует вывести псевдообратную форму.

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

Решение II

В этом решении обратное вычисляется с использованием минимизации следующей функции стоимости:

$$ \ arg \ min_ {g} \ frac {1} {2} {\ left \ | f \ ast g - h \ right \ |} _ {2} ^ {2} $$

Производная определяется по:

$$ \ frac {\ частичный \ frac {1} {2} {\ left \ | f \ ast g - h \ right \ |} _ {2} ^ {2}} {\ частичный g} = f \ star \ left (f \ ast g - h \ right) $$

Где $ \ star $ - операция корреляции.

На практике свертка в целевой функции выполняется в режиме full (идиома MATLAB).
На практике это делается:

* * 1068

Там, где код переворачивается mF для Correaltion и используется допустимый (в матричной форме это - Adjoint / Transpose -> вывод меньше).

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

for ii = 1:numIteraions
    mObjFunGrad = conv2(conv2(mF, mG, 'full') - mH, mF(end:-1:1, end:-1:1), 'valid');
    mG          = mG - (stepSize * mObjFunGrad);
end

Полный код доступен в моем StackOverflow Q2080835 GitHub Repository .

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