将原始图像转换到HSI颜色空间

# -*- coding: utf-8 -*-
# @FileName: 将原始图像转换到HSI颜色空间
# @Software: PyCharm
# @Author  : changli Xu
# @Time    :2020//11//21

import numpy as np
import cv2
import math


def rgb2hsi(rgb_img):
    """
        将图片从RGB色彩空间转为HSI色彩空间
        Args:
            rgb_img: 采用RGB色彩空间的图片
        Returns:
            转化为HSI色彩空间的图片.
    """
    rows = int(rgb_img.shape[0])
    cols = int(rgb_img.shape[1])
    B, G, R = cv2.split(rgb_img)
    # 将图片的RGB分量分别归一化到[0,1]的范围
    B = B / 255
    G = G / 255
    R = R / 255
    hsi_img = rgb_img.copy()
    H, S, I = cv2.split(hsi_img)
    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:
                H = 0
            elif B[i, j] <= G[i, j]:
                theta = float(np.arccos(num / den))
                H = theta
            else:
                theta = float(np.arccos(num / den))
                H = 2 * math.pi - 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 * math.pi)
            I = sum / 3
            # 输出HSI图像,扩充到[0, 255]范围方便显示,一般H分量在[0, 2*pi]之间,S和I在[0, 1]之间
            hsi_img[i, j, 0] = H * 255
            hsi_img[i, j, 1] = S * 255
            hsi_img[i, j, 2] = I * 255
    return hsi_img


if __name__ == '__main__':
    img = cv2.imread(r'C:\Users\Administrator\Desktop\image\datasetHcenter\1.jpg')
    hsi_img = rgb2hsi(img)
    cv2.imshow('HSI', hsi_img)
    cv2.waitKey(0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值