图像基础13 灰度变换与图像增强

来源:互联网 发布:树莓派ubuntu系统截图 编辑:程序博客网 时间:2024/06/05 18:29

学习资源《机器学习实践指南 案例应用解析》

概念

灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。
采用灰度变换法对图像进行处理可以大大改善图像的视觉效果。灰度变换法可以分为线性变换和非线性变换。


对数变换

对数变换对图像的低亮度区有较大的扩展而对高亮度区进行压缩,简方之就是增强了低值灰度的图像细节,灰度非线性变换公式:

dst=Clog(1+src)

示例程序

# -*- coding: utf-8 -*-import cv2import numpy as np fn = "test.jpg"myimg = cv2.imread(fn)img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)jp_img = np.array(40*np.log(img+1),np.uint8)cv2.imshow('src',img)cv2.imshow('dst',jp_img)cv2.waitKey()cv2.destroyAllWindows()

这里写图片描述


分段线性变换

分段线性变换将图像的值域分成多个值域并进行不同的线性变换计算,可以压缩某部分灰度区,扩展另一部分灰度区间。
程序示例

# -*- coding: utf-8 -*-import cv2import numpy as np fn = "test.jpg"myimg = cv2.imread(fn)img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)w=img.shape[1]h=img.shape[0]newimg = np.zeros((h,w),np.uint8)# 源Ds_min = 0Ds_internal = 80 # 中间Ds_max=255# 目标Dd_min = 0Dd_internal = 160 #中间Dd_max=255for m in range(h):    for n in range(w):        if img[m,n]>Ds_min and img[m,n]<=Ds_internal:            newimg[m,n]=int((Dd_internal-Dd_min)/(Ds_internal-Ds_min)*(img[m,n]-Ds_min)+Dd_min)        else:            newimg[m,n]=int((Dd_max-Dd_internal)/(Ds_max-Ds_internal)*(img[m,n]-Ds_internal)+Dd_internal)    print (".")cv2.imshow('src',img)cv2.imshow('dst',newimg)cv2.waitKey()cv2.destroyAllWindows()

这里写图片描述


指数变换

指数变换的作用是扩展图像的高灰度级、压缩低灰度级,可用于亮度过高的图像。指数变换的基本表达式:

y=bc(xa)1

其中,参数 bc 控制曲线的变换开关,参数a控制曲线的位置。

程序示例

# -*- coding: utf-8 -*-import cv2import numpy as np fn = "test.jpg"myimg = cv2.imread(fn)img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)b=1.2c=0.2a=0.2newimg=np.array(np.power(b,c*(img-a))-1,np.uint8)cv2.imshow('src',img)cv2.imshow('dst',newimg)cv2.waitKey()cv2.destroyAllWindows()

这里写图片描述


直方图均衡化

通用用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布,这样就可以用于增强局部的对比度而不影响整体的对比度。
OpenCV的equalizeHist函数实现直方图均衡化:

cv2.equalizeHist(src[, dst]) -> dst

示例程序

# -*- coding: utf-8 -*-import cv2import numpy as np fn = "test.jpg"myimg = cv2.imread(fn)img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)newimg=cv2.equalizeHist(img)cv2.imshow('src',img)cv2.imshow('dst',newimg)cv2.waitKey()cv2.destroyAllWindows()

这里写图片描述

这里写图片描述

原创粉丝点击