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:
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 variableK
. 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: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:This loop will go through each pair of
LEN
andTHETA
, andLEN_final
,THETA_final
will be those parameters that gave you the best reconstruction (un-blurring) of the image.