《数字图像处理-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=clog(1+src)

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

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


7.3.2 幂律变换

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

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

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

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

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

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


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

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


# 【0704】灰度变换之对数变换
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltif __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=1ampLogNorm = 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# AES-128-CBC 加密

一、加密 /// <summary>/// 加密/// </summary>public static string AesEncrypt(string toEncrypt){byte[] toEncryptArray UTF8Encoding.UTF8.GetBytes(toEncrypt);byte[] keyArray UTF8Encoding.UTF8.GetBytes(Key);//注意编码格式(utf8编码 UTF8Encoding)byt…

Unity | 渡鸦避难所-0 | 创建 URP 项目并导入商店资源

0 前言 知识点零零碎碎&#xff0c;没有目标&#xff0c;所以&#xff0c;一起做游戏吧 各位老师如果有什么指点、批评、漫骂、想法、建议、疑惑等&#xff0c;欢迎留言&#xff0c;一起学习 1 创建 3D&#xff08;URP&#xff09;项目 在 Unity Hub 中点击新项目&#xff…

【ESP32】手势识别实现笔记:红外温度阵列 | 双三次插值 | 神经网络 | TensorFlow | ESP-DL

目录 一、开发环境搭建与新建工程模板1.1、开发环境搭建与卸载1.2、新建工程目录1.3、自定义组件 二、驱动移植与应用开发2.1、I2C驱动移植与AMG8833应用开发2.2、SPI驱动移植与LCD应用开发2.3、绘制温度云图2.4、启用PSRAM&#xff08;可选&#xff09;2.5、画面动静和距离检测…

SSM框架详解:结构创建与注解应用

文章目录 1. 引言2. SSM框架项目结构创建2.1 目录结构2.2 说明 3. 注解的应用3.1 Controller3.2 Service3.3 Repository3.4 Autowired3.5 RequestMapping3.6 Select、Insert等 4. 结语 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢…

专业级音频处理 Logic Pro X 中文 for Mac

Logic Pro X是一款专业音频制作和音乐创作软件。它是Mac电脑上最受欢迎和广泛使用的音频工作站&#xff08;DAW&#xff09;。Logic Pro X提供了丰富的功能和工具&#xff0c;适用于音乐制作、录音、编辑、混音和音频处理等方面。以下是Logic Pro X软件的一些主要特点和功能&am…

Fabric.js 入门指南

Fabric.js 入门指南 1. 简介 Fabric.js 是一个强大的开源库&#xff0c;用于处理 HTML5 canvas。它提供了丰富的 API 和功能&#xff0c;使得在网页上轻松创建交互性图形应用变得更加容易。 2. 安装 你可以通过不同的方式安装 Fabric.js&#xff0c;具体取决于你的项目需求…

怎么取消苹果订阅自动续费?分享3个可行方法!

在日常生活中&#xff0c;我们经常会使用到各种应用程序或服务&#xff0c;其中很多都提供了订阅自动续费的功能。然而&#xff0c;有时候用户可能会忘记取消订阅&#xff0c;从而导致不必要的扣费&#xff0c;给用户带来麻烦和困扰。 那么&#xff0c;对于使用苹果手机的小伙…

【JUC】十八、happens-before先行发生原则

文章目录 1、先行发生原则happens-before2、happens-before总原则3、8条happens-before规则4、案例 1、先行发生原则happens-before 在Java中&#xff0c;Happends-Before本质上是规定了一种可见性&#xff0c; A Happends-Before B&#xff0c;则A发生过的事情对B来说是可见的…

Discuz论坛自动采集发布软件

随着网络时代的不断发展&#xff0c;Discuz论坛作为一个具有广泛用户基础的开源论坛系统&#xff0c;其采集全网文章的技术也日益受到关注。在这篇文章中&#xff0c;我们将专心分享通过输入关键词实现Discuz论坛的全网文章采集&#xff0c;同时探讨采集过程中伪原创的发布方法…

企业微信hook接口调用,批量消息id转发

简要描述 批量消息id转发 操作码 101029 请求示例 { "type": 101029, "data": { "sendId": [ "78813025xxx38" ], "msg_id": "1119934", "msg_type": 23, "syncKey": "1680696363&q…

【Appium】解决搜索输入框无搜索按钮

问题&#xff1a;被测组件为搜索输入框&#xff0c;但是无搜索按钮&#xff0c;需要点击键盘的回车按钮&#xff0c;来进行搜索 使用环境&#xff1a;appium 、 python、 Android手机 操作背景 如果使用appium 输入中文字符&#xff0c;则需要设置’unicodeKeyboard’: True…

.net-去重的几种情况

文章目录 前言1. int 类型的list 去重2. string类型的 list 去重3. T泛型 List去重4. 使用HashSet List去重5. 创建静态扩展方法 总结 前言 .net 去重的几种情况 1. int 类型的list 去重 // List<int> List<int> myList new List<int>(){ 100 , 200 ,100…

Selenium定位元素的方法css和xpath的区别!

selenium是一种自动化测试工具&#xff0c;它可以通过不同的定位方式来识别网页上的元素&#xff0c;如id、name、class、tag、link text、partial link text、css和xpath。 css和xpath是两种常用的定位方式&#xff0c;它们都可以通过元素的属性或者层级关系来定位元素&#…

Win10任务栏卡死?三个技巧,让你轻松应对!

windows 10作为广受欢迎的操作系统&#xff0c;为用户提供了强大的功能和友好的用户界面。然而&#xff0c;有时用户可能会面临任务栏卡死的问题&#xff0c;这不仅影响使用体验&#xff0c;还可能导致一系列其他问题。本文将深入介绍win10任务栏卡死的原因&#xff0c;并提供三…

【Linux】-信号-(信号的产生,保存,处理,以及os是怎么读取硬件的输入,硬件异常和coredump,定时器的原理简单的用户态和内核态的详细介绍)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

AR增强现实在汉语文学课堂教学中的应用

一、AR增强现实在汉语文学课堂教学中的应用优势 1、增强互动性&#xff1a;AR技术可以将虚拟元素与现实环境相结合&#xff0c;使学生在学习过程中更加投入。例如&#xff0c;在讲解诗歌时&#xff0c;可以通过AR技术将诗歌中的景象生动地展示在学生面前&#xff0c;增强学生的…

外贸B2B网站独立站建站(零基础全流程)

1.第一步是要先去买个域名&#xff1a; 一般做外贸的购买.com 后缀的国际域名就好&#xff0c;域名可以在阿里云&#xff0c;腾讯云等大的平台上购买&#xff0c;方法很简单&#xff08;但是在确定购买新的域名最好要分析下这个域名有没有被黑过&#xff0c;要不然后期对这个网…

【OpenGL】Clion配置

OpenGL简介 OpenGL&#xff08;Open Graphics Library&#xff09;是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像&#xff08;二维的亦可&#xff09;&#xff0c;是一个功能强大&#xff0c;调用方便的底层图形库。OpenGL是行业领域中…

leetcode704. 二分查找

题目描述 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解…

01背包问题动态规划解法

二维数组dp #include<iostream> #include<vector> using namespace std;vector<int>weight { 1,3,4 }; vector<int>value { 15,20,30 }; int bagWeight 4; vector<vector<int>>dp(weight.size() 5, vector<int>(bagWeight 5, …