在MATLAB中进行去模糊运动模糊图像 [英] Deblurring motion blurred images in MATLAB
问题描述
我目前正在制作节目,我需要在照片上自动执行运动不模糊。目前,我为 LEN
和 THETA
为循环设置 ,猜测来自
LEN
0:50
和 THETA
来自 1:180
。以这种方式产生大量运动不模糊的图像 - 一些是正确的,一些是错误的。现在这是我的问题:我如何确定哪一组参数产生最接近原始照片的参数?
我正在考虑使用像素比较。对此有何看法?
这是我生成的图片示例:
因此,要在代码中使用它,循环的应该如下所示:
psnr_max = -realmax;
for LEN = 0:50
for THETA = 1:180
%// Unblur image
%// ...
%// ...
%//计算PSNR
mse = mean(mean((im2double(I) - im2double(K))。^ 2,1),2);
psnr = 10 * log10(1 ./ mean(mse,3));
if(psnr> psnr_max)%//获得最大的PSNR并获得
LEN_final = LEN; %//参数使得
THETA_final = THETA;
psnr_max = psnr;
结束
结束
结束
这个循环将遍历每对 LEN
和 THETA
,以及 LEN_final
, THETA_final
将是那些为您提供最佳重建(非模糊)图像的参数。
I'm currently working on program and I need to automatic perform motion un-blurring on a picture. Currently, I make a for
loop for LEN
and THETA
, guessing from LEN
0:50
and THETA
from 1:180
. There are plenty of motion un-blurred pictures produce in this way - some correct and some are wrong. Now here is my problem: How do I actually determine which set of parameters yields the one most closest to original photo?
I'm thinking of using pixel comparison. Any idea on this?
Here's a pictorial example of what I generated:
http://dl.dropboxusercontent.com/u/81112742/Capture.JPG
If you have access to the original clean image, I would compute the Peak Signal to Noise Ratio (PSNR) for all of the images you have generated, then choose the one with the highest PSNR. Amro posted a very nice post on how to compute this for images and can be found here: https://stackoverflow.com/a/16265510/3250829
However, for self-containment, I'll post the code to do it here. Supposing that your original image is stored in the variable I
, and supposing your reconstructed (un-blurred) image is stored in the variable K
. Therefore, to calculate the PSNR, you would need to calculate the Mean Squared Error first, then use it to calculate the PSNR. In other words:
mse = mean(mean((im2double(I) - im2double(K)).^2, 1), 2);
psnr = 10 * log10(1 ./ mean(mse,3));
The equations for MSE and PSNR are:
Source: Wikipedia
As such, to use this in your code, your for
loops should look something like this:
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
This loop will go through each pair of LEN
and THETA
, and LEN_final
, THETA_final
will be those parameters that gave you the best reconstruction (un-blurring) of the image.
这篇关于在MATLAB中进行去模糊运动模糊图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!