Python unsharp mask

omni picture omni · Sep 8, 2015 · Viewed 19.9k times · Source

I want to use unsharp mask on a 16 Bit Image.

The Image has 640 x 480 Pixels and is saved in a NumPy array.

I have done the following:

  • blurred the image with a Gaussian filter (three different methods)
  • then, created a mask by subtracting the blur Image form the original
  • finally, added the mask multiplied by WightFaktor to the original Image

But it doesn´t really work.

Here is the Python code:

Gaussian1 = ndimage.filters.gaussian_filter(Image,sigma=10.0)
Gaussian2 = filters.gaussian_filter(Image,sigma=10.0)
Gaussian3 = cv2.GaussianBlur(Image,(9,9),sigmaX=10.0)

Mask1 = Image - Gaussian1
UnsharpImage = Image + (WightFaktor*Mask1)

Answer

Martin Evans picture Martin Evans · Sep 8, 2015

To get an unsharp image using OpenCV you need to use the addWeighted function as follows:

import cv2

image = cv2.imread("lenna.jpg")
gaussian_3 = cv2.GaussianBlur(image, (0, 0), 2.0)
unsharp_image = cv2.addWeighted(image, 1.5, gaussian_3, -0.5, 0, image)
cv2.imwrite("lenna_unsharp.jpg", unsharp_image)

Giving the following kind of result:

enter image description here