基于直方图修改和饱和度调整的低对比度彩色图像自适应增强的python实现(会议)

本文介绍了一种基于直方图修改和饱和度调整的方法,用于增强低对比度彩色图像。通过Python实现,该技术能有效提升图像的视觉效果,适用于会议中的图像处理讨论。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-
# @FileName: 2018基于直方图修改和饱和度调整的低对比度彩色图像自适应增强(会议)
# @Software: PyCharm
# @Author  :  Xu
# @Time    :2021//08//13
import copy

import cv2
import numpy as np

'''
论文A部分,修改RGB直方图
'''


def get_MinAndMax(c_H, c_m):
    '''
    (公式3)计算当前通道的最小和最大索引
    :param c_H: 公式(1)计算出的通道平均值
    :param c_m: 原始通道的平均值
    :return: i_min,i_max
    '''

    i_min = 0 + c_H - c_m
    i_max = 255 + c_H - c_m
    return i_min, i_max


def get_probabilitydensity(c_H, c_m, c):
    '''
    (公式2)计算各个通道的概率密度
    :param c_H: 论文公式(1)获取的通道平均值
    :param c_m: 原始的通道平均值
    :param c: 当前通道
    :return: pdf
    '''
    pdf = np.zeros(256)
    pdf_i = {
   }
    for k in range(256):
        pdf[k] = (np.sum(c == k) / (rows * cols))
        pdf_i[int(k + c_H - c_m)] = pdf[k]
    # print('原始的pdf[k]值为', pdf)
    # print('直方图移动后的pdf_i值为', pdf_i)
    return pdf_i


def get_P_low_And_P_high(c_H, i_min, i_max, pdf_j):
    '''
    论文公式(6)计算概率密度的最大值和最小值
    :param c_H: 公式(1)获取的更新后的通道平均值
    :param pdf_j: 公式(2)计算出的概率密度
    :param i_min: 公式(2)计算出的最小灰度级
    :param i_max: 公式(2)计算出的最大灰度级
    :return: P_low和P_high
    '''
    # 计算移动直方图后,最小的概率密度
    # size_l = int(c_H - i_min)
    P_low = 0
    w_j_low = {
   }
    for j in range(int(i_min), int(c_H)):
        w_j_low[j] = abs(j - 127) / 255 + 0.7  # 公式(5)计算权重
        P_low += (pdf_j[j] * (w_j_low[j]))
    # 计算移动直方图后,最大的概率密度
    # size_h = int(i_max - c_H + 1)
    P_high = 0
    w_j_high = {
   }
    for j in range(int(c_H), int(i_max) + 1):
        w_j_high[j] = abs(j - 127) / 255 + 0.7  # 公式(5)计算权重
        P_high += (pdf_j[j] * (w_j_high[j]))
    return P_low, P_high


def get_f_c(c_H, i_min, i_max, pdf_j, P_low, P_high):
    '''
    论文公式(4)计算更新后的灰度级
    :param c_H: 公式(1)获取的更新后的通道平均值
    :param pdf_j: 公式(2)计算出的概率密度
    :param i_min: 公式(2)计算出的最小灰度级
    :param i_max: 公式(2)计算出的最大灰度级
    :param P_low:最小的概率密度
    :param P_high:最大的概率密度
    :return:更新后的灰度级f_c
    '''
    f_c = {
   }
    w_j = {
   }
    for j in range(int(i_min), int(i_max) + 1):
        if j < c_H:
            w_j[j] = abs(j - 127) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值