一、概念
1. 定义
灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。
2. 灰度线性变换
线性变换
在曝光度不足或过度的情况下,图像灰度可能会局限在一个很小的范围内。这时在显示器上看到的将是一个模糊不清、没有灰度层次的图像。用一个线性单值函数,对图像内的每一个像素做线性扩展,将有效地改善图像视觉效果。
假定源图像f(x, y)的灰度范围为[a, b],希望变换后图像g(x, y)的灰度范围扩展至[c, d],则线性变换可表示为
![9fac58fa8b5218da9ffaabf0f336c31d.png](https://i-blog.csdnimg.cn/blog_migrate/b089544052d04ff38c9752a0307d0d80.jpeg)
分段线性变换
增强图像对比度实际是增强图像中各部分之间的反差,往往通过增加图像中两个灰度值间的动态范围来实现,有时也称其为对比度拉伸。为了突出感兴趣的灰度区间,相对抑制那些不感兴趣的灰度区间,可采用分段线性变换。
3. 灰度非线性变换
当某图像的像素集中于中间灰度部分,而其他部分的像素很少时,如果只想仔细地分析图像的某一部分,也就是对图像的那部分增强,我们可以压缩像素少的部分,扩展像素数集中的部分。典型的非线性变换函数有幂函数、对数函数、指数函数、阈值函数、多值量化函数、窗口函数等。阈值函数、多值量化函数、窗口函数。
--摘自《百度百科》
二、算法实例
1. 分段线性变换
分段线性变换将图像的值域分成多个值域并进行不同的线性变换计算,可以压缩某部分灰度区,扩展另一部分灰度区间。
# -*- coding: utf-8 -*-import cv2import numpy as npfn = "test.jpg"myimg = cv2.imread(fn)img = cv2.cvtColor(myimg, cv2.COLOR_BGR2GRAY)w = img.shape[1]h = img.shape[0]newimg = np.zeros((h, w), np.uint8)# 源Ds_min = 0Ds_internal = 80 # 中间Ds_max = 255# 目标Dd_min &