http://www.wk78.com/forum.php?mod=forumdisplay&fid=2&page=1

文件在论坛。

然后需要解决一个问题: 我直接复制过来了,自己看吧。

本帖最后由 InkHin 于 2019-2-22 21:33 编辑

—————请注意三楼的回复———————

'需要添加一个常数声明:
Public Const Ne_BinMax As Double = 4294967296#
'然后把三楼的函数复制替换,其他自己改改就能用了。

InkHin_颜色空间转换算法

File{
         RGB2CIELAB  取值范围[0,255]   
         RGB2CIEXYZ  取值范围[0,255]
         举杯邀明月的移位操作对象库
}

公式:
                      RGB2CIEXYZ :

[X]        [0.433953    0.376219    0.189828 ]    [R]

[Y]     =  [0.212671    0.715160    0.072169 ]    [G]       (3)

[Z]        [0.017758    0.109477    0.872765 ]    [B]

[R]        [3.0799327   -1.537150   -0.542782]  [X]

[G]     =  [-0.921235   1.875992    0.0452442]  [Y]      (4)

[B]        [0.0528909  -0.204043  1.1511515  ]   [Z]

RGB2CIELAB :

CIELAB 与 RGB之间没有直接的公式可以转换,所以需要用XYZ来做中间层。

<ignore_js_op>            
其中

<ignore_js_op>

<ignore_js_op> InkHin_Cie.rar (20.39 KB, 下载次数: 2)

 
 
 
   

1

主题

7

帖子

44

积分

新手上路

积分
44

沙发

 
  楼主| 发表于 昨天 23:08 | 只看该作者
rgb颜色转换为CIELAB和XYZ颜色模型后可以用来比较颜色的识别相似值,CIE的公式我就不写了,有需要的百度吧。 晚安
 
 
 
 
 管理

   

1

主题

7

帖子

44

积分

新手上路

积分
44

板凳

 
  楼主| 发表于 3 小时前 | 只看该作者
转换函数有问题,我等一会修正。
 
 
 
 
 管理

   

1

主题

7

帖子

44

积分

新手上路

积分
44

地板

 
  楼主| 发表于 半小时前 | 只看该作者
本帖最后由 InkHin 于 2019-2-22 21:20 编辑

在后面计算使用的时候我发现了一个错误,由于我们的最终取值范围是【0,255】,
即最大值是一个八位的二进制,所以取值上我截取了二进制值的尾部八位。
但是由于LAB的计算是包括负数的,在该公式的运行中,我使用二进制移位来优化计算,
没有考虑到BIN_To_DEC 函数 (二进制转换十进制)进行操作时
将原二进制负数判断为整形4294967295+(由于返回是Long类型所以不会溢出),导致数据计算出现问题,
解决方法很简单。如下:

设以32位最大值为 (- 1):

1111 1111 1111 1111 1111 1111 1111 1111

十进制(为了直观)  :

4294967293 -3

4294967294 -2

4294967295 -1

4294967296     0

4294967297  1
                
                        4294967298  2
                        
                        4294967299  3

那么正确的值 = Value  - 4294967296

————————                        ——————————

可以将Mid()部分也顺便放进里面BIN_TO_DEC的函数里:
同时,由于A和B的值最后还要加上128 所以 (255 -128) = 127 < 255 ,计算得到的仍旧是一个八位的二进制值。

意味着我们只要从倒数第八位开始往左取四位,判断其是否 = “1111”,就可以筛选其是否为一个负数。

Code :

Public Function BIN_to_DEC(ByVal Bin As String, Optional Mid_Value As Byte = 8) As Currency
'Mid_Value = Mid 's length
Dim i As Long, Length As Long, Ne As Boolean, Value As String
    Length = Len(Bin)
If Mid(Bin, Length - 8 - 3, 4) = "1111" Then
    Value = Mid(Bin, Length - 7, 8)
    Value = "111111111111111111111111" & Value
    Ne = True
Else
    Value = Mid(Bin, Length - (Mid_Value - 1), Mid_Value)
End If
    Length = Len(Value)
For i = 1 To Length
    BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Value, i, 1))
Next i
Debug.Print BIN_to_DEC
If Ne = True Then BIN_to_DEC = BIN_to_DEC - Ne_BinMax
End Function

颜色空间的转换系列 (一) ——RGB2XYZ/LAB的更多相关文章

  1. HSV与RGB颜色空间的转换

    一.本质上,H的取值范围:0~360   S的取值范围:0~1    V的取值范围:0~255                                     但是,当图像为32F型的时候,各 ...

  2. 【转】K3Cloud 二次开发 单据转换系列

    Entity, EntryEntity, SubEntryEntity 这三个对象具有继承关系:Entity 是实体基类,用于定义各种实体的公共属性:EntryEntity 是单据体实体类,从Enti ...

  3. python数字图像处理(4):图像数据类型及颜色空间转换

    一.图像数据类型及转换 在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换.这些数据类型及取值范围如下表所示: Data type Range uin ...

  4. opencv学习笔记——颜色空间转换函数cv::cvtColor详解

    cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致. 具体 ...

  5. Python-OpenCV中图像颜色空间转换

    目录 cv2.cvtColor() 1. RGB to GRAY 2. RGB to CIE XYZ 3. RGB to YCrCb JPEG 4. RGB to HSV 5. RGB to HLS ...

  6. OpenCV 学习笔记(10)HSV颜色空间及颜色空间转换(RGB-HSV)

    1.1 颜色空间介绍 RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成.然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 H ...

  7. SSE图像算法优化系列十五:YUV/XYZ和RGB空间相互转化的极速实现(此后老板不用再担心算法转到其他空间通道的耗时了)。

    在颜色空间系列1: RGB和CIEXYZ颜色空间的转换及相关优化和颜色空间系列3: RGB和YUV颜色空间的转换及优化算法两篇文章中我们给出了两种不同的颜色空间的相互转换之间的快速算法的实现代码,但是 ...

  8. SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。

    这是一篇2010年比较古老的文章了,是在QQ群里一位群友提到的,无聊下载看了下,其实也没有啥高深的理论,抽空实现了下,虽然不高大上,还是花了点时间和心思优化了代码,既然这样,就顺便分享下优化的思路和经 ...

  9. YUV422与RGB互相转换

      YUV422与RGB互相转换(经验证在IPNC与PC上都可以) 前一段时间在DM8168中进行颜色空间的转换,在网上找了些程序,自己也根据网上的改了下,由于能力问题,实在是不好意思说做了好几天才弄 ...

随机推荐

  1. html限制文本框只能输入数字和一个小数点

    近期在做一个前台页面,有一个文本框是用来输入充值金额的,就想到了限制用户只能输入纯数字的数据且只能包含一个小数点.下面就是我实现的代码 $(function() { //阻止数字键以外的按键输入 $( ...

  2. opcache 参数说明 --转自https://www.cnblogs.com/tudou1223/p/5362785.html

    PHP的opcode缓存又出了新成员(说新不新,也有一段日子了),那就是opcache.新浪微博等都在使用,惠新宸老师强力推荐.本人最近根据官网地址(http://www.php.net/manual ...

  3. centos7 安装php gd库

    yum install php-gd vi /etc/php.ini 添加: extension=/usr/lib64/php/modules/gd.so

  4. JAVA 注解和反射

    通过反射来获取类 Class MyTest{ private String name; public String showName{ System.out.println(this.name); } ...

  5. Azkaban 使用问题及解决(一)

    什么是Azkaban Azkaban是一款基于Java编写的任务调度系统 任务调度:有四个任务脚A.B.C.D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C ...

  6. Visual studio 调试发布到IIS站点方式一

    在项目开发过程中,前端项目可能调用多个API接口,并且这些API接口是在同一个资源解决方案下的,一个资源解决方案下只能设置一个启动项目.那么问题来了,某个API业务需求变更或有BUG,解决后是需要调试 ...

  7. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  8. IDEA注册码分享

    IntelliJ IDEA IDEA 2018 激活注册码分享鼠标连续 三下左键点击 选中,再Ctrl+C 即可复制. CSDN在末尾会带上博客的说明,请删除后,复制到 IDEA中激活. 注册码激活: ...

  9. SLES Install

    SUSE Linux Enterprise Server 12-SP3:zypper in -t patch SUSE-SLE-SERVER-12-SP3-2017-2036=1 To bring y ...

  10. SpringBoot+Mybatis+Maven+MySQL逆向工程实现增删改查

    SpringBoot+Mybatis+MySQL+MAVEN逆向工程实现增删改查 这两天简单学习了下SpringBoot,发现这玩意配置起来是真的方便,相比于SpringMVC+Spring的配置简直 ...