谁能给一个RGB到HSI的转换公式?

newline 2002-08-01 09:49:29
若有HSI到RGB的也请给出来,我有些疑问。
...全文
2566 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cplusc 2002-08-14
  • 打赏
  • 举报
回复
up
newline 2002-08-03
  • 打赏
  • 举报
回复
谢谢,every one.

其实我看了几个RGB->HSI的资料,
公式都不一样,也不知道哪个对。

电子工业的《Digital Image Processing》
上的 I = (R+G+B)/sqrt(3),
而上面的清华的链接里,和我看的另一篇论文里都是 I = (R+G+B)/3.

我以为应该是 /sqrt(3) 对,因为把立方体立起来了,以对角线作I,
应该把平均值乘以sqrt(3)吧?
eastsun 2002-08-03
  • 打赏
  • 举报
回复

I = ( R + G + B ) /k, 这个k 是多少并不重要,因为灰度是要归一到不同的量级上去,有的用256级别,也有人用100级别,还有很多级别,这个不是关键。关键看你的应用需要灰度分成多少个等级。
nickshen 2002-08-01
  • 打赏
  • 举报
回复
I = (R+G+B)/3
H = W B<=G
H = 2*pi - W B>G
W = arccos( (2*R-G-B) / ( 2*sqrt((R-G)*(R-G) + (R-B)*(G-B)) )
pi = 3.1415926535
S = 1 - (3*min(R,G,B)) / (R+G+B)

有一本李在铭的数字图象处理,你可以看看!
nickshen 2002-08-01
  • 打赏
  • 举报
回复
hsv和hsi是同一种颜色空间的不同表达。不过这两种模式差别不是很大,只是色彩模型少许不同而已。
eastsun 2002-08-01
  • 打赏
  • 举报
回复
void _colour_struct::ChangedColourFromRGBStandardtoHSL( )
{
#ifdef _DEBUG
//ASSERT( _colour_administer::GetGlobalColourStructStandard( ) == HSL_COLOUR_STANDARD );
#endif
short R_value_in_rgb = this -> m_redColourValue;
short G_value_in_rgb = this -> m_greenColourValue;
short B_value_in_rgb = this -> m_blueColourValue;

float R = ((float)R_value_in_rgb) / 255;
float G = ((float)G_value_in_rgb) / 255;
float B = ((float)B_value_in_rgb) / 255;

if( R_value_in_rgb == G_value_in_rgb && G_value_in_rgb == B_value_in_rgb )
{
int nHValue = 0;
int nSValue = 0;
int nLValue = ((float)R_value_in_rgb )/ 255 * 100;

this -> m_redColourValue = nHValue;
this -> m_greenColourValue = nSValue;
this -> m_blueColourValue = nLValue;
return;
}
float max_value_of_rgb = GetMax( R, G, B );

float min_value_of_rgb = GetMin( R, G, B );

float fSumRGB = R + G + B;
if( fSumRGB <= 0.0 )
fSumRGB = 0.001;

float I = ( R + G + B ) / 3;
float S = 1.0 - 3.0 * min_value_of_rgb / fSumRGB;
float H = acos( (( R - G ) + ( R - B ))/2 / sqrt( ( R - G )*( R - G ) + ( R -B ) * ( G - B) + 0.0001 ) );

float fHAngle = H / PIE_VALUE * 180;
//int nHAngle = fHAngle;
if( G < B )
fHAngle = 360 - fHAngle;
if( fHAngle > 360.0 )
fHAngle = 360.0;
int nHValue = fHAngle / 360 * 255;
int nSValue = S * 100;
int nLValue = I * 100;

this -> m_redColourValue = nHValue;
this -> m_greenColourValue = nSValue;
this -> m_blueColourValue = nLValue;
}

void _colour_struct::ChangedColourFromHSLStandardtoRGB( )
{
int nHValue = this -> m_redColourValue;
int nSValue = this -> m_greenColourValue;
int nLValue = this -> m_blueColourValue;

float fHAngle = ((float)nHValue ) / 255 * 360;

float H = fHAngle / 180 * PIE_VALUE;
float S = ((float)nSValue ) / 100;
float I = ((float)nLValue ) / 100;

BOOL bLocalEndFlag = FALSE;
_double_value_range h_range_0_to_120( 0, 120 );
_double_value_range h_range_120_to_240( 120, 240 );
_double_value_range h_range_240_to_360( 240, 360 );

float R = -1;
float G = -1;
float B = -1;
if( bLocalEndFlag == FALSE && h_range_0_to_120.IsInRange( fHAngle ) )
{
B = I * ( 1.0 - S );
R = I * ( 1.0 + ( S * cos( H ) / cos( 60.0 / 180 * PIE_VALUE - H ) ) );
G = 3.0 * I - ( B + R );
bLocalEndFlag = TRUE;
}
if( bLocalEndFlag == FALSE && h_range_120_to_240.IsInRange( fHAngle ) )
{
R = I * ( 1.0 - S );
G = I * ( 1.0 + S * cos( H - 120.0 / 180 * PIE_VALUE ) / cos( 180.0 / 180 * PIE_VALUE - H ) );
B = 3.0 * I - ( R + G );
bLocalEndFlag = TRUE;
}
if( bLocalEndFlag == FALSE && h_range_240_to_360.IsInRange( fHAngle ) )
{
G = I * ( 1.0 - S );
B = I * ( 1.0 + S * cos( H - 240.0 / 180 * PIE_VALUE ) / cos( 300.0 / 180 * PIE_VALUE - H ) );
R = 3.0 * I - ( G + B );
bLocalEndFlag = TRUE;
}
int R_value_in_rgb = R * 255;
int G_value_in_rgb = G * 255;
int B_value_in_rgb = B * 255;
this -> m_redColourValue = R_value_in_rgb;
this -> m_greenColourValue= G_value_in_rgb;
this -> m_blueColourValue = B_value_in_rgb;
}

xqr 2002-08-01
  • 打赏
  • 举报
回复
to newline (新视线) :

是否应HSV(Hue,Saturation,Value)而非HSI。
如果确是指HSV,请参阅清华大学出版社的《计算机图形学》(孙家广等编著)的 490-495页,上面有RGB-HSV,HSV-RGB等转换的方法和源程序。
michael_bo 2002-08-01
  • 打赏
  • 举报
回复
http://media.cs.tsinghua.edu.cn/teacher/ahz_homepage/digitalimageprocess/chapter18/chapt18_ahz.htm
完整的表达式见上面网址,RGB-HSI HSI-RGB都有,包括其它一些转换
数字图像处理方面的经典教材,中文译本 阮秋琦,阮宇智等译 本书是把图像处理基础理论论述与软件实践方法相结合的第一本书,它集成了冈萨雷斯和伍兹所著的《数字图像处理》一书中的重要内容和MathWorks公司的图像处理工具箱。本书的特色在于它重点强调了怎样通过开发新代码来增强这些软件工具。本书在介绍MATLAB编程基础知识之后,讲述了图像处理的主要内容,具体包括亮度变换、线性和非线性空间滤波、频率域滤波、图像复原与配准、彩色图像处理、小波、图像数据压缩、形态学图像处理、图像分割、区域和边界表示与描述以及对象识别等。 本书概念清晰,层次分明,可供从事信号与信息处理、计算机科学与技术、通信工程、地球物理、医学等专业的大专院校师生学习参考,也可供相应的工程技术人员参考使用。 本书概念清晰,层次分明,可供从事信号与信息处理、计算机科学与技术、通信工程、地球物理、医学等专业的大专院校师生学习参考,也可供相应的工程技术人员参考使用。 第1章 绪言  前言  1.1 背景知识  1.2 什么是数字图像处理  1.3 MATLAB和图像处理工具箱的背景知识  1.4 本书涵盖的图像处理范围  1.5 本书的Web站点  1.6 MATLAB工作环境   1.6.1 MATLAB桌面   1.6.2 使用MATLAB编辑器创建M文件   1.6.3 获得帮助   1.6.4 保存和检索工作会话  1.7 参考文献的组织方式  小结 第2章 基本原理  前言  2.1 数字图像的表示   2.1.1 坐标约定   2.1.2 图像的矩阵表示  2.2 读取图像  2.3 显示图像  2.4 保存图像  2.5 数据类  2.6 图像类型   2.6.1 亮度图像   2.6.2 二值图像   2.6.3 术语注释  2.7 数据类与图像类型间的转换   2.7.1 数据类间的转换   2.7.2 图像类和类型间的转换  2.8 数组索引   2.8.1 向量索引   2.8.2 矩阵索引   2.8.3 选择数组的维数  2.9 一些重要的标准数组  2.10 M函数编程简介   2.10.1 M文件   2.10.2 运算符   2.10.3 流控制   2.10.4 代码优化   2.10.5 交互式I/O   2.10.6 单元数组与结构简介  小结 第3章 亮度变换与空间滤波  前言  3.1 背景知识  3.2 亮度变换函数   3.2.1 函数imadjust   3.2.2 对数和对比度拉伸变换   3.2.3 亮度变换的一些实用M函数  3.3 直方图处理与函数绘图   3.3.1 生成并绘制图像的直方图   3.3.2 直方图均衡化   3.3.3 直方图匹配(规定化)  3.4 空间滤波   3.4.1 线性空间滤波   3.4.2 非线性空间滤波  3.5 图像处理工具箱的标准空间滤波器   3.5.1 线性空间滤波器   3.5.2 非线性空间滤波器  小结 第4章 频域处理  前言  4.1 二维离散傅里叶变换  4.2 在MATLAB中计算并可视化二维DFT  4.3 频域滤波   4.3.1 基本概念   4.3.2 DFT滤波的基本步骤   4.3.3 用于频域滤波的M函数  4.4 从空间滤波器获得频域滤波器  4.5 在频域中直接生成滤波器   4.5.1 建立用于实现频域滤波器的网格数组   4.5.2 低通频域滤波器   4.5.3 线框图与表面图  4.6 锐化频域滤波器   4.6.1 基本的高通滤波器   4.6.2 高频强调滤波  小结 第5章 图像复原  前言  5.1 图像退化/复原处理的模型  5.2 噪声模型   5.2.1 使用函数imnoise添加噪声   5.2.2 使用指定的分布产生空间随机噪声   5.2.3 周期噪声   5.2.4 估计噪声参数  5.3 仅有噪声的复原:空间滤波   5.3.1 空间噪声滤波器   5.3.2 自适应空间滤波器  5.4 通过频域滤波来降低周期噪声  5.5 退化函数建模  5.6 直接逆滤波  5.7 维纳滤波  5.8 约束的最小二乘方(正则)滤波  5.9 使用Lucy-Richardson算法的迭代非线性复原  5.10 盲去卷积  5.11 几何变换与图像配准   5.11.1 空间几何变换   5.11.2 对图像应用空间变换   5.11.3 图像配准  小结 第6章 彩色图像处理  前言  6.1 MATLAB中彩色图像的表示方法   6.1.1 RGB图像   6.1.2 索引图像   6.1.3 用来处理RGB图像和索引图像的IPT函数  6.2 转换至其他彩色空间   6.2.1 NTSC彩色空间   6.2.2 YCb

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧