图像数据处理9

二、灰度变换

2.3 非线性灰度变换

以下式子中使用 f 表示输入图像的像素值,g 表示输出图像的像素值

2.3.1 伽马校正**(Gamma Correction)**

γ 是伽马值,通常大于0。调整 γ 的值可以改变图像的亮度。当 γ<1 时,图像会变亮;当 γ>1 时,图像会变暗。在使用 伽马矫正时需先将输入灰度值r从0,255归一化到0,1,变换后再把输出灰度值g从0,1线性映射到0,255之间。

python 复制代码
import cv2  
import numpy as np  
  
def gamma_correction(image, gamma):  
    # 构建一个映射表  
    table = np.array([((i / 255.0) ** gamma) * 255 for i in np.arange(0, 256)]).astype("uint8")  
      
    # 应用映射表进行伽马矫正  
    return cv2.LUT(image, table)  
  
# 读取图像  
image = cv2.imread('.jpg')  
  
# 设置伽马值  
gamma = 2.2  
  
# 应用伽马矫正  
corrected_image = gamma_correction(image, gamma)  
  
# 显示原图和矫正后的图像  
cv2.imshow('Original Image', image)  
cv2.imshow('Gamma Corrected Image', corrected_image)  
  
# 等待按键操作后关闭窗口  
cv2.waitKey(0)  
cv2.destroyAllWindows()

2.3.2对数矫正**(Logarithmic Correction)**

其中,c 是一个常数,用于调整对数曲线的形状和位置。对数矫正可以扩展图像中较暗区域的细节,同时压缩较高灰度级的范围。

c值对图像的影响

  1. 亮度调整 :
    • 当 c 的值较小时,对数曲线的斜率较小,导致图像的整体亮度相对较低,暗部细节得到增强,但亮部可能显得过于暗淡。
    • 当 c 的值较大时,对数曲线的斜率增大,图像的整体亮度提高,亮部细节得到更好的保留,但暗部可能显得不够突出。
  2. 对比度调整 :
    • c 的值还影响着图像的对比度。较小的 c 值会增强图像的对比度,使暗部和亮部之间的差异更加明显。
    • 较大的 c 值则会降低对比度,使图像看起来更加柔和。
python 复制代码
import cv2
import numpy as np


def logarithmic_correction(image, c=40):
    # 创建一个对数变换的映射表
    table = np.array([c * np.log(1 + i) if i > 0 else 0 for i in np.arange(0, 256)]).astype("uint8")
    # 应用映射表执行对数矫正
    return cv2.LUT(image, table)


# 读取图像
image = cv2.imread('saved_image.jpg')

# 缩小图像(可选)
scale_percent = 50  # 缩小到原图的50%
width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
dim = (width, height)
resized_image = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)

# 应用对数矫正
corrected_image = logarithmic_correction(resized_image)

# 水平拼接原图和矫正后的图像
concatenated_image = cv2.hconcat([resized_image, corrected_image])

# 在一个窗口中展示拼接后的图像
cv2.imshow('Original and Logarithmic Corrected Image', concatenated_image)

# 等待按键操作后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

c=1

c=10

c=40

2.3.3指数矫正**(Exponential Correction)**


其中,b和 k是常数,k的值通常略大于1。该函数能突出图像的亮区域,减弱图像的暗区域。

python 复制代码
import cv2
import numpy as np


def exponential_correction(image, b, k):
    # 将图像数据类型转换为float,以便进行数学运算
    float_image = image.astype(float) / 255.0
    # 应用指数矫正公式
    corrected_image = b * (k ** float_image - 1)
    # 将矫正后的图像值重新缩放到0到255之间,并转换为uint8类型
    corrected_image = np.clip(corrected_image * 255.0, 0, 255).astype(np.uint8)
    return corrected_image


# 读取图像
image = cv2.imread('slpn.jpg', cv2.IMREAD_GRAYSCALE)

# 设置b和k的值
k=1.01
b = 125

# 应用指数矫正
corrected_image = exponential_correction(image, b, k)

# 水平拼接原始图像和矫正后的图像
concatenated_image = cv2.hconcat([image, corrected_image])

# 缩小拼接后的图像
scale_percent = 50  # 缩小到原始尺寸的50%
width = int(concatenated_image.shape[1] * scale_percent / 100)
height = int(concatenated_image.shape[0] * scale_percent / 100)
dim = (width, height)
resized_concatenated_image = cv2.resize(concatenated_image, dim, interpolation=cv2.INTER_AREA)

# 显示拼接并缩小后的图像
cv2.imshow('Original and Corrected Image (Resized)', resized_concatenated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

总结一下:①伽马校正 常用于校正图像亮度的不均匀性,使图像更加符合人眼的视觉特性。②对数矫正 常用于增强图像的对比度,特别是在暗区域中。③指数矫正常用于改善图像的视觉效果,使图像更加清晰。

注,本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

"本文章中所使用的圣灵谱尼图片来源于网络,版权归属原作者所有。若您认为本文章/作品的使用侵犯了您的权益,请及时与我联系,我将尽快核实并删除相关内容。

相关推荐
小和尚同志1 小时前
54.6k star 的 Multica: 集多 Agent 和看板于一体的 AI 平台
人工智能·aigc·three.js
一枕槐安4872 小时前
少样本提示(Few-shot)在业务场景的落地实践
大数据·人工智能·意图分类·mmr多样性·knn检索·动态示例选择
ZhengEnCi2 小时前
模型训练完整流程:从数据准备到模型上线的 10 个关键步骤(全文可跑)
后端·算法
王中阳Go2 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
海宇AI2 小时前
零信任架构实战:基于海宇个人风险报告构建自动化分期商城信用额度初审网关
运维·人工智能·架构·自动化
tellmewhoisi3 小时前
深度学习32:卷积神经网络:卷积层(卷积运算,填充,步幅)
人工智能·深度学习·cnn
weixin_307779133 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
Sinokap3 小时前
OpenAI 披露 AI 安全实验:智能体如何突破隔离边界?
人工智能·安全
云和数据.ChenGuang4 小时前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
重生之我在番茄自学网安拯救世界4 小时前
AI 开发者日报 第1期(本周精选)| 插件市场投毒、智能体搞出“官僚饥荒村”,十年前的 CNN 打赢大模型
人工智能·网络安全·大模型·ai编程·智能体