学习资源《机器学习实践指南 案例应用解析》
概念
灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。
采用灰度变换法对图像进行处理可以大大改善图像的视觉效果。灰度变换法可以分为线性变换和非线性变换。
对数变换
对数变换对图像的低亮度区有较大的扩展而对高亮度区进行压缩,简方之就是增强了低值灰度的图像细节,灰度非线性变换公式:
d s t = C l o g ( 1 + s r c ) dst=Clog(1+src) dst=Clog(1+src)
示例程序
# -*- coding: utf-8 -*-
import cv2
import 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 cv2
import 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 = 0
Ds_internal = 80 # 中间
Ds_max=255
# 目标
Dd_min = 0
Dd_internal = 160 #中间
Dd_max=255
for 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
=
b
c
(
x
−
a
)
−
1
y=b^{c(x-a)}-1
y=bc(x−a)−1
其中,参数 $b 、c $ 控制曲线的变换开关,参数 a a a控制曲线的位置。
程序示例
# -*- coding: utf-8 -*-
import cv2
import numpy as np
fn = "test.jpg"
myimg = cv2.imread(fn)
img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY)
b=1.2
c=0.2
a=0.2
newimg=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 cv2
import 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()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtAUDFAd-1574725709440)(https://img-blog.csdn.net/20171018082622030?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVuZGg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]