[db:标题]
摘要:RGB和HSLHSV颜色空间的相互转换在我们的图像处理中是有着非常广泛的应用的,无论是是图像调节,还是做一些肤色算法,HSLHSV颜色空间都非常有用,他提供了RGB颜色空间不具有的一些独特的特性,但是由于HSLHSV颜色空间的复杂性,
RGB和HSL/HSV颜色空间的相互转换在我们的图像处理中是有着非常广泛的应用的,无论是是图像调节,还是做一些肤色算法,HSL/HSV颜色空间都非常有用,他提供了RGB颜色空间不具有的一些独特的特性,但是由于HSL/HSV颜色空间的复杂性,他们之间的转换的效率一直不是很高的,有一些基于定点算法的尝试,对速度有一定的提升,但一个是提升不是特别的明显,另外就是对结果的精度有一定的影响。
对于这两个算法的指令集优化,网络上就根本没有任何资料,也没有任何人进行过尝试,我也曾经有想法去折腾他,但是初步判断觉得他里面有太多的分支了,应该用了指令集后也不会有多大的速度区别,所以一直没有动手。
但是最近的一个朋友的潜在需求,然后我又对这个算法有些期待,重新动手拾起这个转换过程,结果还是有所收获,速度获得了3到4倍的提升。、
我们先来谈谈RGB到HSL或者HSV颜色空间的转换优化
这个网络上一大堆,我也就不浪费时间去重新整理,我直接分享一段代码和网址吧:
参考网址: http://www.xbeat.net/vbspeed
这个文章给出的是VB6的代码,可以参考下。
我们约定:RGB数据源是unsigned char 类型, 有效范围就是[0,255],而HSL/HSV都是浮点型,其中H的有效范围时[0,6],S的有效范围是[0,1], L/V的有效范围也是[0,1]。
