HSI、pythonの達成にRGB
RGBの最も基本的な機能のための画像が、何回もRGB色空間は、通常、色の類似の人々の主観的な判断を満たしていない、クラスタのクラスタリングなどの良好なピクチャ単位ではありません。
HSI色空間は、色を記述するために、人間の視覚システム、色合い(色相)、彩度(飽和、又は彩度による)及び輝度(または輝度強度)からのものです。HSI色空間は円錐形のモデル空間で記述することができます。このモデルは、コーン、むしろHIS色空間を複雑にし、彼らは色相ができ、明るさ、色の変化の状況が明確に飽和示されていることにより、記述されています。通常タイプと色深度の程度を示すために、色の色相と彩度として知られています。輝度に対する人間の視覚感度は、色合いの感度よりもはるかに強い色処理および識別を容易にするために、人間の視覚系がしばしば使用HSI色空間であるので、RGB色空間よりも人間の視覚特性とより一致しています。画像処理とコンピュータビジョンアルゴリズムでは、便利HSI色空間で多くを使用することができ、それらを別々に処理し、相互に独立していることができます。従って、HSI色空間において大幅ワークロード分析および画像処理を簡略化することができます。HSI色空間やRGB色空間と同じ量だけ異なる表現、従ってそれらの間の変換関係が存在します。
import cv2
import numpy as np
import scipy.misc
import os
def rgbtohsi(rgb_lwpImg):
rows = int(rgb_lwpImg.shape[0])
cols = int(rgb_lwpImg.shape[1])
b, g, r = cv2.split(rgb_lwpImg)
# 归一化到[0,1]
b = b / 255.0
g = g / 255.0
r = r / 255.0
hsi_lwpImg = rgb_lwpImg.copy()
H, S, I = cv2.split(hsi_lwpImg)
for i in range(rows):
for j in range(cols):
num = 0.5 * ((r[i, j] - g[i, j]) + (r[i, j] - b[i, j]))
den = np.sqrt((r[i, j] - g[i, j]) ** 2 + (r[i, j] - b[i, j]) * (g[i, j] - b[i, j]))
if den != 0:
theta = float(np.arccos(num / den))
if den == 0:
H = 0
elif b[i, j] <= g[i, j]:
H = theta
else:
H = 2 * 3.14169265 - theta
min_RGB = min(min(b[i, j], g[i, j]), r[i, j])
sum = b[i, j] + g[i, j] + r[i, j]
if sum == 0:
S = 0
else:
S = 1 - 3 * min_RGB / sum
H = H / (2 * 3.14159265)
I = sum / 3.0
# 输出HSI图像,扩充到255以方便显示,一般H分量在[0,2pi]之间,S和I在[0,1]之间
hsi_lwpImg[i, j, 0] = H * 255
hsi_lwpImg[i, j, 1] = S * 255
hsi_lwpImg[i, j, 2] = I * 255
return hsi_lwpImg
if __name__ == '__main__':
imgDir = "./"
imgFoldName = "RGBtoHSI"
imgs = os.listdir(imgDir + imgFoldName)
imgNum = len(imgs) # 图像的个数
for i in range(imgNum): # 遍历每张图片
# img = Image.open(imgDir + imgFoldName + "/" + imgs[i])
rgb_lwpImg = cv2.imread(imgDir + imgFoldName + "/" + imgs[i])
hsi_Img = rgbtohsi(rgb_lwpImg)
scipy.misc.imsave('hsi_Img'+str(i)+'.jpg', hsi_Img)
# 显示RGB图像及转换的HSI图像
# rgb_lwpImg = cv2.imread("v2_0140.jpg")
# hsi_Img = rgbtohsi(rgb_lwpImg)
# cv2.imshow('rgb_lwpImg', rgb_lwpImg)
# cv2.imshow('hsi_lwpImg', hsi_lwpImg)
# key = cv2.waitKey(0) & 0xFF
# if key == ord('q'):
# cv2.destroyAllWindows()
HSIの比較にRGB: