《数字图像处理-OpenCV/Python》连载(50)非线性灰度变换

《数字图像处理-OpenCV/Python》连载(50)非线性灰度变换

本书京东优惠购书链接:https://item.jd.com/14098452.html
本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html

第 7 章 图像的灰度变换

灰度变换按照灰度级的映射函数修改像素的灰度值,从而改变图像灰度的动态范围。灰度变换可以使图像的动态范围扩大、图像对比度增强,使图像更清晰、特征更明显。

本章内容概要

  • 介绍图像的线性灰度变换,理解线性拉伸对灰度动态范围的影响。
  • 介绍常用的非线性灰度变换方法,如对数变换、幂律变换和分段线性变换。
  • 通过灰度变换调整图像色阶,理解和校正图像的色调范围和色彩平衡。

7.3 非线性灰度变换

非线性灰度变换是指运用非线性函数调整原始图像的灰度范围。常用方法有对数变换和幂律变换。对数变换与幂律变换的映射关系如图7-4所示。

非线性灰度变换在运算过程中,像素值要按实数来计算,计算结果也是实数,要注意图像数据类型的转换。

7.3.1 对数变换

对数变换是指将输入范围较窄的低灰度级映射为范围较宽的灰度级,使较暗区域的对比度增强,提升图像的暗部细节。

对数变换可以由以下公式描述:

d s t = c ∗ l o g ( 1 + s r c ) dst = c*log(1+src) dst=c∗log(1+src)

式中,src和dst分别表示原始图像和变换图像的灰度值;c是比例系数。

对数变换实现了扩展低灰度级而压缩高灰度级的效果,广泛应用于频谱图像的显示,典型应用是傅里叶频谱的显示。

7.3.2 幂律变换

幂律变换也称伽马变换,可以提升暗部细节,对发白(曝光过度)或过暗(曝光不足)的图片进行校正。

伽马变换可以由以下公式描述:

d s t = c ∗ s r c γ , γ > 0 dst = c*src^{\gamma}, \gamma>0 dst=c∗srcγ,γ>0

式中,src和dst分别表示原始图像和变换图像的灰度值; γ \gamma γ是伽马系数;c是比例系数。

当 0 < γ < 1 0<\gamma<1 0<γ<1时,拉伸了图像的低灰度级,压缩了图像的高灰度级,减弱了图像的对比度;当 γ \gamma γ>1时,拉伸了图像的高灰度级,压缩了图像的低灰度级,增强了图像的对比度。

伽马变换通过非线性变换对人类视觉特性进行补偿,可以最大化地利用灰度级的带宽,很多拍摄、显示和打印设备的亮度曲线都符合伽马曲线,因此伽马变换被广泛应用于显示设备的调校,称为伽马校正。

【例程0704】灰度变换之对数变换

本例程为图像灰度变化之对数变换在傅里叶频谱显示中的应用。

python 复制代码
# 【0704】灰度变换之对数变换
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

if __name__ == '__main__':
    gray = cv.imread("../images/Fig0602.png", flags=0)  # 读取为灰度图像

    fft = np.fft.fft2(gray)  # 傅里叶变换
    fft_shift = np.fft.fftshift(fft)  # 将低频部分移动到图像中心
    amp = np.abs(fft_shift)  # 傅里叶变换的频谱
    ampNorm = np.uint8(cv.normalize(amp, None, 0, 255, cv.NORM_MINMAX))  # 归一化为 [0,255]
    ampLog = np.abs(np.log(1.0 + np.abs(fft_shift)))  # 对数变换, c=1
    ampLogNorm = np.uint8(cv.normalize(ampLog, None, 0, 255, cv.NORM_MINMAX))

    plt.figure(figsize=(9, 3.2))
    plt.subplot(131), plt.title("1. Original"), plt.axis('off')
    plt.imshow(gray, cmap='gray', vmin=0, vmax=255)
    plt.subplot(132), plt.title("2. FFT spectrum"), plt.axis('off')
    plt.imshow(ampNorm, cmap='gray', vmin=0, vmax=255)
    plt.subplot(133), plt.title("3. LogTrans of FFT"), plt.axis('off')
    plt.imshow(ampLogNorm, cmap='gray', vmin=0, vmax=255)
    plt.tight_layout()
    plt.show()

程序说明:

(1)运行结果,傅里叶频谱的对数变换如图7-5所示。图7-5(2)所示为图7-5(1)的傅里叶频谱图,图7-5(3)所示为图7-5(2)的对数变换图像。

(2)由于傅里叶频谱的动态范围很宽,图7-5(2)只能显示图像中心的一个亮点(亮点只有一个像素,其实也看不出来),丢失了大量的暗部细节。

(3)图7-5(3)使用对数变换将图7-5(2)的动态范围进行了非线性压缩,因此清晰地显示了频谱特征。

图7-5 傅里叶频谱的对数变换

版权声明:

youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/134726151)

Copyright 2023 youcans, XUPT

Crated:2023-12-01

欢迎关注本书CSDN独家连载专栏
《数字图像处理-OpenCV/Python》连载: https://blog.csdn.net/youcans/category_12418787.html

相关推荐
可为测控6 分钟前
图像处理基础(3):均值滤波器及其变种
图像处理·人工智能·均值算法
刘立军11 分钟前
本地大模型编程实战(20)用langgraph和智能体实现RAG(Retrieval Augmented Generation,检索增强生成)(4)
人工智能·后端·llm
程序媛-徐师姐14 分钟前
基于 Python Django 的校园互助平台(附源码,文档)
开发语言·python·django·校园互助·校园互助平台
Abdullah al-Sa30 分钟前
Docker教程(喂饭级!)
c++·人工智能·docker·容器
神经星星34 分钟前
无机材料逆合成效率飙升,韩国团队推出Retrieval-Retro,成果入选NeurIPS 2024
人工智能·深度学习·机器学习
大数据追光猿38 分钟前
【深度学习】Pytorch项目实战-基于协同过滤实现物品推荐系统
人工智能·pytorch·python·深度学习·ai编程·推荐算法
师范大学生1 小时前
基于CNN的FashionMNIST数据集识别2——模型训练
python·深度学习·cnn
CodeJourney.1 小时前
EndNote与Word关联:科研写作的高效助力
数据库·人工智能·算法·架构
web137656076431 小时前
纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析
python·django·fastapi
jingwang-cs1 小时前
内外网文件传输 安全、可控、便捷的跨网数据传输方案
人工智能·后端·安全