灰度图像线性变换非线性变换,python灰度图转换成二值图像

  灰度图像线性变换非线性变换,python灰度图转换成二值图像

  本文主要讲解灰度的线性变换。希望基础知识对你有帮助。

  本文由eastmount分享自华为云社区《[Python图像处理] 十六.图像的灰度非线性变换之对数变换、伽马变换》。

  本文主要讲解非线性变换,并使用自定义方法对灰度图像进行处理,包括对数变换和伽玛变换。

  一、图像灰度的非线性变换图像灰度的非线性变换主要有对数变换、幂变换、指数变换、分段函数变换。通过非线性关系处理图像的灰度。下面主要解释三种常见的灰度非线性变换。

  原始图像的灰度值按照公式DB=DADA/255进行非线性变换,其代码如下:

  # -*-编码:utf-8 -*-

  导入cv2

  将numpy作为np导入

  将matplotlib.pyplot作为plt导入

  #阅读原文图片

  img=cv2.imread(miao.png )

  #图像灰度转换

  grayImage=cv2.cvtColor(img,cv2。COLOR_BGR2GRAY)

  #获取图像的高度和宽度

  height=grayImage.shape[0]

  width=grayImage.shape[1]

  #创建图像

  result=np.zeros((高度,宽度),np.uint8)

  #图像灰度的非线性变换:DB=DADA/255

  对于范围内的I(高度):

  对于范围内的j(宽度):

  gray=int(grayImage[i,j])*int(grayImage[i,j])/255

  结果[i,j]=np.uint8(灰色)

  #显示图像

  cv2.imshow(灰度图像,灰度图像)

  cv2.imshow(Result ,结果)

  #等待显示

  cv2.waitKey(0)

  2.图像cv2.destroyAllWindows()的灰度非线性变换的输出结果如下图所示:

  2.图像灰度的对数变换图像灰度的对数变换一般用公式表示:

  其中C是比例比较常数,DA是原始图像灰度值,DB是变换后的目标灰度值。如下图所示,是对数曲线下灰度值的变化。

  因为对数曲线在像素值低的区域斜率大,在像素值高的区域斜率小,所以图像对数变换后暗区的对比度会有所提高。这种变换可以用来增强图像的暗细节,从而扩展压缩后的高值图像中的暗像素。

  对数变换可以扩展低灰度值,压缩高灰度值,广泛应用于光谱图像的显示。典型的应用是傅里叶频谱,其动态范围可能宽至0 ~ 106。直接显示光谱时,图像显示设备的动态范围往往达不到要求,从而丢失了很多暗部细节。但经过对数变换后,图像的动态范围被非线性压缩,从而可以清晰显示。下图中,对数变换后,未变换的光谱增加了低灰度区域的对比度,从而增强了暗区的细节。

  下面的代码实现了图像灰度的对数变换。

  # -*-编码:utf-8 -*-

  将numpy作为np导入

  将matplotlib.pyplot作为plt导入

  导入cv2

  #画一条曲线

  定义log_plot(c):

  x=np.arange(0,256,0.01)

  y=c * np.log(1 x)

  plt.plot(x,y, r ,线宽=1)

  PLT . RC params[ font . sans-serif ]=[ sim hei ]#中文标签正常显示。

  Plt.title(u 对数变换函数)

  plt.xlim(0,255),plt.ylim(0,255)

  plt.show()

  #对数变换

  定义日志(c,img):

  输出=c * np.log(1.0 img)

  输出=np.uint8(输出0.5)

  返回输出

  #阅读原文图片

  img=cv2.imread(test.png )

  #绘制对数变换曲线

  log_plot(42)

  #图像灰度对数变换

  输出=log(42,img)

  #显示图像

  cv2.imshow(Input ,img)

  cv2.imshow(Output ,输出)

  cv2.waitKey(0)

  2.cv2.destroyAllWindows()下图是对数函数处理后的效果图。对数变换对低对比度、低灰度值的图像有较好的增强效果。

  相应的对数函数曲线如图所示。

  三。图像灰度的伽玛变换伽玛变换又称指数变换或幂变换,是另一种常用的灰度非线性变换。图像灰度级的伽马变换的一般表达式如公式所示:

   1时,图像中灰度较高的区域会被拉伸,灰度较低的部分会被压缩。 1时,图像中灰度较低的区域会被拉伸,灰度较高的部分会被压缩。当=1时,灰度变换是线性的,原始图像以线性方式改变。Python实现图像灰度的伽玛转换代码如下,主要通过调用幂函数实现。

  # -*-编码

  将matplotlib.pyplot作为plt导入

  导入cv2

  #画一条曲线

  定义伽玛曲线(c,v):

  x=np.arange(0,256,0.01)

  y=c*x**v

  plt.plot(x,y, r ,线宽=1)

  PLT . RC params[ font . sans-serif ]=[ sim hei ]#中文标签正常显示。

  Plt.title(u 伽玛变换函数)

  plt.xlim([0,255]),plt.ylim([0,255])

  plt.show()

  #伽玛变换

  定义伽玛(毫克,摄氏度,伏):

  lut=np.zeros(256,dtype=np.float32)

  对于范围内的I(256):

  lut[i]=c * i ** v

  Output_img=cv2。像素灰度值的LUT(img,lut) #映射

  output _ img=NP . uint 8(output _ img 0.5)

  返回output_img

  #阅读原文图片

  img=cv2.imread(test.png )

  #绘制伽玛变换曲线

  伽玛曲线(0.00000005,4.0)

  #图像灰度伽玛变换

  输出=伽玛(img,0.00000005,4.0)

  #显示图像

  cv2.imshow(输入,img)

  cv2.imshow(Output ,输出)

  cv2.waitKey(0)

  2.cv2.destroyAllWindows()下图是伽玛变换后的效果。当图像的对比度较低且整体亮度值较高时(或由于相机曝光过度),伽马变换对图像增强有明显的效果。

  对应的幂律函数曲线如图所示。

  第一时间点击了解华为云鲜技术~

  原创作品来自华为云开发者联盟,

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

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