图像增强:灰度变换(Python实现)

2020-05-16 13:32:29 浏览数 (1)

图像增强能够有目的地强调图像地整体或是局部特征,将不清晰地图像变得更为清晰,或是强调某些感兴趣的特征,使其改善图像质量,加强图像判别和识别的效果。

现有的图像增强的方法非常多,今天我们主要介绍空间域中的灰度变换方法,并用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∗((rrmin)/(rmaxrmin))

先计算出像素点的最大值和最小值,再按公式进行归一化,进而把像素值进行更新。

代码语言: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=Klog(1 r)

比如下图原图,其黑色部分其实有一些‘隐藏’的亮度,使用对数变换使其更加明显。

代码语言:javascript复制
table=[]
for i in range(256):
    table.append(40*math.log1p(i))
image=image.point(table,'L')
代码语言:javascript复制
——END——

推荐阅读

我用Python写了一个论文降重工具

十分钟掌握数据可视化基本操作(上)

十分钟掌握数据可视化基本操作(下)

0 人点赞