【python图像处理】图像灰度化处理、图像灰度线性变换、图像灰度非线性变换

  • 一、图像灰度化处理
    • 1、最大值灰度处理方法
    • 2、平均灰度处理方法
    • 3、加权平均灰度处理方法
  • 二、图像灰度线性变换
    • 1、图像灰度上移变换
    • 2、图像对比度增强变换
    • 3、图像对比度减弱变换
    • 4、图像灰度反色变换
  • 三、图像灰度非线性变换
    • 1、图像灰度非线性变换:
    • 2、对数变换
    • 3、伽玛变换

一、图像灰度化处理

1、最大值灰度处理方法

该方法的灰度值等于彩色图像R、G、B三个分量中的最大值
在这里插入图片描述

for i in range(height):
    for j in range(width):
        #获取图像R G B最大值
        gray = max(img[i,j][0], img[i,j][1], img[i,j][2])
        #灰度图像素赋值 gray=max(R,G,B)
        grayimg[i,j] = np.uint8(gray)

2、平均灰度处理方法

在这里插入图片描述

for i in range(height):
    for j in range(width):
        #灰度值为RGB三个分量的平均值
        gray = (int(img[i,j][0]) + int(img[i,j][1]) + int(img[i,j][2]))  /  3
        grayimg[i,j] = np.uint8(gray)

3、加权平均灰度处理方法

在这里插入图片描述

for i in range(height):
    for j in range(width):
        #灰度加权平均法
        gray = 0.30 * img[i,j][0] + 0.59 * img[i,j][1] + 0.11 * img[i,j][2]
        grayimg[i,j] = np.uint8(gray)

二、图像灰度线性变换

图像的灰度线性变换是通过建立灰度映射来调整原始图像的灰度,从而改善图像的质量,凸显图像的细节,提高图像的对比度。
在这里插入图片描述
该公式中DB表示灰度线性变换后的灰度值,DA表示变换前输入图像的灰度值,α和b为线性变换方程f(D)的参数,分别表示斜率和截距。

当α=1,b=0时,保持原始图像
当α=1,b!=0时,图像所有的灰度值上移或下移
当α=-1,b=255时,原始图像的灰度值反转
当α>1时,输出图像的对比度增强
当0<α<1时,输出图像的对比度减小
当α<0时,原始图像暗区域变亮,亮区域变暗,图像求补

1、图像灰度上移变换

for i in range(height):
    for j in range(width):
        
        if (int(grayImage[i,j]+50) > 255):
            gray = 255
        else:
            gray = int(grayImage[i,j]+50)
            
        result[i,j] = np.uint8(gray)

图像的所有灰度值上移50,图像变得更白了。注意,纯黑色对应的灰度值为0,纯白色对应的灰度值为255。

2、图像对比度增强变换

for i in range(height):
    for j in range(width):
        
        if (int(grayImage[i,j]*1.5) > 255):
            gray = 255
        else:
            gray = int(grayImage[i,j]*1.5)
            
        result[i,j] = np.uint8(gray)

图像的所有灰度值增强1.5倍。

3、图像对比度减弱变换

for i in range(height):
    for j in range(width):
        gray = int(grayImage[i,j]*0.8)
        result[i,j] = np.uint8(gray)

图像的所有灰度值减弱,图像变得更暗。

4、图像灰度反色变换

for i in range(height):
    for j in range(width):
        gray = 255 - grayImage[i,j]
        result[i,j] = np.uint8(gray)

图像处理前后的灰度值是互补的。

三、图像灰度非线性变换

1、图像灰度非线性变换:

DB=DA×DA/255

for i in range(height):
    for j in range(width):
        gray = int(grayImage[i,j])*int(grayImage[i,j]) / 255
        result[i,j] = np.uint8(gray)

2、对数变换

在这里插入图片描述
其中c为尺度比较常数,DA为原始图像灰度值,DB为变换后的目标灰度值。

def log(c, img):
    output = c * np.log(1.0 + img)
    output = np.uint8(output + 0.5)
    return output

对数变换对于整体对比度偏低并且灰度值偏低的图像增强效果较好。

3、伽玛变换

在这里插入图片描述
当γ>1时,会拉伸图像中灰度级较高的区域,压缩灰度级较低的部分。
当γ<1时,会拉伸图像中灰度级较低的区域,压缩灰度级较高的部分。
当γ=1时,该灰度变换是线性的,此时通过线性方式改变原图像。

你可能感兴趣的:(【python图像处理】图像灰度化处理、图像灰度线性变换、图像灰度非线性变换)