RGB转HSI的代码优化

从网上找了一个RGB转HSI的代码,然后发现计算一张图片运算时间太长,整个代码运用for循环,进行计算。没有用numpy库进行矩阵运算,然后这里将该段代码使用矩阵运算,进行了重写。重写后的代码速度提升很多很多。

下面先放它的原本代码:

def rgb2Hsi(rgb_lwpImg):rows = int(rgb_lwpImg.shape[0])cols = int(rgb_lwpImg.shape[1])b, g, r = cv2.split(rgb_lwpImg)# 归一化到[0,1]b = b / 255.0g = g / 255.0r = r / 255.0hsi_lwpImg = rgb_lwpImg.copy()H, S, I = cv2.split(hsi_lwpImg)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 = 0elif b[i, j] <= g[i, j]:H = thetaelse:H = 2*3.14169265 - thetamin_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 = 0else:S = 1 - 3*min_RGB/sumH = H/(2*3.14159265)I = sum/3.0# 输出HSI图像,扩充到255以方便显示,一般H分量在[0,2pi]之间,S和I在[0,1]之间hsi_lwpImg[i, j, 0] = H*255hsi_lwpImg[i, j, 1] = S*255hsi_lwpImg[i, j, 2] = I*255return hsi_lwpImg

之后是用矩阵写的代码,去掉了for循环。返回每个单层,和一张完成HSI色域图。

def rgb2HsiNP(rgb_lwpImg):rows = int(rgb_lwpImg.shape[0])cols = int(rgb_lwpImg.shape[1])b, g, r = cv2.split(rgb_lwpImg)# 归一化到[0,1]b = b / 255.0g = g / 255.0r = r / 255.0num = 0.5 * (r - g + r -g)den = np.sqrt(np.power((r-g),2)+np.multiply((r-b),(g-b)))theta = np.arccos(num/den)H = theta.copy()H[den == 0] = 0indexH = b >= gH[indexH] = 2*3.14169265 - theta[indexH]r[r > g] = g[r > g]r[r > b] = b[r > b]min_RGB = rsum = b + g + rS = sum.copy()indexS = (S != 0)S[indexS] = 1 - 3*min_RGB[indexS]/sum[indexS]H = H/(2*3.14159265)I = sum/3.0hsiImg = np.stack((H,S,I), axis=2)#运用下面的代码,合并三个色域,会更快。# hsiImg = cv2.merge([H,S,I])return H,S,I,hsiImg

然后将两个运算时间进行比较得到如下结果:

图片大小 (3024, 4032, 3)
time1 cost 1.4683358669281006 s
time2 cost 114.82027077674866 s

可见时间提升很多很多,批量处理图片的时候会快很多很多。

RGB转HSI的代码优化相关推荐

  1. hsi转rgb公式matlab,rgb与hsi模型转换matlab程序

    rgb与hsi模型转换matlab程序 数字图像处理:RGB与HSI模型转换Matlab程序 im1=imread( Fig6.30(01).jpg ); im3=im1; im1=im2double ...

  2. matlab bmp hsi,matlab中RGB与HSI图像转化

    姓名:边颖超 学号:19021210974 编程实现RGB与HSI彩色空间的转换,将一幅彩色图像分解为H.S.I三个分量,并显示这三个分量所对应的灰度图像. (1)利用imread函数读入灰度图片hu ...

  3. matlab显示hsi,matlab实现RGB与HSI的相互转换

    %将RGB图像转换为HSI图像 % 显示HSI图像 %直方图均衡化HSI图像 %将HSI图像转换回RGB图像 function rgbtohsi(x) F=imread(x); F=im2double ...

  4. matlab hsi颜色空间,RGB与HSI颜色空间互换函数(matlab)

    近看了一本数字图像处理的原版书.其中提供了RGB与HSI颜色空间之间的相互转变函数.已在matlab7.0中测试成功.不敢独享,贴出来供大家参考. function hsi=rgb2hsi(rgb) ...

  5. OpenCV 颜色空间RGB 到HSI CMYK的转换 C++

    从RGB 到 HSI 的空间转换 给定一幅RGB彩色格式的图像,每个RGB像素的H分量可用下式得到: 其中 等于 饱和度分量由下式给出: 强度分量下式得出: 上式已假定RGB归一化到[0-1],且角度 ...

  6. 【颜色空间转换大集合】RGB到YIQ,RGB到HSI和HSI到RGB,RGB到YcbCr,RGB到XYZ颜色转换matlab代码的Demo,含详细的解释

    废话不说,先上图, 实现方式:matlab 实现功能: 实验目标 了解图像颜色空间的转换关系. 了解图像的文件结构. 实验内容 完成如下颜色空间的转换.(4 Points) RGB -> YIQ ...

  7. 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换

    原理介绍: 颜色空间也称彩色模型(又称彩色空间或彩色系统)它的用途是在某些标准下用通常可接受的方式对彩色加以说明. 本质上,彩色模型是坐标系统和子空间的阐述.位于系统的每种颜色都有单个点表示.现在使用 ...

  8. 使用OpenCV实现RGB、HSI、CMYK颜色空间的转换

    RGB to HSI.CMYK的代码实现 前言: 在之前博文的基础上,我使用OpenCV2实现了RGB颜色空间向HIS.CMYK转换的代码.下列链接为各种经典颜色空间的介绍及转换公式的介绍. http ...

  9. matlab实现rgb转ycgcr以及rgb转hsi

    matlab中自带了rgb转ycbcr的函数rgb2ycbcr.m,但是没有rgb2ycgcr.m,自己根据如下公式实现了该转换,以下代码可参考Github. [ Y C g C r ] = [ 16 ...

最新文章

  1. PyCharm入门教程——在编辑器中使用拖放
  2. MongoDB 分页查询的方法及性能
  3. NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
  4. 通过Fiddler进行手机抓包
  5. 地址栏中的问号有什么作用
  6. linux系统启动流程及常见问题的解决
  7. Android之解决ViewPager2+PhotoView滑动图片花屏问题
  8. python之pyqt5-第一个pyqt5程序-图像压缩工具(2.0版本)-小记
  9. [css] 请使用css3实现图片的平滑转换
  10. linux重启后地址不是之前设置的静态地址的解决方案
  11. C#开发终端式短信的原理和方法 .
  12. 在ASP.NET中对于SESSION的简略说明
  13. CentOS 7 使用源代码编译并安装软件
  14. 关于STM32系列单片机中断触发时间问题
  15. CSS——行内元素的margin与padding
  16. A2DP AVRCP,蓝牙音频协议的兄弟组合(1)
  17. 自定义百度网盘加密分享密码
  18. 关于layui分页组件layPage如何动态调整页数的使用
  19. CPU(中央处理器)和GPU(图像处理器)区别
  20. mt6771(Helio P60)套片开发资料下载,mt6771处理器性能

热门文章

  1. SAP 标准成本、计划成本、目标成本、实际成本解析
  2. 直接在html打开ppt,无需频繁跳转 教你在PPT内直接看网页
  3. 技术术语学习之paradigm
  4. 微信开发者工具之页面跳转
  5. linux中错误无法解析域名无法下载,Linux无法解析域名的解决办法
  6. Ubuntu 无法解析域名
  7. Windows10 磁盘活动时间百分之百导致系统卡顿解决方法
  8. python学习(五)--打印错误信息
  9. 杜绝焦虑,如何提高执行力改变生活?
  10. tp6 获取session_TP6文档