注册 登录
  • 注册时,本站名称为:RGB空格3S博客,注意中间的空格。
  • 2018.8.14本站全面接入google广告
  • 2017.2.14今天收到45条恶意评论(全是外文),故评论时请填写必要信息,匿名评论全部拉黑,迫不得已而为之
  • 2017.1.27,2017年春节及至,我谨代表本人祝大家新春快乐,本人年终总结文章请访问:2016年终总结
  • 为防止恶意转载,本站全面禁止复制,并添加图片水印:RGB 3S博客www.ixxin.cn。
  • 本站正式更名为RGB 3S博客,本站将撤消所有非3S内容,其将转移到新博客江湖时代

基于Opencv实现RGB2HSI颜色空间变换

C/C++ admin 7349次浏览 已收录 0个评论
[隐藏]

前言

Opencv中有多种颜色空间的转换,唯独没有RGB与HSI的转换,这在遥感影像处理中至关重要,所以写了这个,这个转换有多种方法,我用两种方法实现了,但是方法1算出来不正确,还未找到原因,方法二经过改进结果正确,解决了网上代码存在的一些问题,应该是全网(百度、Google)差不多是最好的了,欢迎打脸。
算法介绍,看这里:http://blog.sina.com.cn/s/blog_a5b3ed560100yo26.html
他博客的算法图片:
算法
其中算法1,我没做出来,做了算法2。

/*
作者:山科_xxin
时间:2017-03-27 23:08:26
功能:<a href="https://www.ixxin.cn/tag/rgb2hsi/" title="查看更多关于RGB2HSI的文章" target="_blank">RGB2HSI</a>
类别:图像融合算法
*/
int rgb2hsi(Mat Rgbimg,Mat HV,Mat SV,Mat IV)
{
	int row = Rgbimg.rows;
	int col = Rgbimg.cols;
/*
	vector<Mat> channels;

	HV = channels.at(0);
	SV = channels.at(1);
	IV = channels.at(2);
*/
	for(int i =0;i<row;i++)
		for(int j = 0;j<col;j++)
		{
			float H = 0.0,S = 0.0,I = 0.0;
			float BV = Rgbimg.at<Vec3b>(i,j)(0);
			float GV = Rgbimg.at<Vec3b>(i,j)(1);
			float RV = Rgbimg.at<Vec3b>(i,j)(2);

			float num = (float)(RV-GV+RV-BV)/2.0;
			float den = (float)std::sqrt((double)((RV-GV)*(RV-GV)+(RV-BV)*(GV-BV)));
			
			if(den!=0)
			{
				float cosTA = acos(num/den);
				if(BV<=GV)
				{
					H = cosTA/(CV_PI*2);
				}
				else
				{
					H = (2*CV_PI-cosTA)/(2*CV_PI);
				}
			}
			
			else
			{
				H = 0;
			}
			
			float minv = min(min(BV,GV),RV);
			den = BV+GV+RV;
			if(den ==0)
				S = 0;
			else
				S = 1-(float)(3*minv/den);

			I = ((RV+BV+GV)/3)/255;

			HV.at<float>(i,j) = H;
			SV.at<float>(i,j) = S;
			IV.at<float>(i,j) = I;
		}

	return 0;
}

RGB:
原图
HSI:
hsi

后语

我这个目前还存在一个问题就是,不是用指针遍历的,所以说相对于指针慢一些,我已经写好了指针遍历的,感兴趣的可以自己写一下。目前HSI2RGB还没写出来,HistMatch还没写出来,行百里者半九十!!!


xxin blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明基于Opencv实现RGB2HSI颜色空间变换
喜欢 (0)
支付宝[853060844@qq.com]
分享 (0)
admin
关于作者:
坐标山科大遥感系小鲜肉一枚。
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址