图像处理(一)图像灰度化的三种方式

图像处理的第一步操作基本都是进行灰度化,二灰度化的方式都很多种,可以根据自己的具体需要进行参数调整,基本分为四大种,分别为 YUV亮度灰度化最大值灰度化平均值灰度化Gamma校正灰度化
1.Gamma校正灰度化
原理如下计算公式:
G r a y = R 2.2 + ( 1.5 G ) 2.2 + ( 0.6 B ) 2.2 1 + 1. 5 2.2 + 0. 6 2.2 2.2 Gray=\sqrt[2.2]{\frac{R^{2.2}+(1.5G)^{2.2}+(0.6B)^{2.2}}{1+1.5^{2.2}+0.6^{2.2}}}G r a y =2 .2 1 +1 .5 2 .2 +0 .6 2 .2 R 2 .2 +(1 .5 G )2 .2 +(0 .6 B )2 .2 ​​
注意这里的2.2次方和2.2次方根,RGB颜色值不能简单直接相加,而是必须用2.2次方换算成物理光功率。因为RGB值与功率并非简单的线性关系,而是幂函数关系,这个函数的指数称为Gamma值,一般为2.2,而这个换算过程,称为Gamma校正。

import cv2
import numpy as np
import math
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

def Gamma_GRAY(picture_path):

    img = cv2.imread(picture_path)

    h, w = img.shape[0:2]

    gray = np.zeros((h, w), dtype=img.dtype)

    for i in range(h):
        for j in range(w):
            a = img[i, j, 2] ** (2.2) + 1.5 * img[i, j, 1] ** (2.2) + 0.6 * img[i, j, 0] ** (2.2)
            b = 1 + 1.5 ** (2.2) + 0.6 ** (2.2)
            gray[i, j] = pow(a / b, 1.0 / 2.2)
    gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
    plt.imshow(gray)
    plt.title('Gamma校正灰度化')
    plt.axis('off')
    plt.show()

2.平均值灰度化
原理: 对B、G、R三通道像素求取平均值作为灰度值,公式为:
g r a y = ( B + G + R ) / 3 gray=(B+G+R)/3 g r a y =(B +G +R )/3

def Avrage_GRAY(picture_path):

    img = cv2.imread(picture_path)

    h, w = img.shape[0:2]

    gray = np.zeros((h, w), dtype=img.dtype)

    for i in range(h):
        for j in range(w):
            gray[i, j] = (int(img[i, j, 0]) + int(img[i, j, 1]) + int(img[i, j, 2])) / 3
    gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
    plt.imshow(gray)
    plt.title('平均值灰度化')
    plt.axis('off')
    plt.show()

3.最大值灰度化
原理:以B、G、R通道中最大的像素作为整体像素,公式为:
B = G = R = m a x ( [ B , G , R ] ) B=G=R=max([B,G,R])B =G =R =m a x ([B ,G ,R ])

def Max_GRAY(picture_path):

    img = cv2.imread(picture_path)

    h, w = img.shape[0:2]

    gray = np.zeros((h, w), dtype=img.dtype)

    for i in range(h):
        for j in range(w):
            gray[i, j] = max(img[i, j, 0], img[i, j, 1], img[i, j, 2])
    gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
    plt.imshow(gray)
    plt.title('最大值灰度')
    plt.axis('off')
    plt.show()

4.YUV亮度灰度化
原理:根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应,以这个亮度值表达图像的灰度值。公式为:
Y = 0.3 R + 0.59 G + 0.11 B Y=0.3R+0.59G+0.11B Y =0 .3 R +0 .5 9 G +0 .1 1 B

def Cv2_GRAY(picture_path):

    img=cv2.imread(picture_path)
    gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    print(gray.shape)
    img= cv2.cvtColor(gray,cv2.COLOR_BGR2RGB)
    plt.imshow(img)
    plt.title('灰度处理')
    plt.axis('off')
    plt.show()
    return gray

Original: https://blog.csdn.net/pika1223/article/details/123132109
Author: pika1223
Title: 图像处理(一)图像灰度化的三种方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/637439/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球