在MATLAB中进行去模糊运动模糊图像

时间:2014-08-25 06:08:37

标签: matlab image-processing motion

我目前正在制作节目,我需要在照片上自动执行运动不模糊。目前,我为forLEN制作THETA循环,从LEN 0:50THETA 1:180进行猜测。以这种方式产生大量运动不模糊的图像 - 一些是正确的,一些是错误的。现在这是我的问题:我如何确定哪一组参数产生最接近原始照片的参数?

我正在考虑使用像素比较。对此有何想法?

这是我生成的图片示例:

http://dl.dropboxusercontent.com/u/81112742/Capture.JPG

1 个答案:

答案 0 :(得分:1)

如果您可以访问原始的干净图像,我会为您生成的所有图像计算Peak Signal to Noise Ratio (PSNR),然后选择最高PSNR 的图像。 Amro发布了关于如何为图片计算此内容的非常好的帖子,可在此处找到:https://stackoverflow.com/a/16265510/3250829

但是,对于自我控制,我会在这里发布代码。假设您的原始图像存储在变量I中,并假设您的重建(未模糊)图像存储在变量K中。因此,要计算PSNR,您需要先计算Mean Squared Error,然后使用它来计算PSNR。换句话说:

mse = mean(mean((im2double(I) - im2double(K)).^2, 1), 2);
psnr = 10 * log10(1 ./ mean(mse,3));

MSE和PSNR的等式是:

来源:Wikipedia


因此,要在代码中使用它,您的for循环应如下所示:

psnr_max = -realmax;
for LEN = 0 : 50
    for THETA = 1 : 180
        %// Unblur the image
        %//...
        %//...
        %// Compute PSNR
        mse = mean(mean((im2double(I) - im2double(K)).^2, 1), 2);
        psnr = 10 * log10(1 ./ mean(mse,3));
        if (psnr > psnr_max) %// Get largest PSNR and get the
            LEN_final = LEN; %// parameters that made this so
            THETA_final = THETA;
            psnr_max = psnr;
        end
    end
end

此循环将遍历每对LENTHETA,而LEN_finalTHETA_final将是那些为您提供最佳重建(非模糊)的参数图像。