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

newline 2002-08-01 09:49:29
若有HSI到RGB的也请给出来,我有些疑问。
...全文
2567 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都有,包括其它一些转换

4,446

社区成员

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

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