Warning

# Poisson Image Editing

The two following labs deal with Poisson image editing, which can be used for image stitching, fusion, cloning, smoothing, context highlighting, color to gray conversion, and other applications.

The theory behind the labs can be found in the lectures:

Use poisson.m to check your solution.

## Computing image gradients, their merge, and divergence

1a: Implement a function that for a given image computes its gradients (calc_grad.m) - 0.5 points

• Use convolution with simple 1D finite differences kernels in X and Y direction.
• Make sure the gradients at image boundaries are set to zero.

1b: Implement a function that computes a mask preferring gradients with greater magnitude (get_mask.m) - 0.5 points

• In each pixel compare magnitudes of gradients in the first and in the second image. When the first image has greater magnitude store 0 in the mask otherwise store 255.

1c: Implement a function that merges two images according to a given mask (merge_image.m) - 0.5 points

• In each pixel if the mask has value 0 the output color is taken from the pixel of the first image otherwise the pixel color in the second image is used.

1d: Implement a function that merges two input gradient fields according to a given mask (merge_grad.m) - 0.5 points

• In each pixel if the mask has value 0 the output gradient vector is taken from the first image otherwise the gradient computed in the second image is used.

1e: Implement a function that computes divergence of a given gradient field (calc_div.m) - 0.5 points

• During the computation try to avoid a situation where the output divergence is shifted by one pixel.

Compare your results to the reference:

## Solving Poisson equation iteratively using Gauss-Seidel method

2: Implement a function that solves Poisson equation by discretizing it into a system of linear equations which is solved iteratively using Gauss-Seidel method (solve_GS.m) - 2.5 points

• Try to perform all computations implicitly without the need to build the linear system explicitly.
• Try to provide good initialization, set sufficient number iterations, and resolve boundary conditions.
• Try to reduce the number of equations to pixels for which the value is not known (use the given mask and/or bounding box).

Compare your results to the reference:

## Solving Poisson equation directly using Fourier transform

3: Implement a function that solves Poisson equation by deconvolution in the frequency domain (solve_FT.m) - 4 points

• Compute frequency domain version of the discreet Laplace operator.
• Use Wiener filtration to avoid division by zero during deconvolution.
• Try to normalize the output to have similar colors and contrast as the original images.

Compare your results to the reference:

## Testing the resulting implementation

4a: Do image cloning using images and mask in the data folder (mona_lisa.png, ginevra_benci.png, mona_mask.png) - 0.5 points

• Merge the images mona_lisa.png and ginevra_benci.png using merge_image.m function to see the discrepancy.
• Compute gradients of images mona_lisa.png and ginevra_benci.png using calc_grad.m.
• Merge the gradients using merge_grad.m and compute the divergence using calc_div.m.
• Solve Poisson equation using solve_GS.m and solve_FT.m.
• Compare output quality and processing speed.

4b: Do image fusion to simulate HDR photo using images in the data folder (car_low.png and car_high.png) - 0.5 points

• Compute gradients for images car_low.png and car_high.png using calc_grad.m.
• Compute merging mask using get_mask.m, merge the gradients using merge_grad.m, and compute the divergence using calc_div.m.
• Solve Poisson equation using solve_FT.m.

Compare your results to the reference:

When you are done, upload the complete zip archive containing your implemented files to BRUTE:
• calc_grad.m
• get_mask.m
• merge_image.m
• merge_grad.m
• calc_div.m
• solve_GS.m
• solve_FT.m
• poisson.m

as well as your final output images generated in tasks 4a and 4b.

Keep the files in the root of the zip archive (zip directly the files, NOT a folder containing the files). The evaluation system searches for the files just in the root of zip archive.

The points will be assigned manually by TA after the deadline.