python中的图像增强技术

磐创AI

    关键词:- 对数变换、幂律变换、图像增强、对比度拉伸
    数字图像处理 (DIP) 对不同类别的图像执行各种操作,例如图像增强、图像分析、图像压缩、图像变换等。
    图像增强用于对图像进行操作,以提取用户识别的所需和重要的关键特征,例如:调整图像的对比度值。
    
    DIP的基本步骤
    因此,在本博客中,我们将讨论图像锐化/增强技术。
    图像锐化和恢复有助于通过关注已识别的特征、调整明暗区域之间的对比度、减少噪点、升级相机焦距、减少运动模糊等来创建更好的图像。
    图像锐化明确用于改善图像描述,例如边界、角落、对比度、边缘、强度等。
    
    以下是一些图像预处理技术,用于通过观察其邻域像素值来修改当前像素的强度值。
    对比拉伸
    对比拉伸称为归一化,用于拉伸强度值的范围以提高图像的对比度。
    Python/OpenCV 可以通过使用 min_max 归一化的 cv2.normalize() 方法进行对比度拉伸。
    import cv2
    import numpy as np
    # read image
    img = cv2.imread("messi.jpg")
    # normalize float versions
    norm_img1 = cv2.normalize(img, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
    # scale to uint8
    norm_img1 = (255*norm_img1).astype(np.uint8)
    cv2.imshow('original',img)
    cv2.imshow('normalized1',norm_img1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    图像阈值
    图像阈值用于将对象分割成两类,即前景和背景。全局图像阈值由 Otsu 方法完成。
    阈值类型
    1. cv2.THRESH_BINARY
    2. cv2.THRESH_BINARY_INVY
    3. cv2.THRESH_TRUNCY
    4. cv2.THRESH_TOZEROY
    5. cv2.THRESH_TOZERO_INVYimg
    
    全局阈值
    对数变换
    对数变换用于将图像的每个像素值替换为其对数值,以增强较低强度值的对比度。它有助于缩小较亮的像素值范围并扩大暗像素。当需要减少图像的偏度分布以获得更好的解释时,可以应用此转换。
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    # Read an image
    image = cv2.imread('baby.jpg')
    # Apply log transformation method
    c = 255 / np.log(1 + np.max(image))
    log_image = c * (np.log(image + 1))
    # Specify the data type so that
    # float value will be converted to int
    log_image = np.array(log_image, dtype = np.uint8)
    # Display both images
    plt.imshow(image)
    plt.show()
    plt.imshow(log_image)
    plt.show()
    
    对数变换
    幂律变换(伽马变换)
    幂律变换用于从较亮图像到较暗图像突出显示对象,可以通过以下表达式使用:s = c × r^ γ ,其中 s 和 r 分别是输出和输入图像的像素值,c 是常数值,γ称为伽马值。为了减少不同强度值的计算机显示器显示问题,在此转换中使用了不同的伽马值
    import numpy as np
    import cv2
    # Load the image
    img = cv2.imread('baby.jpg')
    # Apply Gamma=0.4 on the normalised image and then multiply by scaling constant (For 8 bit, c=255)
    gamma_point_four = np.array(255*(img/255)**0.4,dtype='uint8')
    # Similarly, Apply Gamma=0.8
    gamma_point_eight = np.array(255*(img/255)**0.8,dtype='uint8')
    # Display the images in subplots
    img3 = cv2.hconcat([gamma_point_four,gamma_point_eight])
    cv2.imshow('a2',img3)
    cv2.waitKey(0)
    
    希望你喜欢阅读这篇文章,希望它能帮助你了解不同类型的图像增强技术。