函数公式网 高中函数 跟我学Python图像处理丨什么是图像的灰度非线性变换

跟我学Python图像处理丨什么是图像的灰度非线性变换

本文分享自华为云社区《【Python图像处理】16.图像灰度非线性变换之对数变换与Gamma变换-云社区-华为云》,作者:eastmount。

图像的灰度非线性变换主要有对数变换、幂变换、指数变换、分段函数变换等。 通过非线性关系对图像进行灰度处理。 下面主要讲解三种常见的灰度非线性变换。

将原图的灰度值按照公式DB=DA×DA/255进行非线性变换,代码如下:

#-*-编码: utf-8 -*-
导入cv2
将 numpy 导入为 np
将 matplotlib.pyplot 导入为 plt

# 读取原始图像
img = cv2.imread('miao.png')

# 图片灰度转换
grayImage = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 获取图片的高和宽
高度 = 灰度图像。 形状[0]
宽度 = 灰色图像。 形状[1]

# 创建图像
结果 = np. 零((高度,宽度),np.uint8)

#图像灰度非线性变换:DB=DA×DA/255
对于我在范围内(高度):
对于范围内的 j(宽度):
灰色 = int(grayImage[i,j])*int(grayImage[i,j]) / 255
结果 [i,j] = np.uint8(灰色)

#显示图像
cv2.imshow("灰度图像", grayImage)
cv2.imshow("结果", 结果)

# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

图像灰度非线性变换的输出结果如下图所示:

图像灰度的对数变换一般表示为公式:

其中c为尺度比较常数,DA为原始图像灰度值,DB为变换后的目标灰度值。 如下图所示,表示对数曲线下灰度值的变化。

由于对数曲线在像素值低的区域斜率较大,在像素值高的区域斜率较小,因此图像经过对数变换后,较暗区域的对比度会得到改善。 这种变换可用于增强图像的暗部细节,从而在压缩的高值图像中扩展较暗的像素。

对数变换实现了扩展低灰度值、压缩高灰度值的效果,广泛应用于光谱图像的显示。 一个典型的应用是傅立叶光谱,其动态范围可能宽达0~106。直接显示光谱时,图像显示设备的动态范围往往达不到要求,从而丢失大量暗部细节; 并且在使用对数变换后,图像的动态范围被非线性地合理压缩,从而能够清晰显示。 在下图中,未转换的光谱已经过对数转换以增加低灰度区域的对比度,从而增强阴影中的细节。

下面的代码实现了图像灰度的对数变换。

# -*- 编码:utf-8 -*-
将 numpy 导入为 np
将 matplotlib.pyplot 导入为 plt
导入cv2

# 绘制曲线
def log_plot(c):
x = np.arange(0, 256, 0.01)
y = c * np.log(1x)
plt.plot(x, y, 'r', 线宽=1)
plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
plt.title(u'对数变换函数')
plt.xlim(0, 255),plt.ylim(0, 255)
铂。 展示()

# 对数变换
def 日志(c,img):
输出 = c * np. 日志(1.0 图像)
输出 = np.uint8(输出 0.5)
返回输出

# 读取原始图像
img = cv2.imread('test.png')

# 绘制对数变换曲线
对数图(42)

# 图像灰度对数变换
输出 = 日志 (42, img)

#显示图像
cv2.imshow('输入', img)
cv2.imshow('输出', 输出)
cv2.waitKey(0)
cv2.destroyAllWindows()

下图为对数函数处理后的效果图。 对数变换更适合整体对比度低、灰度值低的图像增强。

对应的对数函数曲线如图

3. 图像灰度伽玛变换

伽玛变换也称为指数变换或幂变换。 是另一种常用的灰度非线性变换。 图像灰度的伽马变换一般表示为公式:

  • 当γ>1时,图像中灰度较高的区域将被拉伸,压缩部分为 较低的灰度级。
  • 当γ<1时,图像中灰度级较低的区域会被拉伸,灰度级较高的部分会被压缩。
  • 当γ=1时,灰度变换是线性的,原图线性变化。

Python实现图像灰度的伽玛变换代码如下,主要调用幂函数实现。

# -*- 编码:utf-8 -*-
将 numpy 导入为 np
将 matplotlib.pyplot 导入为 plt
导入cv2

# 绘制曲线
def gamma_plot(c, v):
x = np.arange(0, 256, 0.01)
y = c*x**v
plt.plot(x, y, 'r', 线宽=1)
plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
plt.title(u'伽马变换函数')
plt.xlim([0, 255]), plt.ylim([0, 255])
铂。 展示()

#伽马变换
def 伽玛 (img, c, v):
lut = np.zeros(256, dtype=np.float32)
对于范围内的我(256):
lut[i] = c * i ** v
output_img = cv2.LUT(img, lut) #像素灰度值的映射
output_img = np.uint8(output_img 0.5)
返回输出图像

# 读取原始图像
img = cv2.imread('test.png')

#绘制伽马变换曲线
伽玛图(0.00000005,4.0)

#图像灰度伽马变换
输出 = 伽玛 (img, 0.00000005, 4.0)

#显示图像
cv2.imshow('输入', img)
cv2.imshow('输出', 输出)
cv2.waitKey(0)
cv2.destroyAllWindows()

下图为伽马变换处理后的效果图。 Gamma变换图像对比度低,整体亮度值高(或由于相机曝光过度),增强效果明显。

对应的幂律函数曲线如图所示。

参考文献:

  • 杨修章等。 基于苗族服饰的图像锐化与边缘提取技术研究[J]. 现代计算机,2018(10)。
  • 《数字图像处理》(第3版),Gonzales着,阮秋琪译,电子工业出版社,2013。
  • 《数字图像处理》(第3版),阮秋琪,电子工业出版社,2008,北京。
  • 《OpenCV3简介 Programming》,毛星云,冷雪飞,电子工业出版社,2015。
  • 【数字图像处理】5.MFC图像点计算之灰度线性变化,灰度详解 度数非线性变化、阈值化和均衡化处理
  • python opencv图像特效(图像灰度处理、颜色翻转、图像融合、边缘检测、浮雕效果)
  • li>

  • 数字图像处理-空间域处理-灰度变换-基本灰度变换函数
  • OpenCV图像增强算法实现 ion(直方图Graph equalization, Laplace, Log, Gamma)

点击下方第一时间了解华为云的新鲜技术~

华为云博客_大数据博客_AI 博客_云计算博客_开发者中心-华为云

本文来自网络,不代表函数公式网立场,转载请注明出处:https://www.cyhsb.com/gzhs/2025.html

你想过数学书上的“规则”吗?

没想到数学界的数学家都因为他开战了

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

返回顶部