一、图像的灰度变换
图像的灰度变换就是按照一定的变换关系,逐点改变原图像中每一个像素灰度值的方法。是图像增强技术处理技术中一个非常基础、直接的空间域图像处理的方法。目的就是改善画质。灰度变换有线性变换
、非线性变换
、分段线性变换
线性变换
变换公式如下
g
(
x
,
y
)
=
T
[
f
(
x
,
y
)
]
=
a
∗
f
(
x
,
y
)
+
b
g(x,y)=T[f(x,y)]=a*f(x,y)+b
g(x,y)=T[f(x,y)]=a∗f(x,y)+b
效果如下
- 如果a>1,输出图像的对比度会增大
- 如果a<1,输出的图像的对比度会减小
- 如果a=1,b!=0,会使所有像素的灰度值上移或者下移,即使得整个图像变暗
- 如果a=1,b=0,则图像不变
- 如果a取负值,则暗区域将变暗,亮区域将变亮
例子如下:
经过线性变换后图像如下
反转变换
反转变换的公式非常简单,就是把像素反转一下,可以把感兴趣的目标突出出来,公式如下
f
(
x
,
y
)
=
255
−
g
(
x
,
y
)
f(x,y)=255-g(x,y)
f(x,y)=255−g(x,y)
非线性变换
变换的基本公式如下
g
=
c
l
o
g
(
1
+
f
)
g=clog(1+f)
g=clog(1+f)
这种变换可以对原图像的动态范围进行压缩。对数变换可以把比较亮的变暗,比较暗的变量。降低对比度
总之,上述变换,都可以将直方图进行均衡化。也就是让亮度分布更加均匀
代码实现
因为是要对图像进行点运算,所以代码实现非常简单
def GrayTransform(self,function):
for y in range(0,len(self.Img)):
for x in range(0,len(self.Img[y])):
c=self.Img[y][x][0]
newc=function(c)
if newc<0:
self.Img[y][x][:]=0
elif newc>255:
self.Img[y][x][:] = 255
else:
self.Img[y][x][:]=newc
funtion是预留的一个接口,我们可以随意定制变换公式