python 灰度图像转彩色,python彩图转灰度图

  python 灰度图像转彩色,python彩图转灰度图

  本文将介绍彩色图像灰度化和二值化的原理,并使用Python实现相应的算法内容。

  【彩色图像的灰度】1。定义在上一节中,我们介绍了8位单色灰度贴图,它使用0-255来表示一个像素。然而,在实际使用中,我们最常用的是彩色图像的灰度。对于32位bgra彩色图像,或者24位rgb/bgr彩色图像,一个像素是红绿蓝三原色的混合,这就是绘画中的配色过程。如何调制灰色?其实很简单。只要红、绿、蓝混合到相同的程度,结果就会是灰色。基于这个原理,我们可以给出彩色图像灰度化的本质:R=G=B,即红、绿、蓝三个通道的像素值相等。此时彩色图像为灰度图像,这个过程称为彩色图像的灰度化。

  如图1所示,左侧是32bgra彩色图像,右侧是相应的灰度图像。灰度图像算法来自Photoshop的“脱色”命令。

  (a)32位彩色图像(b)32位灰度图像

  图1彩色图像灰度化示例

  2.算法灰度化彩色图像常用的算法有三种:明度公式、视觉公式和Photoshop脱色公式。

  亮度公式

  其实亮度公式就是取一个像素的红绿蓝三个通道的平均值,取平均值作为该像素的灰度值,从而达到灰度的效果。我们用Python语言实现,代码如下:

  ///

  导入numpy作为NP导入matplotlib。pyplot作为plt导入matplotlib。image as img # brightness方法image graying def img gray _ Lum(im): image gray im:源图像返回灰度图像。 # img array=NP . array(im)img array=NP . array(im,Dtype=np.float32)#读取浮点格式的图像数据rows=im . shape[0]cols=im . shape[1]for I in range(rows):for j in range(cols):img array[I,j,]=np.clip((imgarray[i,j,0] imgarray[i,j,1] imgarray[i,j,2])* 0.30uint8) #另存为uint8类型图像im=img.imread(test.jpg)#图像读取im=img gray _ lum(im)PLT . im show(im)#图像显示img.imsave(save.jpg ,im

  图2彩色图像的灰度(明度公式)

  可视化公式

  因为人眼对颜色的感觉不同,人眼对绿色的敏感度最高,对蓝色的敏感度最低。所以上面的公式是对像素的RGB分量进行加权平均后得到的更合理的灰度图像,这个公式也是最经典的灰度公式。

  我们用Python语言实现,代码如下:

  /

  import numpy as NP import matplotlib . py plot as PLT import matplotlib . image as img # visual image graying def img gray _ Version(im): image gray im:source image Return gray image imgarray=np.array(im,dtype=NP . float 32)rows=im . shape[0]cols=im . shape[1]for I in range(rows):for j in range(cols):img array[I,j,]=(imgarray[i,j,0] * 0.299 imgarray[i,j,1] * 0.587 imgarray[i,j,2] * 0.114)返回img array.as类型(NP . ui

  我们测试了视觉颜色方法对彩色图像灰度化的影响,如图3-3所示。

  图3彩色图像的灰度(视觉颜色公式)

  Photoshop脱色配方

  Photoshop中的脱色公式是一个灰度公式,它考虑了图像的对比度信息。能更好的突出色彩对比,在一些颜色相近的图像中会更明显。它的算法比较简单。它可以计算每个像素的RGB三通道值的最大值和最小值,然后计算两者的平均值,取平均值作为灰度结果。我们用Python语言实现,代码如下:

  ///

  import numpy as NP import matplotlib . py plot as PLT import matplotlib . image as img # Photoshop image graying def img gray _ PS(im): image gray im:source image Return gray image imgarray=np.array(im,dtype=NP . float 32)rows=im . shape[0]cols=im . shape[1]for I in range(rows):for j in range(cols):max value=np.maximum(imgarray[i,j,0),NP . maximum(imgarray[i,j,1],img array[I,j,2]))min value=NP . minimum(img array[I,j,0),NP . minimum(img array[img array

  我们用Photoshop脱色法测试彩色图像的灰度化效果,如图4-4所示。

  图4彩色图像的灰度化(Photoshop脱色法)

  以上三种常用的彩色图像灰度化算法,作为初学者,要透过现象看本质,把握灰度化的本质,即RGB三个通道颜色值相同。

  灰度算法不是唯一的。可以根据自己的需求设计自己的灰度算法,做到举一反三,学以致用。

  【彩色图像的阈值二值化】作为本节的第二个内容,彩色图像的二值化实际上就是将一对彩色图像转换成只有两种颜色的图像。我们通常说的黑白阈值化只是特例,或者说黑白二值化是狭义的二值化,而任意两种颜色二值化都是更广义的理解。如图5-5所示,这些被称为二值化。

  图5。彩色图像二值化示例

  让我们以灰度图像的二值化为例。算法公式如下:

  其中,C1和C2分别代表了两种颜色值。如果是黑白二值化,C1和C2代表两种颜色,Threshold代表阈值,范围为[0,255]。根据阈值,像素分为C1和C2。

  我们用Python语言实现灰度图像的二值化算法,代码如下:

  import numpy as NP import matplotlib . py plot as pltimport matplotlib . image as img # image binary Threshold process def imgBinaryThreshold(img,Threshold=128): image binary Threshold im:source image Threshold:Threshold从0到255返回灰度图像。 imgarray=np.array(im,dtype=NP . uint 8)rows=im . shape[0]cols=im . shape[1]for I in range(rows):for j in range(cols):gray=(imgarray[i,j,0] * 0.299 imgarray[i,j,1] * 0.587 imgarray[i,j,2] * 0.114) if(灰度阈值):img array[I,j,]=0 else: imgarray

  我们给出彩色图像二值化的效果测试,如图6-6所示。

  图6彩色图像二值化(黑白二值,阈值=128)

  以上内容是彩色图像的二值化算法。其实无论是灰度化还是彩色化都没有那么简单,但是作为初学者或者初学者,只有掌握了这些最基础的内容,才能钻研更高级的理论。这是事实。

  【知识拓展】灰度和二值化都是数字图像处理中的重要组成部分。在灰度等级中,保持对比度的彩色图像脱色算法是最常用的一种,研究了特殊图像颜色下的灰度化,如图7-7所示。经过一般的灰度化算法处理后,图像的原始信息不再能够被识别,而保持对比度的灰度化算法仍然能够清晰地保留这些信息。

  (a)原始图像(b)Photoshop灰度化(c)Photoshop脱色(d)对比度保持方法

  图7。对比度保持法灰度化实例

  与图5 (d)所示方法相关的论文如下:

  Color2Gray:保持显著性的颜色移除

  对比度保持脱色

  实时对比度保持脱色

  二值化在图像分割中非常常见。二值化研究的难点是如何自适应地设置阈值对图像进行二值化。一些简单的自动二值化算法包括:Ostu阈值法、P-分位数阈值法、统计阈值法、最大类间方差二值化法等。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: