Copyright © Fred Weinhaus My scripts are available free of charge for non-commercial (non-profit) use, ONLY. For use of my scripts in commercial (for-profit) environments or non-free applications, please contact me (Fred Weinhaus) for licensing arrangements. My email address is fmw at alink dot net. If you: 1) redistribute, 2) incorporate any of these scripts into other free applications or 3) reprogram them in another scripting language, then you must contact me for permission, especially if the result might be used in a commercial or for-profit environment. Usage, whether stated or not in the script, is restricted to the above licensing arrangements. It is also subject, in a subordinate manner, to the ImageMagick license, which can be found at: http://www.imagemagick.org/script/license.php Please read the Pointers For Use on my home page to properly install and customize my scripts. |
Deblurs an image in the frequency domain using an ideal deblurring filter for either motion blur or lens defocus. |
last modified: May 15, 2023
USAGE: cameradeblur [-t type] [-a amount] [-r rotation] [-n noise] infile outfile
-t ... type ........ type of blur; choices are: motion (or m) or PURPOSE: To deblur an image in the frequency domain using an ideal deblurring filter for either motion blur or lens defocus. DESCRIPTION: CAMERADEBLUR deblurs an image in the frequency domain using an ideal frequency domain deblurring filter for either motion blur or lens defocus. The motion blur filter in the frequency domain is just an optionally rotated 1D sinc function. The lens defocus filter in the frequency domain is just a jinc function. The user specifies the parameters needed to create those functions directly as images. An explicit filter image is not input to the script. The internally generated filter will then be divided into the Fourier transform of the image created with +fft and the results will then be returned to the spatial domain via the inverse Fourier transform using +ift. Any alpha channel on the filter will be removed automatically before processing. If the image has an alpha channel it will not be processed, but simply copied from the input to the output. ARGUMENTS: -t type ... TYPE of blur. The choices are: motion (or m) and defocus (or d). The default=defocus. -a amount ... AMOUNT of blur. This is either the length of the motion blur or the diameter of the lens defocus. Values are float>0. The default=10. -r rotation ... ROTATION angle in degrees specified clockwise from horizontal for the motion blur. Values are floats with -180<=rotation<=180. The default=0. -n noise ... NOISE is the estimate of the small constant added to the denominator in the division process and represents the noise to signal power ratio. Values are floats>=0. Usually, one simply uses trial an error with an arbitrary small value for the noise, typically, in the range of about 0.001 to 0.0001. However, it can be estimated from the variance of a nearly constant section of the image (to get the noise variance) divided by an estimate of the variance of the whole image (to get the signal variance). Values are floats>=0. The default=0 REQUIREMENTS: IM version 6.5.4-7 or higher, but compiled with HDRI enabled in any quantum level of Q8, Q16 or Q32. Also requires the FFTW delegate library. LIMITATIONS: This script works well only with even, square images. Otherwise, the FFT will pad them with black to conform. However, there will be excessive ringing due to the color discontinuity associated with the padding. This even, square limitation is a ramification of the current IM implementation that needs addressing at some future time. It is not a limitation of FFTW. See Fourier Transform with ImageMagick, for more details. CAVEAT: No guarantee that this script will work on all platforms, nor that trapping of inconsistent parameters is complete and foolproof. Use At Your Own Risk. |
Removing Horizontal Motion Blur |
||
Input |
Log Enhanced |
Arguments: |
Removing Horizontal Motion Blur With Added Noise |
||
Input |
Log Enhanced |
|
|
||
Arguments: |
Arguments: |
Arguments: |
Removing Lens Defocus |
||
Input |
Log Enhanced |
Arguments: |
Removing Lens Defocus With Added Noise |
||
Input |
Log Enhanced |
|
|
||
Arguments: |
Arguments: |
Arguments: |
Removing Lens Defocus From A Real Image |
||
Input |
|
|
Deduce Degradation |
cepstrum script with default arguments |
cepstrum result with |
Deduce Noise To Signal Power |
convert image[150x50+10+10] image -format \ |
red rectangle used |
Restore Image |
Arguments: |
|
What the script does is as follows:
This is equivalent to the following IM commands for horizontal motion blur.
|