如何对图片进行抗锯齿以消除图像中的抖动

问题描述 投票:0回答:2

我正在尝试对图片进行抗锯齿处理,并尝试了几种方法,包括使用 open CV、使用 matplotlib 以及使用 PIL。但还是摆脱不了那种生涩的感觉。 enter image description here

这是抗锯齿的图片。 我尝试的第一个方法是使用opencv。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('LENS_MODEL.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show() 

但这似乎并没有带来太大的改善。 enter image description here

第二种方法我用matplotlib尝试过,但仍然无法摆脱抖动,图像质量更差。

fig, axs = plt.subplots(2, 2, figsize=(5, 6), constrained_layout=True)
axs[0, 0].imshow(img, interpolation='nearest')


for ax, interp in zip(axs.flat[1:],
                             ['nearest', 'antialiased', 'antialiased']):
    ax.imshow(img, interpolation=interp,
              cmap='RdBu_r')
    ax.set_title(f"interpolation='{interp}'")
plt.show()

enter image description here

有什么建议我如何使用图像抗锯齿来消除图像中的这种尖锐过渡?我也尝试过 PIL 但似乎仍然没有任何改进...

python image opencv image-processing antialiasing
2个回答
0
投票

应用强高斯滤波器来平滑“锯齿”,然后大幅增加对比度以通过引起饱和来减少模糊。这只适用于二值图像。

此方法无法保留尖角。

enter image description here


0
投票

这是一个代码示例,用于实现已接受答案中所做的事情

def apply_antialiasing(image, blur_strength=10):
    # apply gaussian blur. control blur "strength" with the blur_strength parameter
    blurred = cv.GaussianBlur(image, (0,0), sigmaX=blur_strength, sigmaY=blur_strength, borderType = cv.BORDER_DEFAULT)
    # high contrast (just binarize your image in place)
    blurred[blurred <= 127] = 0
    blurred[blurred > 127] = 255

    # aa is an 8 bits numpy array
    return blurred.astype('uint8')

你用它:

# load your image
aa = apply_antialiasing(your_image)
# display aa as an image here

希望这对某人有帮助。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.