《数字图像处理-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

相关推荐
martian665几秒前
【人工智能数学基础】——深入详解贝叶斯理论:掌握贝叶斯定理及其在分类和预测中的应用
人工智能·数学·分类·数据挖掘·贝叶斯
mingo_敏1 分钟前
深度学习中的并行策略概述:2 Data Parallelism
人工智能·深度学习
VinciYan12 分钟前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
测试老哥33 分钟前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
終不似少年遊*36 分钟前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
区块链小八歌1 小时前
链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 场景
人工智能
禾高网络1 小时前
租赁小程序成品|租赁系统搭建核心功能
java·人工智能·小程序
如若1231 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
西猫雷婶2 小时前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
老刘莱国瑞2 小时前
STM32 与 AS608 指纹模块的调试与应用
python·物联网·阿里云