Python图像运算之图像灰度线性变换详解

作者:Eastmount 时间:2022-06-10 15:12:28 

一.灰度线性变换

图像的灰度线性变换是通过建立灰度映射来调整原始图像的灰度,从而改善图像的质量,凸显图像的细节,提高图像的对比度。灰度线性变换的计算公式如(12-1)所示:

Python图像运算之图像灰度线性变换详解

该公式中DB表示灰度线性变换后的灰度值,DA表示变换前输入图像的灰度值,α和b为线性变换方程f(D)的参数,分别表示斜率和截距[1-4]。

  • 当α=1,b=0时,保持原始图像

  • 当α=1,b!=0时,图像所有的灰度值上移或下移

  • 当α=-1,b=255时,原始图像的灰度值反转

  • 当α>1时,输出图像的对比度增强

  • 当0<&alpha;<1时,输出图像的对比度减小

  • 当&alpha;<0时,原始图像暗区域变亮,亮区域变暗,图像求补

如图12-1所示,显示了图像的灰度线性变换对应的效果图。

Python图像运算之图像灰度线性变换详解

二.图像灰度上移变换

该算法将实现图像灰度值的上移,从而提升图像的亮度。

DB=DA+50

具体实现代码如下所示。由于图像的灰度值位于0至255区间之内,所以需要对灰度值进行溢出判断。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

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

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

#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]

#创建一幅图像
result = np.zeros((height, width), np.uint8)

#图像灰度上移变换 DB=DA+50
for i in range(height):
   for j in range(width):

if (int(grayImage[i,j]+50) > 255):
           gray = 255
       else:
           gray = int(grayImage[i,j]+50)

result[i,j] = np.uint8(gray)

#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)

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

其输出结果如图12-2所示,图像的所有灰度值上移50,图像变得更白了。注意,纯黑色对应的灰度值为0,纯白色对应的灰度值为255。

Python图像运算之图像灰度线性变换详解

三.图像对比度增强变换

该算法将增强图像的对比度,Python实现代码如下所示。

DB=DA&times;1.5

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

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

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

#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]

#创建一幅图像
result = np.zeros((height, width), np.uint8)

#图像对比度增强变换 DB=DA×1.5
for i in range(height):
   for j in range(width):

if (int(grayImage[i,j]*1.5) > 255):
           gray = 255
       else:
           gray = int(grayImage[i,j]*1.5)

result[i,j] = np.uint8(gray)

#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)

其输出结果如图12-3所示,图像的所有灰度值增强1.5倍。

Python图像运算之图像灰度线性变换详解

四.图像对比度减弱变换

该算法将减弱图像的对比度,Python实现代码如下所示。

DB=DA&times;0.8

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

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

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

#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]

#创建一幅图像
result = np.zeros((height, width), np.uint8)

#图像对比度减弱变换 DB=DA×0.8
for i in range(height):
   for j in range(width):
       gray = int(grayImage[i,j]*0.8)
       result[i,j] = np.uint8(gray)

#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)

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

其输出结果如图12-4所示,图像的所有灰度值减弱,图像变得更暗。

Python图像运算之图像灰度线性变换详解

五.图像灰度反色变换

反色变换又称为线性灰度求补变换,它是对原图像的像素值进行反转,即黑色变为白色,白色变为黑色的过程。

DB=255-DA

其Python实现代码如下所示:

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

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

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

#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]

#创建一幅图像
result = np.zeros((height, width), np.uint8)

#图像灰度反色变换 DB=255-DA
for i in range(height):
   for j in range(width):
       gray = 255 - grayImage[i,j]
       result[i,j] = np.uint8(gray)

#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)

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

其输出结果如图12-5所示,图像处理前后的灰度值是互补的。

Python图像运算之图像灰度线性变换详解

图像灰度反色变换在医学图像处理中有一定的应用,如图12-6所示:

Python图像运算之图像灰度线性变换详解

六.总结

本文主要讲解图像灰度线性变换,包括图像灰度上移、图像对比度增强变换、图像对比度减弱变换和图像灰度反色变换。希望大家一定要自己实现文章中的代码,更好地提升编程能力。

来源:https://blog.csdn.net/Eastmount/article/details/123191792

标签:Python,图像,灰度,线性,变换
0
投稿

猜你喜欢

  • TensorBoard 计算图的可视化实现

    2021-12-06 19:39:58
  • Python学习小技巧之利用字典的默认行为

    2021-10-10 23:48:29
  • matplotlib基础绘图命令之errorbar的使用

    2022-03-10 23:20:38
  • 在 Python 中如何将天数添加到日期

    2023-02-09 03:34:30
  • windows 10下安装搭建django1.10.3和Apache2.4的方法

    2022-01-01 01:07:51
  • 当标题不能显示完整的时候

    2007-11-20 13:23:00
  • Python的@property的使用

    2021-03-27 11:02:25
  • 详解解决Python memory error的问题(四种解决方案)

    2021-03-11 14:59:11
  • mysql中的general_log(查询日志)开启和关闭

    2024-01-19 01:49:10
  • pydantic进阶用法示例详解

    2022-01-31 07:00:03
  • lnmp重置mysql数据库root密码的两种方法

    2024-01-25 13:55:51
  • Perl中chomp和chop的区别介绍

    2023-12-03 18:09:43
  • 数据库Oracle数据的异地的自动备份

    2010-07-27 13:28:00
  • Python代码块及缓存机制原理详解

    2023-07-02 08:12:07
  • 我的css样式写法总结

    2009-01-18 13:04:00
  • Python figure参数及subplot子图绘制代码

    2023-09-14 17:13:00
  • Python写的贪吃蛇游戏例子

    2023-06-26 15:50:55
  • python实现Zabbix-API监控

    2022-04-23 17:41:00
  • Cython处理C字符串的示例详解

    2021-12-03 01:17:27
  • 使用vux实现上拉刷新功能遇到的坑

    2024-04-28 09:25:18
  • asp之家 网络编程 m.aspxhome.com