图像增强能够有目的地强调图像地整体或是局部特征,将不清晰地图像变得更为清晰,或是强调某些感兴趣的特征,使其改善图像质量,加强图像判别和识别的效果。
现有的图像增强的方法非常多,今天我们主要介绍空间域中的灰度变换方法,并用Python将其一一实现。灰度变换也被称为图像的点运算(只针对图像的某一像素点),是所有图像处理技术中最简单的技术。
我们首先对所有原始图像都进行如下的读取,转换为灰度图像,并且读取图像的长宽。
代码语言:javascript复制image=Image.open(img_path)
image=image.convert('L')
x=image.size[0]
y=image.size[1]
Image negatives
图像像素反转变化,用互补灰度代替原灰度。若是8位的灰度图,则原来像素值为0的转为255,如下面公式所示。
s=255−r
此操作能够有效地增强黑色区域中的一些白色或是灰色细节,比如下图,
在此图中,我们可能重点关注的是这些黑色中的白色部分,因而采用反转变换。
我们根据定义,逐像素进行反转操作。
代码语言:javascript复制for i in range(x):
for j in range(y):
pixel=image.getpixel((i,j))
image.putpixel((i,j),255-pixel)
Brightness normalization
做一个简单的归一化,K是尺度因子,增强对比度,使黑的更黑,亮的更亮,公式如下,
s=K∗((r−rmin)/(rmax−rmin))
先计算出像素点的最大值和最小值,再按公式进行归一化,进而把像素值进行更新。
代码语言:javascript复制table=[]
for i in range(256):
table.append(200*(i-pixel_min)/(pixel_max-pixel_min))
image=image.point(table,'L')
Power-law transformation
指数变换可以做到扩展或者压缩灰度的作用。指数小于1时,作用与对数变换相似,将低亮度区域拉伸,变得更亮。
代码语言:javascript复制table=[]
for i in range(256):
table.append(100*i**0.5)
image=image.point(table,'L')
Log transformation
对数变换将低亮度区拉伸,将其余部分进行压缩,使得整体亮度增加,公式如下,
s=K∗log(1 r)
比如下图原图,其黑色部分其实有一些‘隐藏’的亮度,使用对数变换使其更加明显。
代码语言:javascript复制table=[]
for i in range(256):
table.append(40*math.log1p(i))
image=image.point(table,'L')
代码语言:javascript复制——END——
推荐阅读
我用Python写了一个论文降重工具
十分钟掌握数据可视化基本操作(上)
十分钟掌握数据可视化基本操作(下)