如何设置伽玛校正的最佳值

亚历杭德罗

我正在尝试对图像使用伽玛校正。但是我只手动更改伽玛校正的值。有什么方法可以自动计算最佳伽玛校正值?例如,亮度直方图。

码:

# import the necessary packages
from __future__ import print_function
import numpy as np
import argparse
import cv2
def adjust_gamma(image, gamma=1.0):
    # build a lookup table mapping the pixel values [0, 255] to
    # their adjusted gamma values
    invGamma = 1.0 / gamma
    table = np.array([((i / 255.0) ** invGamma) * 255
        for i in np.arange(0, 256)]).astype("uint8")
    # apply gamma correction using the lookup table
    return cv2.LUT(image, table)


# load the original image
original = cv2.imread('image.jpg')

# loop over various values of gamma
for gamma in np.arange(0.0, 3.5, 0.5):
    # ignore when gamma is 1 (there will be no change to the image)
    if gamma == 1:
        continue
    # apply gamma correction and show the images
    gamma = gamma if gamma > 0 else 0.1
    adjusted = adjust_gamma(original, gamma=gamma)
    cv2.putText(adjusted, "g={}".format(gamma), (10, 30),
        cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3)
    cv2.imshow("Images", np.hstack([original, adjusted]))
    cv2.waitKey(0)
fmw42

这是在Python / OpenCV中执行此操作的两种方法。两者均基于对数(中间灰色)/对数(平均值)的比率。结果通常是合理的,尤其是对于深色图像,但并非在所有情况下都有效。对于亮图像,请反转灰度图像或数值图像,对暗图像进行处理,然后再次反转并重新组合(如果使用数值图像)。

  • 读取输入
  • 转换为灰度或HSV值
  • 计算灰色或数值通道上的比率log(中灰)/ log(平均值)
  • 将输入或值提高到比率的幂
  • 如果使用值通道,请将新的值通道与色相和饱和度通道合并,然后转换回RGB

输入:

在此处输入图片说明

import cv2
import numpy as np
import math

# read image
img = cv2.imread('lioncuddle1.jpg')

# METHOD 1: RGB

# convert img to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# compute gamma = log(mid*255)/log(mean)
mid = 0.5
mean = np.mean(gray)
gamma = math.log(mid*255)/math.log(mean)
print(gamma)

# do gamma correction
img_gamma1 = np.power(img, gamma).clip(0,255).astype(np.uint8)



# METHOD 2: HSV (or other color spaces)

# convert img to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hue, sat, val = cv2.split(hsv)

# compute gamma = log(mid*255)/log(mean)
mid = 0.5
mean = np.mean(val)
gamma = math.log(mid*255)/math.log(mean)
print(gamma)

# do gamma correction on value channel
val_gamma = np.power(val, gamma).clip(0,255).astype(np.uint8)

# combine new value channel with original hue and sat channels
hsv_gamma = cv2.merge([hue, sat, val_gamma])
img_gamma2 = cv2.cvtColor(hsv_gamma, cv2.COLOR_HSV2BGR)

# show results
cv2.imshow('input', img)
cv2.imshow('result1', img_gamma1)
cv2.imshow('result2', img_gamma2)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save results
cv2.imwrite('lioncuddle1_gamma1.jpg', img_gamma1)
cv2.imwrite('lioncuddle1_gamma2.jpg', img_gamma2)


方法1的结果

在此处输入图片说明

方法2的结果

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何估算用于伽玛校正的最佳伽玛参数?

来自分类Dev

伽玛校正公式

来自分类Dev

Matlab范围-伽玛校正

来自分类Dev

MATLAB中的伽玛校正实现

来自分类Dev

正确的伽玛校正功能是什么?

来自分类Dev

ffmpeg设置自定义伽玛值

来自分类Dev

精神病学中伽玛校正的错误

来自分类Dev

如何为我的应用程序找到要在 setValidateAfterInactivity 中设置的最佳值

来自分类Dev

伽玛SVC sklearn的默认值

来自分类Dev

伽玛校正看起来没有正确校正,这是线性的吗?

来自分类Dev

如何更改Xorg的伽玛/亮度?

来自分类Dev

如何在FourierSeries中优化“ k”的最佳值

来自分类Dev

cv2.LUT在执行伽玛校正时引发错误-断言失败

来自分类Dev

如何为块大小选择最佳值,为坏块选择最佳的块数?

来自分类Dev

伽玛函数逼近

来自分类Dev

set.seed()函数-设置种子的最佳值是什么?

来自分类Dev

Kotlin:具有最佳值的maxBy {}

来自分类Dev

什么是Phusion旅客PassengerMaxRequestQueueSize的最佳值

来自分类Dev

keras 提取最佳值损失

来自分类Dev

设置 LCD 伽玛/对比度(IntelliJ IDEA,JDK 8)

来自分类Dev

在没有数学模块的情况下全局计算x的伽玛值?

来自分类Dev

确定CUDA中#pragma展开N的最佳值

来自分类Dev

将?x样式模式变量转换为最佳值

来自分类Dev

将?x样式模式变量转换为最佳值

来自分类Dev

使用Apply找到7个常数的最佳值?

来自分类Dev

如何设置OpenGL透视校正?

来自分类Dev

如何在Python中使用形状和比率指定伽玛分布?

来自分类Dev

如何在直方图上绘制真实密度(对于指定的伽玛分布)

来自分类Dev

在iOS中移动滑块时如何在图像上应用亮度,对比度,伽玛?

Related 相关文章

热门标签

归档