Python非锐化掩码

时间:2015-09-08 09:52:49

标签: python opencv numpy image-processing gaussian

我想在16位图像上使用非锐化遮罩。 图像具有640 x 480像素,并保存在numpy数组中。在第一步中,我使用高斯滤波器(三种不同的方法)模糊图像。在此之后,我通过从原始图形中减去模糊图像来创建蒙版。在最后一步,我将面具乘以wightfaktor添加到原始图像。但它确实不起作用。

这是Python代码:

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)
是的,有人帮助过我吗?

2 个答案:

答案 0 :(得分:14)

要使用OpenCV获取不清晰的图像,您需要使用addWeighted功能,如下所示:

import cv2

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

给出以下类型的结果:

enter image description here

答案 1 :(得分:1)

一个人也可以使用scikit-imagePIL的{​​{1}}实现:

unsharp mask

具有以下输出:

enter image description here

还用import numpy as np import matplotlib.pylab as plt from PIL import Image, ImageFilter from skimage.io import imread from skimage.filters import unsharp_mask # with scikit-image im = imread('images/lena.jpg') im1 = np.copy(im).astype(np.float) for i in range(3): im1[...,i] = unsharp_mask(im[...,i], radius=2, amount=2) # with PIL im = Image.open('images/lena.jpg') im2 = im.filter(ImageFilter.UnsharpMask(radius=2, percent=150)) # plot plt.figure(figsize=(20,7)) plt.subplot(131), plt.imshow(im), plt.axis('off'), plt.title('Original', size=20) plt.subplot(132), plt.imshow(im1), plt.axis('off'), plt.title('Sharpened (skimage)', size=20) plt.subplot(133), plt.imshow(im2), plt.axis('off'), plt.title('Sharpened (PIL)', size=20) plt.show() 在Martin Evans代码上添加了一些详细的步骤/注释:

opencv-python

enter image description here