基于openCV-python:HSI颜色空间与H-S直方图比较

这篇博客介绍了HSI颜色空间的优势,并通过opencv-python展示了如何绘制RGB和H-S直方图。作者探讨了直方图的概念、均衡化及其在图像比较中的作用,提供了一种在HSI空间中分析图像颜色特征的简便方法。此外,还分享了使用numpy绘制2D直方图的技巧和显示直方图的不同方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

RGB/HSI颜色空间解读

直方图概念

基于opencv-python绘制RGB直方图

绘制opencv-python绘制H-S直方图

直方图比较方法

python中其他绘制2D直方图方法

显示直方图

参考资料:


RGB/HSI颜色空间解读

一般用的都是RGB图像。但是由于HSI颜色空间更符合人体感知,因此很多工作都需要先将RGB转为HSI。在冈萨瓦斯的《数字图像处理》中是这样支持使用HSI空间的:

也就是说,由于H,S对于光强的鲁棒性,它们是我们重点关注的两个量。在易受光强变化影响的场景下,使用HSI空间是比较可靠的。具体的转换公式:

小写是表示归一化的状态。即未拉伸扩充。(常用的是把归一化的h,s,i值做扩充便于理解。见下面程序。)

由于opencv中没有自带转HSI的函数(有转HSV空间的,但是和HSI还有有些差别)。故自行用python实现颜色空间转换:

import numpy as np
import math

def rgb2hsi(img_rgb):
    rows = int(img_rgb.shape[0])
    cols = int(img_rgb.shape[1])
    B, G, R = cv2.split(img_rgb)
    # 归一化到[0,1]
    B = B / 255.0
    G = G / 255.0
    R = R / 255.0
    img_hsi = img_rgb.copy()
    H, S, I = cv2.split(img_hsi)
    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]))
            theta = float(np.arccos(num / den))
 
            if den == 0:
                H = 0
            elif B[i, j] <= G[i, j]:
                H = theta
            else:
                H = 2 * np.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 * np.pi)
            I = sum / 3.0
            
            
            # 为了便于理解,常常对结果做扩充,即 [0°,360°],[0,100],[0,255]
#            img_hsi[i, j, 0] = H * 360
#            img_hsi[i, j, 1] = S * 100
#            img_hsi[i, j, 2] = I * 255
            
            # 或者为了便于计算直方图,都扩充为0~
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值