RGB转HSI的代码优化
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的代码优化相关推荐
- hsi转rgb公式matlab,rgb与hsi模型转换matlab程序
rgb与hsi模型转换matlab程序 数字图像处理:RGB与HSI模型转换Matlab程序 im1=imread( Fig6.30(01).jpg ); im3=im1; im1=im2double ...
- matlab bmp hsi,matlab中RGB与HSI图像转化
姓名:边颖超 学号:19021210974 编程实现RGB与HSI彩色空间的转换,将一幅彩色图像分解为H.S.I三个分量,并显示这三个分量所对应的灰度图像. (1)利用imread函数读入灰度图片hu ...
- matlab显示hsi,matlab实现RGB与HSI的相互转换
%将RGB图像转换为HSI图像 % 显示HSI图像 %直方图均衡化HSI图像 %将HSI图像转换回RGB图像 function rgbtohsi(x) F=imread(x); F=im2double ...
- matlab hsi颜色空间,RGB与HSI颜色空间互换函数(matlab)
近看了一本数字图像处理的原版书.其中提供了RGB与HSI颜色空间之间的相互转变函数.已在matlab7.0中测试成功.不敢独享,贴出来供大家参考. function hsi=rgb2hsi(rgb) ...
- OpenCV 颜色空间RGB 到HSI CMYK的转换 C++
从RGB 到 HSI 的空间转换 给定一幅RGB彩色格式的图像,每个RGB像素的H分量可用下式得到: 其中 等于 饱和度分量由下式给出: 强度分量下式得出: 上式已假定RGB归一化到[0-1],且角度 ...
- 【颜色空间转换大集合】RGB到YIQ,RGB到HSI和HSI到RGB,RGB到YcbCr,RGB到XYZ颜色转换matlab代码的Demo,含详细的解释
废话不说,先上图, 实现方式:matlab 实现功能: 实验目标 了解图像颜色空间的转换关系. 了解图像的文件结构. 实验内容 完成如下颜色空间的转换.(4 Points) RGB -> YIQ ...
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
原理介绍: 颜色空间也称彩色模型(又称彩色空间或彩色系统)它的用途是在某些标准下用通常可接受的方式对彩色加以说明. 本质上,彩色模型是坐标系统和子空间的阐述.位于系统的每种颜色都有单个点表示.现在使用 ...
- 使用OpenCV实现RGB、HSI、CMYK颜色空间的转换
RGB to HSI.CMYK的代码实现 前言: 在之前博文的基础上,我使用OpenCV2实现了RGB颜色空间向HIS.CMYK转换的代码.下列链接为各种经典颜色空间的介绍及转换公式的介绍. http ...
- matlab实现rgb转ycgcr以及rgb转hsi
matlab中自带了rgb转ycbcr的函数rgb2ycbcr.m,但是没有rgb2ycgcr.m,自己根据如下公式实现了该转换,以下代码可参考Github. [ Y C g C r ] = [ 16 ...
最新文章
- PyCharm入门教程——在编辑器中使用拖放
- MongoDB 分页查询的方法及性能
- NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
- 通过Fiddler进行手机抓包
- 地址栏中的问号有什么作用
- linux系统启动流程及常见问题的解决
- Android之解决ViewPager2+PhotoView滑动图片花屏问题
- python之pyqt5-第一个pyqt5程序-图像压缩工具(2.0版本)-小记
- [css] 请使用css3实现图片的平滑转换
- linux重启后地址不是之前设置的静态地址的解决方案
- C#开发终端式短信的原理和方法 .
- 在ASP.NET中对于SESSION的简略说明
- CentOS 7 使用源代码编译并安装软件
- 关于STM32系列单片机中断触发时间问题
- CSS——行内元素的margin与padding
- A2DP AVRCP,蓝牙音频协议的兄弟组合(1)
- 自定义百度网盘加密分享密码
- 关于layui分页组件layPage如何动态调整页数的使用
- CPU(中央处理器)和GPU(图像处理器)区别
- mt6771(Helio P60)套片开发资料下载,mt6771处理器性能