Вопрос алгоритма слепой деконволюции - PullRequest
2 голосов
/ 14 апреля 2009

Я изучал деконволюцию,
и наткнулся на деконволюцию Ричардсона-Люси ,
Я думал о написании простой программы для пост-обработки с использованием этого метода,
Кто-нибудь знает, где я могу найти полные реализуемые алгоритмы или исходный код, который я могу изучить и поиграть?

Желательно на языке C ++ или matlab.

Я прочитал несколько книг, но они немного общие и слишком теоретические.

спасибо, Чарльз Моуби.
но у меня все еще есть проблемы с поиском файлов .m в Интернете,
все, что я получаю, это справочная форма, а не реальный файл.
очень признателен, если вы можете предоставить более подробную информацию.
заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 14 апреля 2009

MATLAB имеет достойную реализацию (найдите в Google corelucy.m и deconvlucy.m или загрузите демонстрационные наборы инструментов MATLAB и обработки изображений).

MathWorks имеет документацию на своем веб-сайте:

http://www.mathworks.com/access/helpdesk/help/toolbox/images/bqqhld4.html

Внешний цикл (настройка функции разброса точек деконволюции, выполнение итераций) находится здесь:
http://ecco2.jpl.nasa.gov/opendap/hyrax/matlab/images/images/deconvlucy.m

Внутренний цикл (основная часть алгоритма LR):
https://svn.ecdf.ed.ac.uk/repo/ph/IGM/matlab/generic/images/corelucy.m

Ужасно приятно, что НАСА принимает части MATLAB!

1 голос
/ 14 апреля 2009

Я бы предложил использовать MATLAB или альтернативу F / OSS GNU Octave . Они намного лучше для такого рода вещей, поскольку у них есть библиотеки подпрограмм обработки изображений, а свертка - сильно оптимизированная встроенная функция.

0 голосов
/ 01 октября 2017

Вот очень простая реализация Matlab деконволюции Ричардсона-Люси:

function result = RL_deconv(image, PSF, iterations)
    % to utilise the conv2 function we must make sure the inputs are double
    image = double(image);
    PSF = double(PSF);
    latent_est = image; % initial estimate, or 0.5*ones(size(image)); 
    PSF_HAT = PSF(end:-1:1,end:-1:1); % spatially reversed psf
    % iterate towards ML estimate for the latent image
    for i= 1:iterations
        est_conv      = conv2(latent_est,PSF,'same');
        relative_blur = image./est_conv;
        error_est     = conv2(relative_blur,PSF_HAT,'same'); 
        latent_est    = latent_est.* error_est;
    end
    result = latent_est;

original = im2double(imread('lena256.png'));
figure; imshow(original); title('Original Image')

enter image description here

hsize=[9 9]; sigma=1;
PSF = fspecial('gaussian', hsize, sigma);
blr = imfilter(original, PSF);
figure; imshow(blr); title('Blurred Image')

enter image description here

res_RL = RL_deconv(blr, PSF, 1000); toc;
figure; imshow(res_RL2); title('Recovered Image')

enter image description here

Вы также можете работать в частотной области, а не в пространственной области, как указано выше. В этом случае код будет:

function result = RL_deconv(image, PSF, iterations)
fn = image; % at the first iteration
OTF = psf2otf(PSF,size(image)); 
for i=1:iterations
    ffn = fft2(fn); 
    Hfn = OTF.*ffn; 
    iHfn = ifft2(Hfn); 
    ratio = image./iHfn; 
    iratio = fft2(ratio); 
    res = OTF .* iratio; 
    ires = ifft2(res); 
    fn = ires.*fn; 
end
result = abs(fn); 

Чтобы избавиться от артефактов на краях, вы можете отразить входное изображение по краям, а затем обрезать зеркальные биты или использовать Matlab image = edgetaper(image, PSF) перед вызовом RL_deconv.

Собственная реализация Matlab deconvlucy.m немного сложнее, кстати, ее исходный код можно найти здесь и использует ускоренную версию базового алгоритма .

0 голосов
/ 18 апреля 2009

Если вы хотите использовать алгоритм деконволюции Ричардсона-Люси, который входит в набор инструментов обработки изображений MATLAB ( DECONVLUCY ), вам сначала нужно получить набор инструментов обработки изображений =). В другой ответ, который я дал на вопрос SO , я упомянул, как вы можете получить испытания MATLAB и его различных наборов инструментов, если у вас их еще нет. После того, как вы получите набор инструментов, вы, вероятно, сможете просмотреть исходный код DECONVLUCY (файлы .m или .c), чтобы изучить алгоритм и выяснить, как он работает.

...