图像处理——亮度调整算法(python语言)

亮度调整算法说明(完整python代码在文末):

  本算法的基本原理就是对像素点统一进行加上或减去某个调整值,已达到亮度的增强或减弱。包括基于RGB空间R、G、B值的调整和基于HSV空间V值的调整。

  (参考CSDN博客:https://blog.csdn.net/maozefa/article/details/4493395

1. 基于RGB空间亮度调整算法:

  主要是对RGB空间进行亮度调整。计算出调整系数后,调整手段主要有两种:

    1) 基于当前RGB值大小进行调整,即R、G、B值越大,调整的越大, 例如:当前像素点为(100,200,50),调整系数1.1,则调整后为(110,220,55);

    2) 不考虑RGB值大小的影响,即始终对各个点R、G、B值进行相同的调整,例如:当前像素点为(100,200,50),调整系数10/255,则调整后为(110,210,60)。

 

2. 基于HSV空间亮度调整算法:

  主要是对HSV空间的亮度V值进行调整。计算出调整系数后,调整手段主要也有两种:

    1) 基于当前V值大小进行调整,即V值越大,调整的越大,例如:当前像素点V值为200,调整系数1.1,则调整后为220;

    2) 不考虑V值大小的影响,即始终对各个V值进行相同的调整, 例如:当前像素点V值为200,调整系数10/255,则调整后为210。

 

完整python代码如下:

运行方式:打开终端界面,在该py文件目录下,

运行:python  该文件.py  图片路径  亮度等级(-1~1)  调整方式(0或1,默认1)

例如:python  Lightness.py  C:\Users\PDD\Desktop\pdd.jpg  0.3  (1)

 

import cv2
import sys
import numpy as np
import matplotlib.pyplot as plt

"""
  基于RGB空间亮度调整算法:
  主要是对RGB空间进行亮度调整。计算出调整系数后,调整手段主要有两种:
    1) 基于当前RGB值大小进行调整,即R、G、B值越大,调整的越大,
    例如:当前像素点为(100,200,50),调整系数1.1,则调整后为(110,220,55);
    2) 不考虑RGB值大小的影响,即始终对各个点R、G、B值进行相同的调整,
    例如:当前像素点为(100,200,50),调整系数10/255,则调整后为(110,210,60)。
"""
def RGBAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
    img = rgb_img * 1.0
    img_out = img
    
    # 基于当前RGB进行调整(RGB*alpha)
    if basedOnCurrentValue:
        # 增量大于0,指数调整
        if value >= 0 :
            alpha = 1 - value
            alpha = 1/alpha

        # 增量小于0,线性调整
        else:
            alpha = value + 1
            
        img_out[:, :, 0] = img[:, :, 0] * alpha
        img_out[:, :, 1] = img[:, :, 1] * alpha
        img_out[:, :, 2] = img[:, :, 2] * alpha
            
    # 独立于当前RGB进行调整(RGB+alpha*255)
    else:
        alpha = value
        img_out[:, :, 0] = img[:, :, 0] + 255.0 * alpha
        img_out[:, :, 1] = img[:, :, 1] + 255.0 * alpha
        img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
        
    img_out = img_out/255.0
    
    # RGB颜色上下限处理(小于0取0,大于1取1)
    mask_3 = img_out  < 0 
    mask_4 = img_out  > 1
    img_out = img_out * (1-mask_3)
    img_out = img_out * (1-mask_4) + mask_4
    
    return img_out

"""
  基于HSV空间亮度调整算法:
  主要是对HSV空间的亮度V值进行调整。计算出调整系数后,调整手段主要有两种:
    1) 基于当前V值大小进行调整,即V值越大,调整的越大,
    例如:当前像素点V值为200,调整系数1.1,则调整后为220;
    2) 不考虑V值大小的影响,即始终对各个V值进行相同的调整,
    例如:当前像素点V值为200,调整系数10/255,则调整后为210。
"""
def HSVAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
    hsv_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2HSV)
    img = hsv_img * 1.0
    img_out = img
    
    # 基于当前亮度进行调整(V*alpha)
    if basedOnCurrentValue:
        # 增量大于0,指数调整
        if value >= 0 :
            alpha = 1 - value
            alpha = 1/alpha

        # 增量小于0,线性调整
        else:
            alpha = value + 1
        img_out[:, :, 2] = img[:, :, 2] * alpha
    
    else :
        alpha = value
        img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
    
    # HSV亮度上下限处理(小于0取0,大于1取1)
    img_out = img_out/255.0
    mask_1 = img_out  < 0 
    mask_2 = img_out  > 1
    img_out = img_out * (1-mask_1)
    img_out = img_out * (1-mask_2) + mask_2
    img_out = img_out * 255.0
    
    # HSV转RGB
    img_out = np.round(img_out).astype(np.uint8)
    img_out = cv2.cvtColor(img_out, cv2.COLOR_HSV2RGB)
    img_out = img_out/255.0
    
    return img_out

path = './resource/fruit.bmp'
value = 0.3  # 范围-1至1
basedOnCurrentValue = True  # 0或者1

# run : python Lightness.py (path) (value) (basedOnCurrentValue)
if __name__ == "__main__":
    len = len(sys.argv)
    if len >= 2 :
        path = sys.argv[1]
        if len >= 3 :
            value = float(sys.argv[2])
            if len >= 4 :
                basedOnCurrentValue = bool(int(sys.argv[3]))

    img = cv2.imread(path)
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    img_rgb = RGBAlgorithm(img, value, basedOnCurrentValue)
    img_hsv = HSVAlgorithm(img, value, basedOnCurrentValue)

    plt.figure("img_original")
    plt.imshow(img/255.0)
    plt.axis('off')

    plt.figure("img_light_rgb")
    plt.imshow(img_rgb)
    plt.axis('off')

    plt.figure("img_light_hsv")
    plt.imshow(img_hsv)
    plt.axis('off')

    plt.show()

 

 

 

遥感图像预处理是指在分析遥感图像之前,对图像进行一系列的操作和处理,以提取有用的信息和特征。Python提供了许多工具和库,可以用于遥感图像预处理,其中常用的是gdal、numpy和shapefile等库。下面是一些常见的遥感图像预处理步骤和相应的Python代码: 1. 读取遥感图像:使用gdal库中的gdal_array.LoadFile()函数读取图像数据,并将其转换为numpy数组。 ```python from osgeo import gdal, gdal_array import numpy as np img = "./image.tif" arr = gdal_array.LoadFile(img) ``` 2. 图像裁剪:根据需要,可以使用numpy数组的切片操作对图像进行裁剪。 ```python cropped_arr = arr[50:200, 100:300] ``` 3. 图像缩放:使用gdal库中的gdal_array.SaveArray()函数将裁剪后的图像保存为新的图像文件。 ```python output = gdal_array.SaveArray(cropped_arr, "cropped_image.tif", format="GTiff", prototype=img) output = None ``` 4. 图像增强:可以使用numpy库中的函数对图像进行增强操作,例如调整亮度、对比度、色彩平衡等。 ```python enhanced_arr = adjust_brightness(arr, 1.2) ``` 5. 图像滤波:使用numpy库中的卷积操作对图像进行滤波,以去除噪声或增强图像特征。 ```python filtered_arr = apply_filter(arr, kernel) ``` 6. 图像分类:根据需要,使用numpy库中的函数将图像分为不同的类别,并进行着色。 ```python classified_arr = classify_image(arr, classes) colorized_arr = colorize_image(classified_arr, lut) ``` 以上只是一些常见的遥感图像预处理步骤和相应的Python代码,实际应用中可能需要根据具体需求进行调整和扩展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值