-
2022-02-25 14:19:50
图像处理的第一步操作基本都是进行灰度化,二灰度化的方式都很多种,可以根据自己的具体需要进行参数调整,基本分为四大种,分别为YUV亮度灰度化、最大值灰度化、平均值灰度化、Gamma校正灰度化。
1.Gamma校正灰度化
原理如下计算公式:
G r a y = R 2.2 + ( 1.5 G ) 2.2 + ( 0.6 B ) 2.2 1 + 1. 5 2.2 + 0. 6 2.2 2.2 Gray=\sqrt[2.2]{\frac{R^{2.2}+(1.5G)^{2.2}+(0.6B)^{2.2}}{1+1.5^{2.2}+0.6^{2.2}}} Gray=2.21+1.52.2+0.62.2R2.2+(1.5G)2.2+(0.6B)2.2
注意这里的2.2次方和2.2次方根,RGB颜色值不能简单直接相加,而是必须用2.2次方换算成物理光功率。因为RGB值与功率并非简单的线性关系,而是幂函数关系,这个函数的指数称为Gamma值,一般为2.2,而这个换算过程,称为Gamma校正。import cv2 import numpy as np import math import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文 def Gamma_GRAY(picture_path): #Gamma校正灰度化:Gray= # 读取图像 img = cv2.imread(picture_path) # 获取图像尺寸 h, w = img.shape[0:2] # 自定义空白单通道图像,用于存放灰度图 gray = np.zeros((h, w), dtype=img.dtype) # 对原图像进行遍历,然后分别对B\G\R按比例灰度化 for i in range(h): for j in range(w): a = img[i, j, 2] ** (2.2) + 1.5 * img[i, j, 1] ** (2.2) + 0.6 * img[i, j, 0] ** (2.2) # 分子 b = 1 + 1.5 ** (2.2) + 0.6 ** (2.2) # 分母 gray[i, j] = pow(a / b, 1.0 / 2.2) # 开2.2次方根 gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB) # BGR转换为RGB显示格式,方便通过matplotlib进行图像显示 plt.imshow(gray) plt.title('Gamma校正灰度化') plt.axis('off') # 关闭坐标轴 设置为on则表示开启坐标轴 plt.show() # 显示图像
2.平均值灰度化
原理: 对B、G、R三通道像素求取平均值作为灰度值,公式为:
g r a y = ( B + G + R ) / 3 gray=(B+G+R)/3 gray=(B+G+R)/3def Avrage_GRAY(picture_path): #平均值灰度化:对B、G、R三通道像素求取平均值作为灰度值,公式为:gray=(B+G+R)/3 # 读取图像 img = cv2.imread(picture_path) # 获取图像尺寸 h, w = img.shape[0:2] # 自定义空白单通道图像,用于存放灰度图 gray = np.zeros((h, w), dtype=img.dtype) # 对原图像进行遍历,然后分别对B\G\R按比例灰度化 for i in range(h): for j in range(w): gray[i, j] = (int(img[i, j, 0]) + int(img[i, j, 1]) + int(img[i, j, 2])) / 3 # 求3通道像素的平均值作为灰度值 gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB) # BGR转换为RGB显示格式,方便通过matplotlib进行图像显示 plt.imshow(gray) plt.title('平均值灰度化') plt.axis('off') # 关闭坐标轴 设置为on则表示开启坐标轴 plt.show() # 显示图像
3.最大值灰度化
原理:以B、G、R通道中最大的像素作为整体像素,公式为:
B = G = R = m a x ( [ B , G , R ] ) B=G=R=max([B,G,R]) B=G=R=max([B,G,R])def Max_GRAY(picture_path): #最大值灰度化:以B、G、R通道中最大的像素作为整体像素,公式为:B=G=R=max([B,G,R]) #读取图像 img = cv2.imread(picture_path) # 获取图像尺寸 h, w = img.shape[0:2] # 自定义空白单通道图像,用于存放灰度图 gray = np.zeros((h, w), dtype=img.dtype) # 对原图像进行遍历,然后分别对B\G\R按比例灰度化 for i in range(h): for j in range(w): gray[i, j] = max(img[i, j, 0], img[i, j, 1], img[i, j, 2]) # 求3通道中最大的值 gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB) # BGR转换为RGB显示格式,方便通过matplotlib进行图像显示 plt.imshow(gray) plt.title('最大值灰度') plt.axis('off') # 关闭坐标轴 设置为on则表示开启坐标轴 plt.show() # 显示图像
4.YUV亮度灰度化
原理:根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应,以这个亮度值表达图像的灰度值。公式为:
Y = 0.3 R + 0.59 G + 0.11 B Y=0.3R+0.59G+0.11B Y=0.3R+0.59G+0.11Bdef Cv2_GRAY(picture_path): # YUV亮度灰度处理:Y=0.3R+0.59G+0.11B #读取图像 img=cv2.imread(picture_path) gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#BGR转换为灰度 print(gray.shape) img= cv2.cvtColor(gray,cv2.COLOR_BGR2RGB)#BGR转换为RGB显示格式 plt.imshow(img) plt.title('灰度处理') plt.axis('off')#关闭坐标轴 设置为on则表示开启坐标轴 plt.show()#显示图像 return gray
更多相关内容 -
图像灰度化软件
2019-04-24 20:15:48基于VS2015 MFC平台的图像灰度化软件,主要涉及MFC文件对话框编程、pictrue control控件显示Mat类型图像等 -
图像灰度化处理
2017-11-24 16:42:43利用opencv库,将彩色图像转化为灰度图像,并进行显示和存储, -
利用opencv3.0图像灰度化处理
2018-04-14 19:48:24利用opencv3.0和vs2015配置环境对多张图像进行灰度化处理 -
用openCV实现图像灰度化并保存,(MFC实现)
2021-03-08 09:30:43用openCV实现图像灰度化并保存,(MFC实现) -
彩色图像灰度化的三种方法
2018-05-29 16:06:34彩色图像的灰度化代码以及相关的PPT说明,总共有三种方法 -
RTCP图像灰度化算法
2019-04-03 21:39:20RTCP图像灰度化算法,可以更完美的保证图像灰度化后更多色彩信息,在opencv2下使用,3没测试过!!! -
Matlab-图像灰度化处理 程序
2020-11-14 10:39:20灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象... -
C语言图像灰度化处理完整程序-C代码类资源
2020-12-05 19:00:30完整实现了图像的灰度化,通过C语言的编程,内部含有完整的图像 完整实现了图像的灰度化,通过C语言的编程,内部含有完整的图像 -
图像灰度化程序代码
2019-05-06 15:57:48MATLAB实现彩色图像的灰度化,代码还行,可以下载试试 -
基于c#图像灰度化、灰度反转、二值化的实现方法详解
2020-12-31 22:38:43图像灰度化:将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围... -
MATLAB图像灰度化处理
2013-05-07 21:43:18MATLAB灰度化MATLAB图像灰度化处理,三种灰度算法 -
详解Java如何实现图像灰度化
2020-09-01 18:50:06主要介绍了灰度化的几种方法,以及如何使用Java实现灰度化。同时分析了网上一种常见却并不妥当的Java灰度化实现,以及证明了opencv的灰度化是使用“加权灰度化”法,下面一起来看看。 -
[Python从零到壹] 四十三.图像增强及运算篇之图像点运算和图像灰度化处理
2022-02-18 16:19:44第二部分将讲解图像运算和图像增强,第一篇文章是图像点运算的灰度化处理知识,包括各种灰度算法的实现,以及灰度线性变换和灰度非线性变换。希望文章对您有所帮助,如果有不足之处,还请海涵。欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。
该系列文章主要讲解Python OpenCV图像处理和图像识别知识,前期主要讲解图像处理基础知识、OpenCV基础用法、常用图像绘制方法、图像几何变换等,中期讲解图像处理的各种运算,包括图像点运算、形态学处理、图像锐化、图像增强、图像平滑等,后期研究图像识别、图像分割、图像分类、图像特效处理以及图像处理相关应用。
第二部分将讲解图像运算和图像增强,第一篇文章是图像点运算的灰度化处理知识,包括各种灰度算法的实现,以及灰度线性变换和灰度非线性变换。希望文章对您有所帮助,如果有不足之处,还请海涵。
下载地址:
前文赏析:
第一部分 基础语法
- [Python从零到壹] 一.为什么我们要学Python及基础语法详解
- [Python从零到壹] 二.语法基础之条件语句、循环语句和函数
- [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象
第二部分 网络爬虫
- [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
- [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解
- [Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解
- [Python从零到壹] 七.网络爬虫之Requests爬取豆瓣电影TOP250及CSV存储
- [Python从零到壹] 八.数据库之MySQL基础知识及操作万字详解
- [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)
- [Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备技能)
第三部分 数据分析和机器学习
- [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)
- [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)
- [Python从零到壹] 十三.机器学习之聚类分析万字总结全网首发(K-Means、BIRCH、层次聚类、树状聚类)
- [Python从零到壹] 十四.机器学习之分类算法三万字总结全网首发(决策树、KNN、SVM、分类算法对比)
- [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解
- [Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解
- [Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解
- [Python从零到壹] 十八.可视化分析之Basemap地图包入门详解
- [Python从零到壹] 十九.可视化分析之热力图和箱图绘制及应用详解
- [Python从零到壹] 二十.可视化分析之Seaborn绘图万字详解
- [Python从零到壹] 二十一.可视化分析之Pyechart绘图万字详解
- [Python从零到壹] 二十二.可视化分析之OpenGL绘图万字详解
- [Python从零到壹] 二十三.十大机器学习算法之决策树分类分析详解(1)
- [Python从零到壹] 二十四.十大机器学习算法之KMeans聚类分析详解(2)
- [Python从零到壹] 二十五.十大机器学习算法之KNN算法及图像分类详解(3)
- [Python从零到壹] 二十六.十大机器学习算法之朴素贝叶斯算法及文本分类详解(4)
- [Python从零到壹] 二十七.十大机器学习算法之线性回归算法分析详解(5)
- [Python从零到壹] 二十八.十大机器学习算法之SVM算法分析详解(6)
- [Python从零到壹] 二十九.十大机器学习算法之随机森林算法分析详解(7)
- [Python从零到壹] 三十.十大机器学习算法之逻辑回归算法及恶意请求检测应用详解(8)
- [Python从零到壹] 三十一.十大机器学习算法之Boosting和AdaBoost应用详解(9)
- [Python从零到壹] 三十二.十大机器学习算法之层次聚类和树状图聚类应用详解(10)
第四部分 Python图像处理基础
- [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置
- [Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像
- [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
- [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解
- [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制
- [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)
- [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
- [Python从零到壹] 四十.图像处理基础篇之图像量化处理
- [Python从零到壹] 四十一.图像处理基础篇之图像采样处理
- [Python从零到壹] 四十二.图像处理基础篇之图像金字塔向上取样和向下取样
第五部分 Python图像运算和图像增强
第六部分 Python图像识别和图像高阶案例
第七部分 NLP与文本挖掘
第八部分 人工智能入门知识
第九部分 网络攻防与AI安全
第十部分 知识图谱构建实战
扩展部分 人工智能高级案例
作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。
一.图像点运算概念
图像点运算(Point Operation)指对于一幅输入图像,将产生一幅输出图像,输出图像的每个像素点的灰度值由输入像素点决定。点运算实际上是灰度到灰度的映射过程,通过映射变换来达到增强或者减弱图像的灰度。还可以对图像进行求灰度直方图、线性变换、非线性变换以及图像骨架的提取。它与相邻的像素之间没有运算关系,是一种简单和有效的图像处理方法[1]。
图像的灰度变换可以通过有选择的突出图像感兴趣的特征或者抑制图像中不需要的特征,从而改善图像的质量,凸显图像的细节,提高图像的对比度。它也能有效地改变图像的直方图分布,使图像的像素值分布更为均匀[2-3]。它在实际中有很多的应用:
- 光度学标定
- 对比度增强
- 对比度扩展
- 显示标定
- 轮廓线确定
设输入图像为A(x,y),输出图像为B(x,y),则点运算可以表示为:
图像点运算与几何运算存在差别,不会改变图像内像素点之间的空间位置关系。同时与局部(领域)运算也存在差别,输入像素和输出像素一一对应。
二.图像灰度化处理
图像灰度化是将一幅彩色图像转换为灰度化图像的过程。彩色图像通常包括R、G、B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色图像的R、G、B三个分量相等的过程。灰度图像中每个像素仅具有一种样本颜色,其灰度是位于黑色与白色之间的多级色彩深度,灰度值大的像素点比较亮,反之比较暗,像素值最大为255(表示白色),像素值最小为0(表示黑色)。
假设某点的颜色由RGB(R,G,B)组成,常见灰度处理算法如表11-1所示:
表11-1中Gray表示灰度处理之后的颜色,然后将原始RGB(R,G,B)颜色均匀地替换成新颜色RGB(Gray,Gray,Gray),从而将彩色图片转化为灰度图像。一种常见的方法是将RGB三个分量求和再取平均值,但更为准确的方法是设置不同的权重,将RGB分量按不同的比例进行灰度划分。比如人类的眼睛感官蓝色的敏感度最低,敏感最高的是绿色,因此将RGB按照0.299、0.587、0.144比例加权平均能得到较合理的灰度图像,如公式11-2所示[4-6]。
在日常生活中,我们看到的大多数彩色图像都是RGB类型,但是在图像处理过程中,常常需要用到灰度图像、二值图像、HSV、HSI等颜色,OpenCV提供了cvtColor()函数实现这些功能。其函数原型如下所示:
- dst = cv2.cvtColor(src, code[, dst[, dstCn]])
– src表示输入图像,需要进行颜色空间变换的原图像
– dst表示输出图像,其大小和深度与src一致
– code表示转换的代码或标识
– dstCn表示目标图像通道数,其值为0时,则有src和code决定
该函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,其中,RGB是指Red、Green和Blue,一副图像由这三个通道(channel)构成;Gray表示只有灰度值一个通道;HSV包含Hue(色调)、Saturation(饱和度)和Value(亮度)三个通道。
在OpenCV中,常见的颜色空间转换标识包括CV_BGR2BGRA、CV_RGB2GRAY、CV_GRAY2RGB、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS等。下面是调用cvtColor()函数将图像进行灰度化处理的代码。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np #读取原始图片 src = cv2.imread('luo.png') #图像灰度化处理 grayImage = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #显示图像 cv2.imshow("src", src) cv2.imshow("result", grayImage) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
输出结果如图11-1所示,左边是彩色的“小珞珞”原图,右边是将彩色图像进行灰度化处理之后的灰度图。其中,灰度图将一个像素点的三个颜色变量设置为相等(R=G=B),此时该值称为灰度值。
同样,可以调用如下核心代码将彩色图像转换为HSV颜色空间,其输出结果如图11-2所示。
- grayImage = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
下面代码对比了九种常见的颜色空间,包括BGR、RGB、GRAY、HSV、YCrCb、HLS、XYZ、LAB和YUV,并循环显示处理后的图像。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #读取原始图像 img_BGR = cv2.imread('luo.png') img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB) #BGR转换为RGB img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY) #灰度化处理 img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV) #BGR转HSV img_YCrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb) #BGR转YCrCb img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS) #BGR转HLS img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ) #BGR转XYZ img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB) #BGR转LAB img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV) #BGR转YUV #调用matplotlib显示处理结果 titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV'] images = [img_BGR, img_RGB, img_GRAY, img_HSV, img_YCrCb, img_HLS, img_XYZ, img_LAB, img_YUV] for i in range(9): plt.subplot(3, 3, i+1), plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()
其运行结果如图11-3所示:
三.基于像素操作的图像灰度化处理
前面讲述了调用OpenCV中cvtColor()函数实现图像灰度化的处理,接下来讲解基于像素操作的图像灰度化处理方法,主要是最大值灰度处理、平均灰度处理和加权平均灰度处理方法。
1.最大值灰度处理方法
该方法的灰度值等于彩色图像R、G、B三个分量中的最大值,公式如下:
其方法灰度化处理后的灰度图亮度很高,实现代码如下。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #读取原始图像 img = cv2.imread('luo.png') #获取图像高度和宽度 height = img.shape[0] width = img.shape[1] #创建一幅图像 grayimg = np.zeros((height, width, 3), np.uint8) #图像最大值灰度处理 for i in range(height): for j in range(width): #获取图像R G B最大值 gray = max(img[i,j][0], img[i,j][1], img[i,j][2]) #灰度图像素赋值 gray=max(R,G,B) grayimg[i,j] = np.uint8(gray) #显示图像 cv2.imshow("src", img) cv2.imshow("gray", grayimg) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
其输出结果如图11-4所示,其处理效果的灰度偏亮。
2.平均灰度处理方法
该方法的灰度值等于彩色图像R、G、B三个分量灰度值的求和平均值,其计算公式如公式(11-4)所示:
平均灰度处理方法实现代码如下。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #读取原始图像 img = cv2.imread('luo.png') #获取图像高度和宽度 height = img.shape[0] width = img.shape[1] #创建一幅图像 grayimg = np.zeros((height, width, 3), np.uint8) #图像平均灰度处理方法 for i in range(height): for j in range(width): #灰度值为RGB三个分量的平均值 gray = (int(img[i,j][0]) + int(img[i,j][1]) + int(img[i,j][2])) / 3 grayimg[i,j] = np.uint8(gray) #显示图像 cv2.imshow("src", img) cv2.imshow("gray", grayimg) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
其输出结果如图11-5所示:
3.加权平均灰度处理方法
该方法根据色彩重要性,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。
加权平均灰度处理方法实现代码如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 import numpy as np import matplotlib.pyplot as plt #读取原始图像 img = cv2.imread('luo.png') #获取图像高度和宽度 height = img.shape[0] width = img.shape[1] #创建一幅图像 grayimg = np.zeros((height, width, 3), np.uint8) #图像平均灰度处理方法 for i in range(height): for j in range(width): #灰度加权平均法 gray = 0.30 * img[i,j][0] + 0.59 * img[i,j][1] + 0.11 * img[i,j][2] grayimg[i,j] = np.uint8(gray) #显示图像 cv2.imshow("src", img) cv2.imshow("gray", grayimg) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows()
其输出结果如图11-6所示:
四.总结
本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现。通过灰度处理,我们能有效将彩色图像转换为灰度图,为后续的边缘提取等处理提供支撑,也可能实现图像处理软件最简单的彩色图转黑白的效果,希望对您有所帮助。
感谢在求学路上的同行者,不负遇见,勿忘初心。图像处理系列主要包括三部分,分别是:
祝大家新年快乐,虎年大吉,阖家幸福,万事如意,小珞珞给大家拜年了。亲情是真的很美,很治愈。希望小珞珞和他妈妈能开心每一天,全家人身体健康。小珞珞这小样子可爱极了,爱你们喔!
(By:娜璋之家 Eastmount 2022-02-18 夜于武汉 https://blog.csdn.net/Eastmount )
参考文献:
- [1] 冈萨雷斯著,阮秋琦译. 数字图像处理(第3版)[M]. 北京:电子工业出版社,2013.
- [2] 张铮,王艳平,薛桂香等. 数字图像处理与机器视觉——Visual C++与Matlab实现[M]. 北京:人民邮电出版社,2014.
- [3] 阮秋琦. 数字图像处理学(第3版)[M]. 北京:电子工业出版社,2008.
- [4] 毛星云,冷雪飞. OpenCV3编程入门[M]. 北京:电子工业出版社,2015.
- [5] Eastmount. [数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解[EB/OL]. (2015-05-28). https://blog.csdn.net/eastmount/article/details/46010637.
- [6] Eastmount. [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理[EB/OL]. ( 2019-03-25). https://blog.csdn.net/Eastmount/article/details/88785768.
-
Android实现图像灰度化、线性灰度变化和二值化处理方法
2020-08-26 20:59:31主要介绍了Android实现图像灰度化、线性灰度变化和二值化处理方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
灰度化_matlab_灰度化_灰度倒置代码_图像处理_图像等高线_
2021-09-30 07:39:28对图像进行灰度化处理、绘制等高线图像以及得到灰度倒置后的图像源代码 -
MATLAB-图像灰度化处理
2012-04-26 00:48:53M文件,可以在MATLAB平台上实现彩色图像的灰度化处理,有比对。 -
EmguCV图像灰度化和二值化(VS2010窗体+代码)
2018-06-10 22:03:35C#和EmguCV实现图像灰度化和二值化(VS2010窗体+代码)。学生一枚,虚心接受批评。 -
图像灰度化的三种常见方法
2022-04-25 12:09:20灰度化是图像处理的根基,下层基础决定上层建筑,因此学习灰度化是有关图像的一切研究之开端。ⅠWhat
首先是baike给出的官方灰度化定义:
灰度化,在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。
简单理解的话,就是把彩色的图像转化为黑白(亮度)图像。
当灰度为255的时候,表示最亮(纯白);当灰度为0的时候,表示最暗(纯黑)。
灰度化有什么好处呢?
灰度化是图像处理的根基,下层基础决定上层建筑,因此学习灰度化是有关图像的一切研究之开端。
Ⅱ How
彩色图像转化为灰度图像共有三种常用的方法:
第一种,直接取R, B, G三个分量中数值最大的分量的数值。(0视为最小,255视为最大)。
第二种,取R, B, G三个分量中数值的均值
第三种,根据人眼对于R, B, G三种颜色的敏感度,按照一定的权值进行加权平均得到。
可以发现人眼对绿色最为敏感,因此其系数最高。
matlab代码实现:
%%三种方法实现灰度化与调用MATLAB函数实现灰度化 clear all; clc Img = imread('mj.jpg'); [n m a] = size(Img);%判断图像的大小 a为三色 R, G, B GrayImage= rgb2gray(Img);%调用MATLAB函数实现灰度化 Img_Gray = zeros(n, m); for x = 1 : n %通过双循环对图像进行灰度化处理 for y = 1 : m Img_Gray_1(x, y) = max(Img(x, y, 1),max(Img(x, y, 2),Img(x, y, 3))); %最大值法 Img_Gray_2(x, y) = (uint16(Img(x, y, 1)) + uint16(Img(x, y, 2)) + uint16(Img(x, y, 3)))/3;%平均值法 Img_Gray_3(x, y) = 0.3 * Img(x, y, 1) + 0.59 * Img(x, y, 2) + 0.11 * Img(x, y, 3);%加权平均法 end end figure(1); subplot(1, 3, 1); imshow(Img); title('原图'); subplot(1, 3, 2); imshow(GrayImage); title('调用系统函数实现灰度化'); subplot(1, 3, 3); imshow(uint8(Img_Gray_3)); title('加权平均方法'); figure(2); subplot(1, 3, 1); imshow(Img_Gray_1); title('最大值法'); subplot(1, 3, 2); imshow(uint8(Img_Gray_2)); title('平均值法'); subplot(1, 3, 3); imshow(uint8(Img_Gray_1)); title('加权平均法');
结果:
可以发现
1)最大值法转换的灰度图亮度很高。
2)平均值法产生的灰度图像比较柔和(暗淡, 暗处更暗)。
3)加权平均法得到的灰度图像效果最好(maybe..)。
Ⅲ Why
图像进行灰度化处理后,可以进行进一步的特征提取操作。Phash(感知哈希算法)就是一个简单的例子,下一篇将给大家讲述一下Phash的实现原理和主要思想。
-
图像处理:图像灰度化
2019-06-18 16:42:06灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象...灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象素数。
灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图象,它的象素值只能为0或1,我们说它的灰度级为2。用个例子来说明吧:一个256级灰度的图象,如果RGB三个量相同时,如:RGB(100,100,100)就代表灰度为100,RGB(50,50,50)代表灰度为50。
现在大部分的彩色图像都是采用RGB颜色模式,处理图像的时候,要分别对RGB三种分量进行处理,实际上RGB并不能反映图像的形态特征,只是从光学的原理上进行颜色的调配。
图像灰度化处理可以作为图像处理的预处理步骤,为之后的图像分割、图像识别和图像分析等上层操作做准备。
图像灰度化处理有以下几种方式:
1. 分量法
将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。
2. 最大值法
将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。
3. 平均值法
将彩色图像中的三分量亮度求平均得到一个灰度值。
4. 加权平均法
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。
以上这四种处理方式需要根据实际情况,进行选择。
我个人使用C#实现情况如下:
-
Python图像灰度化处理
2021-10-15 18:10:40from PIL import Image #用于基本的图像处理 import matplotlib.pyplot as plt # plt 用于显示图片 #定义一个显示函数showing def showimg(img, isgray=False): plt.axis("off") if isgray == True: plt.imshow... -
OpenCV图像灰度化的六种方法
2020-05-29 01:32:15方法一:读取时灰度化处理 cv.imread(filename, cv.IMREAD_GRAYSCALE) 具体cv.imread及其使用方法参考博客OpenCV图像的加载、显示与保存 方法二:调用cvtColor灰度化,其中cvtColor如下: cv.cvtColor(src, code, ... -
基于opencv库把图像灰度化,二值化
2022-03-14 00:18:321.在openCV中,通过cvtColor函数实现图像灰度化,格式为: cv2.cvtColor(src,code[,dst[,dstCn]]) 其中src表示输入的图像,没有默认值。 code表示颜色空间类型。 dst表示输出的图像,没有默认值。 dstCn表示... -
简单图像灰度化处理python代码
2021-07-20 14:47:46简单图像灰度化处理–python 图像灰度化处理简单一句话:将RGB三个通道的像素值改成一样的即可。 import cv2 def Image_gray(image):#灰度化函数 h, w, ch = image.shape for row in range(h): for col in range... -
MATLAB图像灰度化—优化三种灰度化算法
2020-08-22 22:12:40一、彩色、灰度、二值、索引图像 彩色图像:每个像素由R、G、B三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形unit8。(通常我们认为一个彩色图像是由三页组成的,分别是R、G、B,每一页都是一个... -
opencv图像灰度化如何处理
2022-03-14 18:17:26#include #include #include //#include using namespace std; using namespace cv; #define ... //图像灰度化 imshow("output", dst); waitKey(0); return 0; } 是我今天的作业之一,怕忘记就先记录一下。 -
LabVIEW双目采集程序,打开左右两个摄像头采集图像后自动合为一个图像,并对图像进行图像灰度化,图像灰度...
2022-05-09 17:16:38本程序为LabVIEW双目采集程序,打开左右两个摄像头采集图像后自动合为一个图像,并对图像进行图像灰度化,图像灰度均值化,图像中值滤波一系列操作,并可以保存图像为jpeg图像 -
图像灰度化程序
2014-02-10 11:17:29图像灰度化小程序,适用于图像处理初学者。开发平台Vs2008+OpenCV2.32。 -
数字图像处理(16): 图像颜色空间转换 和 OpenCV图像灰度化处理
2019-05-04 11:03:381 图像灰度化原理 2 图像颜色空间转换 3 OpenCV图像灰度化处理 3.1 最大值灰度处理 3.2 平均灰度处理 3.3 加权平均灰度处理 参考资料 1 图像灰度化原理 在图像处理算法中,往往需要把彩色图像转换为灰度图像...