Image Deblurring and noise reduction in python Vincent DeVito Computer Systems Lab 2009-2010
Abstract The goal of my project is to take an image input, artificially blur it using a known blur kernel, then using deconvolution to deblur and restore the image, then run a last step to reduce the noise of the image. The goal is to have the input and output images be identical with a blurry intermediate image.
Background Running goal for image processors and photo editors Many methods of deconvolution exist Many utilize the Fourier Transform Current progress focused on blur kernel estimation Better kernel more accurate, clear output image
Related Projects The group of Lu Yuan, et al. designed a project with blurry/noisy image pairs Blurry image intensity + noisy image sharpness + deconvolution = sharp, deblurred output image The group of Rob Fergus, et al. designed a project to estimate blur kernel from naturally blurred image A few inputs + kernel estimation algorithm + deconvolution = deblurred output image with few artifacts
Application Photography Improve image quality Restore image From Fergus, et al.
Application (Cont.) Machine Vision Requires input images to be of good clarity Blur could ruin techniques such as edge detection Intermediate step
Fourier Transform Extremely useful for convolution and deconvolution Convert image to frequency domain Utilizes the formula eθi = cosθ + isinθ Usually display the magnitude, since DFT produces complex number (a + bi). Magnitude = (a2 + b2)1/2 Scale to 0-255 range O(n2)
Fourier Transform (Cont.) Separate sums 1D DFT in one direction (vertical/horizontal), then in the other O(nlog2n)
Fourier Transform (Cont.) Inverse Fourier Transform converts back to spatial domain Also possible to separate Need full complex number from DFT or FFT Original Picture Magnitude Only Phase Only
Completed Work Successful convolution program Takes any image (square image of size 128x128 or smaller for best runtime) and blurs it using any given blur kernel
Completed Work (Cont.) Image deconvolution using a given kernel Inconsistent, depending on what type of kernel Noisy
Current Work Noise Reduction for deblurred output image My algorithm Tried a few simple methods One edge-sensitive Gaussian smoothing algorithm Created my own selective Gaussian smoothing noise reduction algorithm My algorithm Average of 3x3 neighborhood Average of all pixels in neighborhood within range of average Use unsharp sharpening filter to resharpen edges
Picture after My Noise Reduction Algorithm Current Work (Cont.) Picture after Deblurring Picture after Edge Sensitive Noise Reduction Picture after My Noise Reduction Algorithm
Full Process Original Picture Blur Kernel Blurred Picture Deblurred Picture Edge Sensitive Noise My Noise Reduction Reduction Algorithm
Future Work Expand deconvolution algorithm to include other forms of blur Research into deconvolution based on kernel type Kernel estimation Color restoration