建网站的程序免费,河北 保定 网站建设,网站正在建设中的,园林设计公司网站图像增强的目的是为了改善图像的视觉效果#xff0c;为了更便于人或机器的分析和处理#xff0c;在不考虑图像降质#xff08;前提#xff09;的情况下#xff0c;提高图像的可观性。灰度变换是一种典型的图像增强方法#xff0c;我们通常把图像处理按照处理方法分成空域…图像增强的目的是为了改善图像的视觉效果为了更便于人或机器的分析和处理在不考虑图像降质前提的情况下提高图像的可观性。灰度变换是一种典型的图像增强方法我们通常把图像处理按照处理方法分成空域方法与频域方法两类灰度变换是一种对点处理的空域处理方法。
一、灰度变换
将一个灰度区间映射到另一个灰度区间的变换称为灰度变换g(x,y)T[f(x,y)]g(x,y) T[f(x,y)]g(x,y)T[f(x,y)]灰度区间是指0−2550-2550−255的灰度值区间000是黑色255255255是白色。灰色变换可使图像动态范围加大图像对比度扩展图像清晰特征明显。灰度变换可以分为线性变换和非线性变换。 1、线性变换 原始图像f(x,y)f(x,y)f(x,y)灰度范围[a,b][a,b][a,b]变换后的图像g(x,y)g(x,y)g(x,y)灰度范围[c,d][c,d][c,d]存在以下变换关系
g(x,y)d−cb−a[f(x,y)−a]cg(x,y) \frac{d-c}{b-a}[f(x,y)-a]cg(x,y)b−ad−c[f(x,y)−a]c 2、非线性变换 灰度变换的非线性变换方法包括对数变换和指数变换对数变换公式为g(x,y)aln[f(x,y)1]blncg(x,y) a\frac{\ln[f(x,y)1]}{b\ln c}g(x,y)ablncln[f(x,y)1]这个变换扩展低灰度区的对比度压缩高灰度值。指数变换公式为g(x,y)bc[f(x,y)−a]−1g(x,y)b^{c[f(x,y)-a]}-1g(x,y)bc[f(x,y)−a]−1与对数变换相反 指数变换对图像的高灰度区有较大的扩展。 线性灰度变换实例如下
import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylabdef grayTransformLine(img,c,d):#线性灰度变换img img/255.0 #转换为0-1Min img.min()Max img.max()return (d-c)/(Max-Min)*(img-Min)cdef main():img cv2.imread(Lena.jpg,0)new_img grayTransformLine(img,0.5,1)#变换到0.5-1整体变亮new_img2 grayTransformLine(img,0,0.5)#变换到0-0.5整体变灰暗cv2.imshow(bright,new_img) cv2.imshow(dark,new_img2)cv2.waitKey(0)if __name__ __main__:main()输出结果如下 3、灰度直方图 图像中像素灰度分布的概率密度函数设图像尺寸为M×NM×NM×N共有KKK级灰度并且具有灰度级rkr_krk的像素数为g(rk)g(r_k)g(rk)则有p(rk)g(rk)M×Np(r_k)\frac{g(r_k)}{M×N}p(rk)M×Ng(rk)下面我们来计算图像的灰度直方图。
import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylabimg cv2.imread(Lena.jpg,0)
#images输入图像channels图像的通道mask掩膜图像若计算整幅图则为nonehistSize灰度级的个数
#ranges像素值的范围
hist_cv cv2.calcHist(images[img],channels[0],maskNone,histSize[256],ranges[0,255])
plt.plot(hist_cv)
pylab.show()上述两幅图的灰度直方图如下所示 明显看出第一幅图的灰度分布集中在高值部分因此整幅图高亮第二幅图的灰度分布集中在低值部分整幅图呈灰暗。
4、直方图均衡化 将原始图像的直方图变换为均匀分布的形式从而增加像素灰度值的动态范围达到增强图像整体对比度的效果。直方图均衡是一种非线性变换以牺牲图像的等级为代价。 实现代码如下
import cv2
import matplotlib.pyplot as plt
import pylabimg cv2.imread(Lena.jpg,0)
res cv2.equalizeHist(img) #均衡化
plt.subplot(121),plt.imshow(img,gray)
plt.subplot(122),plt.imshow(res,gray)
pylab.show()均衡化的结果如下 我们可以看到均衡化后的图像灰度分布更加均匀图像对比度明显增强。 上述的均衡化方法是全局上的均衡有些时候这种操作并不好会把某些不该调整的部分给调整。Opencv提供另一种局部调整的均衡化把整个图像分成许多小块每个小块内部进行均衡化这种方法叫做对比度受限的自适应直方图均衡化对于图像直方图存在多峰的图像比较适用实现代码如下
import cv2
import matplotlib.pyplot as plt
import pylabimg cv2.imread(Lena.jpg,0)
#全局直方图均衡化
res cv2.equalizeHist(img)
#自适应直方图均衡化
clahe cv2.createCLAHE(clipLimit2,tileGridSize(10,10))#
cl1 clahe.apply(img)
plt.subplot(121),plt.imshow(res,gray)
plt.subplot(122),plt.imshow(cl1,gray)
pylab.show()两种均衡化的结果如下 我们可以看出相对于全局均衡化的结果局部均衡化的效果更加自然一些。
二、同态增晰
我们之前讲到过傅里叶变换经过傅里叶变换可以得到一幅图像的频域信息我们可以对图像的频域进行操作达到滤波的目的。频域中的低频成分反映灰度的恒定分量减弱低频成分可以起到缩小图像灰度范围的作用频域中的高频成分反映图像的边界特性增强高频成分可以提升图像的对比度暗区细节增强并保留亮区细节。 同态增晰是一种在频域中进行滤波操作的方法目的是消除图像上照明不均的问题增加暗区的图像细节同时又不损失亮区的图像细节它在频域中同时将图像亮度范围进行压缩和图像对比度进行增强。 同态滤波函数选用高通滤波器消弱低频成分加强高频成分。 同态增晰的过程如下 未完待续