2019-08-15 12:45:11 Benja_K 阅读数 1168

亮度调整算法说明(完整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()

 

 

 

2017-05-03 16:19:59 guduruyu 阅读数 31455

python中PIL模块中有一个叫做ImageEnhance的类,该类专门用于图像的增强处理,不仅可以增强(或减弱)图像的亮度、对比度、色度,还可以用于增强图像的锐度。


具体见下面的例子:

#-*- coding: UTF-8 -*-   

from PIL import Image
from PIL import ImageEnhance

#原始图像
image = Image.open('lena.jpg')
image.show()

#亮度增强
enh_bri = ImageEnhance.Brightness(image)
brightness = 1.5
image_brightened = enh_bri.enhance(brightness)
image_brightened.show()

#色度增强
enh_col = ImageEnhance.Color(image)
color = 1.5
image_colored = enh_col.enhance(color)
image_colored.show()

#对比度增强
enh_con = ImageEnhance.Contrast(image)
contrast = 1.5
image_contrasted = enh_con.enhance(contrast)
image_contrasted.show()

#锐度增强
enh_sha = ImageEnhance.Sharpness(image)
sharpness = 3.0
image_sharped = enh_sha.enhance(sharpness)
image_sharped.show()


结果如下:


原始图像



亮度增强



色度增强



对比度增强



锐度增强



2017.05.03

2018-11-22 15:50:13 weixin_32888153 阅读数 133

今天主要是使用python对图像进行增强处理。增强(减弱)图像的亮度,对比度,色度以及锐度。python中有集成的模块PIL(Python Imaging Library)中有专门用于处理图像增强的ImageEnhance类。

from PIL import Image
from PIL import ImageEnhance

#原始图像的输入与展示
image=Image.open("111.jpg")
image.show()

#亮度增强
#先实例化一个ImageEnhance.Brightness对象,并传入需要修改的图片
#然后创建一个对象接收通过ImageEnhance.Brightness实例化对象调用方法后的图像
bri_enh=ImageEnhance.Brightness(image)
brightness=2.0
enh_end=bri_enh.enhance(brightness)
enh_end.show()

#色度增强
col_enh=ImageEnhance.Color(image)
color=1.5
enh_endcol=col_enh.enhance(color)
enh_endcol.show()

#对比度增强
con_enh=ImageEnhance.Contrast(image)
contrast=1.5
enh_endcon=con_enh.enhance(contrast)
enh_endcon.show()

#锐度增强
sha_enh=ImageEnhance.Sharpness(image)
sharpness=2.0
enh_endsha=sha_enh.enhance(sharpness)
enh_endsha.show()


如果想详细了解图像增强的概念可以看看这篇文章:https://blog.csdn.net/app_12062011/article/details/18601501

2019-08-18 16:48:44 u014485485 阅读数 81

内容来自于刘定生老师的数字图像处理课和课件,如有侵权,联系删除。

 

灰度级:图像中不同灰度的最大数量

对比度:反映图像灰度方差大小

 

线性:

Iout = a*Iin + b

a>1:增加对比度

a<1:减小对比度

b>0:增加亮度

b<0:减小亮度

 

非线性:

C>0:增强中间部分

C<0:减弱中间部分

(类似于log曲线)

 

点运算:

利用LUT

 

代数运算:

加法:C = A + B

用法:

1.削弱叠加性噪声(例如随机噪声,利用的是随机噪声的均值为0)

2.叠加图像(例如融合)

 

减法:

1.去除背景图像(天气预报、演员拍戏等,后面是一个纯色的幕布,后期再将背景合成上去)
2.检测同一场景图像的变化

 

乘法:
1.扣取局部图像(蒙版,用0,1的mask去提取原图)

 

逻辑运算:

一般是针对二值图像

 

几何变换
线性:平移、缩放、旋转、镜像、错切

这些变换可以用矩阵表示

 

仿射变换:

 

水平镜像:

[-1  0  0

  0   1  0

  0   0  1]

 

x方向缩放a倍,y方向缩放b倍:

[a 0  0

 0  b 0

 0  0  1]

 

旋转:

 

 

错切:非垂直投影
[1  c   0

 d   1  0

 0   0  1]

 

 

 

伪仿射变换:双线性几何变换

 

 非线性(高阶多项式):任意几何变换

畸变矫正

 

透视变换:以人眼为中心的中心投影
符合人眼的视觉形象

 

8个独立的参数,需要4个点

 

 坐标的计算:

向前映射(镜像、平移时用这种方法)

向后映射(旋转、缩放、变形等,结合差值使用)

 

像素的计算:

最近邻插值:快,误差大,会有马赛克效应

双线性插值:平滑过渡,低通特性(会使图像变模糊)

 

数学上是双曲抛物面方程:

计算结果:

矩阵形式:

 

 

 

最佳插值函数:三次卷积插值

 

需要4x4,16个点,,高频损失少,可将噪声平滑

 

 

延伸。。:

 

 

 

 

 

 

非几何变换:主要指灰度变换(只有像素值的变换没有坐标的变换)

单像素

区域:基于模板

 

对比度拉伸:

 

Gamma失真:
图像亮度对光线的相应不是线性的,硬件决定的

 

 

灰度直方图:
灰度出现的频率可以看做其出现的概率--》直方图就对应于概率密度曲线

用途

1 . 数字化参数

直方图给出了一个简单可见的指示,用来判断一幅图象是否合理的利用了全部被允许的灰度级范围。一般一幅图应该利用全部或几乎全部可能的灰度级,否则等于增加了量化间隔。 丢失的信息将不能恢复。

2 . 边界阈值选取

假设某图象的灰度直方图具有 二峰性,则表明这个图象的较亮的区域和较暗的区域可以较好地分离,取中间点为阈值点,可以得到好的2值处理的效果。

 

直方图变换

单调增加的映射曲线

直方图均衡:用r的累积分布函数作为变换函数,可产生一幅灰度级分布具有均匀概率密度的图像

对于离散图像,只能做到接近均匀

 

2019-05-21 10:18:18 qq_33840601 阅读数 726

对于数字图像变换,设原像素的RGB值为 f(i,j,k),转化后的像素灰度为 g(i,j,k),则常用的线性变换是 g(i,j,k)= af(i,j,k) + b, 其中系数 a 影响图像的对比度,系数 b 影响图像的亮度,具体如下:

(1) a=1时是原图;

(2) a>1时对比度增强,图像看起来更加清晰;

(3) a<1时对比度减弱,图像看起来变模糊;

(4) b影响图像的亮度,随着增加b (b>0)和减小b (b>0),图像整体的灰度值上移或者下移, 也就是图像整体变亮或者变暗, 不会改变图像的对比度

# -*- coding: utf-8 -*-
import numpy as np
import cv2

def Contrast_and_Brightness(alpha, beta, img):
    blank = np.zeros(img.shape, img.dtype)
    # dst = alpha * img + (1-alpha) * blank + beta
    dst = cv2.addWeighted(img, alpha, blank, 1-alpha, beta)
    return dst

cap = cv2.VideoCapture(0)

while (cap.isOpened()):
    ret, frame = cap.read()  ##ret返回布尔量
    cv2.imshow('frame', frame)

    # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    frame1=Contrast_and_Brightness(1.8, 1.3, frame)

    cv2.imshow('frame1', frame1)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

 

PIL 图像增强

阅读数 767

对比度增强

阅读数 231

没有更多推荐了,返回首页