3

В отличие от стандартных (и более сложных) сценариев де-размытия и суперразрешения, у меня есть доступ как к оригинальному (резкому) изображению G, так и к размытому варианту B. Я просто ищу ядро ​​размывания h. Таким образом, из-за B берется с помощью реальной камеры соотношение составляет:Вычисление размытия между двумя изображениями

B=G*h+N       (где * обозначает свертку и N некоторые аддитивный шум)

Естественно, это переограничено проблема, поскольку h мала по сравнению с G и B, и поэтому каждые несколько пикселей в паре изображений генерируют уравнение для записей h.

Но каков был бы самый простой способ реализовать это? Мои мысли до сих пор:

  • Перемещение в частотную область и выполнение деления (как предлагает this answer). Но это было бы неизбежно численно неустойчивым из-за шума?
  • Перекрестная корреляция. Я только нашел примеры для одномерных сигналов и не мог понять, как использовать в 2D-случае изображений.
  • Осторожно построение линейной системы с избыточным ограничением G'h'=B' ищет h', которая представляет собой векторную версию записей ядра h с использованием некоторой процедуры оптимизации. Но это очень утомительно, и матрица G' и вектор B' должны быть огромными по размеру.

Конкретный пример на любом языке программирования от C++ до MATLAB был бы чрезвычайно полезен.

+0

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

+0

, почему вы думаете, что в реальном сценарии «h» фиксируется для всех пикселей? – Shai

+1

Я бы предложил посмотреть: http://www.wisdom.weizmann.ac.il/~levina/papers/deconvLevinEtalCVPR11.pdf - проблема решена сложнее, они не предполагают знания 'G', но они имеют setp явно восстанавливающего 'h', который может быть полезен – Shai

ответ

1

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

Варианты 2 и 3, которые я предложил, на самом деле одинаковы и, по-видимому, являются правильным путем. Это также то, что было сделано на E-шаг предлагаемой статьи, связанной с @Shai. Постановка сложной проблемы на самом деле довольно проста.

Чтобы правильно поставить эти уравнения мы используем тот факт, что скалярное произведение каждого блок размера ядра центрированного вокруг некоторого пикселя в G с 180 градусов повернута версией h должны равняться соответствующим пикселем в B. Это непосредственно вытекает из того факта, что B и G связаны сверткой, поэтому блоки в G относятся к пикселям в B путем взаимной корреляции (и, следовательно, поворота на 180 градусов).

код MATLAB теперь становится:

%inputs: B,G - gray level blurred and sharp images respectively (double) 
%  szKer - 2 element vector specifying the size of the required kernel 
%outputs: mKer - the recovered kernel, 
%   imBsynth - the sharp image convolved with the recovered kernel 
% 
%example usage: mKer = calcKer(B, G, [11 11]); 

function [mKer, imBsynth] = calcKer(B, G, szKer) 

    %get the "valid" pixels from B (i.e. those that do not depend 
    %on zero-padding or a circular assumption 
    imBvalid = B(ceil(szKer(1)/2):end-floor(szKer(1)/2), ... 
     ceil(szKer(2)/2):end-floor(szKer(2)/2)); 

    %get a matrix where each row corresponds to a block from G 
    %the size of the kernel 
    mGconv = im2col(G, szKer, 'sliding')'; 

    %solve the over-constrained system using MATLAB's backslash 
    %to get a vector version of the cross-correlation kernel 
    vXcorrKer = mGconv \ imBvalid(:); 

    %reshape and rotate 180 degrees to get the convolution kernel 
    mKer = rot90(reshape(vXcorrKer, szKer), 2); 

    if (nargout > 1) 
     %if there is indeed a convolution relationship between B and G 
     %the following will result in an image similar to B 
     imBsynth = conv2(G, mKer, 'valid'); 
    end 

end 

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

Смежные вопросы