[Python图像处理] 十五.图像的灰度线性变换

AI 1年前 (2022) admin
481 0 0

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

前一篇文章讲解了图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理。本文主要讲解灰度线性变换,基础性知识希望对您有所帮助。

  • 一.图像灰度线性变换原理

  • 二.图像灰度上移变换:DB=DA+50

  • 三.图像对比度增强变换:DB=DA*1.5

  • 四.图像对比度减弱变换:DB=DA*0.8

  • 五.图像灰度反色变换:DB=255-DA

  • 六.总结

文章参考自己以前系列图像处理文章及OpenCV库函数。同时,本篇文章涉及到《计算机图形学》基础知识,请大家下来补充。该系列在github所有源代码:

  • https://github.com/eastmountyxz/
    ImageProcessing-Python

前文回顾(下面的超链接可以点击喔):


学Python近八年,认识了很多大佬和朋友,感恩。深知自己很菜,得拼命努力前行,编程也没有什么捷径,干就对了。希望未来能更透彻学习和撰写文章,同时非常感谢参考文献中的大佬们的文章和分享,共勉。

– https://blog.csdn.net/eastmount


一.图像灰度线性变换原理

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

[Python图像处理] 十五.图像的灰度线性变换

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

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

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

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

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

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

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

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

[Python图像处理] 十五.图像的灰度线性变换


二.图像灰度上移变换

该算法将实现图像灰度值的上移,从而提升图像的亮度,其实现代码如下所示。由于图像的灰度值位于0至255区间之内,所以需要对灰度值进行溢出判断。

# -*- coding: utf-8 -*-import cv2  import numpy as np  import matplotlib.pyplot as plt
#读取原始图像img = cv2.imread('miao.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+50for 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()

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

[Python图像处理] 十五.图像的灰度线性变换


三.图像对比度增强变换

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

# -*- coding: utf-8 -*-import cv2  import numpy as np  import matplotlib.pyplot as plt
#读取原始图像img = cv2.imread('miao.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.5for 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)

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

[Python图像处理] 十五.图像的灰度线性变换


四.图像对比度减弱变换

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

# -*- coding: utf-8 -*-import cv2  import numpy as np  import matplotlib.pyplot as plt
#读取原始图像img = cv2.imread('miao.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.8for 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()

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

[Python图像处理] 十五.图像的灰度线性变换


五.图像灰度反色变换

反色变换又称为线性灰度求补变换,它是对原图像的像素值进行反转,即黑色变为白色,白色变为黑色的过程。其Python实现代码如下所示:

# -*- coding: utf-8 -*-import cv2  import numpy as np  import matplotlib.pyplot as plt
#读取原始图像img = cv2.imread('miao.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-DAfor 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()

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

[Python图像处理] 十五.图像的灰度线性变换

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


[Python图像处理] 十五.图像的灰度线性变换



四.总结


写到这里,这篇文章就介绍结束。希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。文章写于连续奔波考博,经历的事情太多,有喜有悲,需要改变自己好好对家人,也希望读者与我一起加油。

感谢在求学路上的同行者,不负遇见,勿忘初心。月是故乡圆啊~

[Python图像处理] 十五.图像的灰度线性变换


2022年即将离去,又是忙碌的一年,感谢女神的鼓励和小珞治愈的笑容。十二月份会更加忙碌,希望一切顺利。守得云开见明月,加油!


读博四年,还是写了一些东西,从初入安全的无知到现在的懵懂,也记录一些笔记,也希望对大家有所帮助。今年确实没啥时间写博客了,也没太多时间详细解答博友的问题,还请见谅。图片中颜色越浅甚至白色的时候,自己往往越忙,更多的博客和代码是寒暑假分享,项目、学习、科研、技术,最重要的还是家庭和亲情,娜美人生,感恩前行。


[Python图像处理] 十五.图像的灰度线性变换


希望能早日毕业,回到家乡贵州继续当个教书匠,感觉好多要分享的博客,好多要上的课程,好多要开源的代码,好多要学习的知识,期待再次站在讲台前的那一天。继续沉下心去学习,虽菜但勤,继续加油,晚安娜!

[Python图像处理] 十五.图像的灰度线性变换


(By:娜璋之家 2022-12-13 夜于地球)


参考文献:

  • 基于苗族服饰的图像锐化和边缘提取技术研究[J]. 现代计算机,2018(10).

  • 《数字图像处理》(第3版),冈萨雷斯著,阮秋琦译,电子工业出版社,2013年.

  • 《数字图像处理学》(第3版),阮秋琦,电子工业出版社,2008年,北京.

  • 《OpenCV3编程入门》,毛星云,冷雪飞,电子工业出版社,2015.

  • Opencv学习(十六)之颜色空间转换cvtColor()

  • python+opencv+图像特效(图像灰度处理、颜色翻转、图片融合,边缘检测,浮雕效果,颜色映射)

  • [数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解

原文始发于微信公众号(娜璋AI安全之家):[Python图像处理] 十五.图像的灰度线性变换

版权声明:admin 发表于 2022年12月13日 下午4:44。
转载请注明:[Python图像处理] 十五.图像的灰度线性变换 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...