彩色图像的颜色空间

  RGB颜色空间

  RGB颜色空间基于三维直角坐标系,包括R,G,B三个原始光谱分量,分别描述红色,绿色,蓝色的亮度值。

  为方便描述,我们将3个分量都进行归一化处理,三元组每个数值表示红,绿,蓝三者的比例。(0,0,0)代表黑色,(1,1,1)代表白色,(1,0,0)代表红色,以此类推。

彩色图像的颜色空间_第1张图片

  RGB图像由3个图像分量组成,分别是R通道图像,G通道图像,B通道图像。

from skimage import io
from matplotlib import pyplot as plt

img = io.imread('girl.jpg')  # 载入图像
fig = plt.figure()
# 显示RGB图像
plt.figure()
plt.axis('off')  # 不显示坐标轴
plt.imshow(img)
# R通道图像
imgR = img[:, :, 0]
plt.figure()
plt.axis('off')
plt.imshow(imgR,cmap='gray')
# G通道
imgG = img[:, :, 1]
plt.figure()
plt.axis('off')
plt.imshow(imgG,cmap='gray')
# B通道
imgB = img[:, :, 2]
plt.figure()
plt.axis('off')
plt.imshow(imgB,cmap='gray')
plt.show()

彩色原图:

彩色图像的颜色空间_第2张图片

 R,G,B不同分量显示结果:

彩色图像的颜色空间_第3张图片

 彩色图像的颜色空间_第4张图片

 彩色图像的颜色空间_第5张图片

 HSI颜色空间

HSI〔Hue-Saturation-Intensity(Lightness),HSI或HSL〕颜色模型用H、S、I三参数描述颜色特性,其中H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度。

彩色图像的颜色空间_第6张图片

   色调H由角度表示,反映该颜色最接近哪个光谱波长。在色环中,0度表示红色光谱,120度表示绿色光谱,240度表示蓝色光谱。饱和度由色环的圆心到颜色点的半径决定,距离越长饱和度越高。亮度I由颜色点到圆柱底部的距离表示,底部圆心表示黑色,顶部圆心表示白色。

RGB颜色空间与HSI颜色空间的转换

  给定一幅RGB颜色空间格式图像,图像R,G,B分量分别进行归一化处理。在RGB颜色空间上,位于空间位置(x,y)的像素点的颜色用该像素点的R(x,y),G(x,y),B(x,y)三个数值表示。在HSI颜色空间中,位于空间位置(x,y)像素点的H(x,y),S(x,y),I(x,y):

H(x,y)=\Theta (x,y) G(x,y)\geq B(x,y)

        2\pi -\Theta (x,y) G(x,y)<B(x,y)

S(x,y)=1-\frac{3}{R(x,y)+G(x,y)+B(x,y)}\left [ min(R(x,y),G(x,y),B(x,y)) \right ]

I(x,y)=\frac{1}{3}[min(R(x,y)+G(x,y)+B(x,y))]

\Theta (x,y)=arccos\left \{ \frac{\frac{1}{2}[(R(x,y)-G(x,y))+(R(x,y)-B(x,y))]}{ [(R(x,y)-G(x,y)^{2})+(R(x,y)-B(x,y))(G(x,y)-B(x,y))]^{\frac{1}{2}}} \right \}

from skimage import data
from matplotlib import pyplot as plt
import math
import numpy as np
import sys


# 定义RGB图像转换为HSI图像的函数
def rgb2hsi(r, g, b):
    r = r / 255
    g = g / 255
    b = b / 255
    num = 0.5 * ((r - g) + (r - b))
    den = ((r - g) * (r - g) + (r - b) * (g - b)) ** 0.5
    if b <= g:
        if den == 0:
            den = sys.float_info.min
        h = math.acos(num / den)
    elif b > g:
        if den == 0:
            den = sys.float_info.min
        h = (2 * math.pi) - math.acos(num / den)
    s = 1 - (3 * min(r, g, b) / (r + g + b))
    i = (r + g + b) / 3
    return int(h), int(s * 100), int(i * 255)


image = data.coffee()
hsi_image = np.zeros(image.shape, dtype='uint8')
for ii in range(image.shape[0]):
    for jj in range(image.shape[1]):
        r, g, b = image[ii, jj, :]
        h, s, i = rgb2hsi(r, g, b)
        hsi_image[ii, jj, :] = (h, s, i)
# 显示RGB原图像
plt.subplot(231)
plt.imshow(image)
plt.axis('off')
plt.title('RGB')
# 显示RGB原图像R分量
plt.subplot(232)
plt.imshow(image[:, :, 0], cmap='gray')
plt.axis('off')
plt.title('RGB-R')
# 显示HSI图像H分量
plt.subplot(233)
plt.imshow(hsi_image[:, :, 0], cmap='gray')
plt.axis('off')
plt.title('HSI-H')

# 显示HSI图像S分量
plt.subplot(234)
plt.imshow(hsi_image[:, :, 1], cmap='gray')
plt.axis('off')
plt.title('HSI-S')
# 显示HSI图像I分量
plt.subplot(235)
plt.imshow(hsi_image[:, :, 2], cmap='gray')
plt.axis('off')
plt.title('HSI-I')

plt.show()

彩色图像的颜色空间_第7张图片

HSI颜色空间转RGB颜色空间 

彩色图像的颜色空间_第8张图片

彩色图像的颜色空间_第9张图片 

 

你可能感兴趣的:(图像处理,人工智能)