在HSV空间中计算色差(python)

在HSV空间中计算色差(python),第1张

原文链接:一篇很好的博客

我的需求:已知两个RGB颜色,转换为HSV,并且判断这两个颜色的相似性。

RGB转HSV在python中有现成的方法:

import colorsys
H_1, S_1, V_1 = colorsys.rgb_to_hsv(color1[0], color1[1], color1[2])

在HSV颜色空间中计算色差:

def hsv_D_value(color1, color2):
	# color1, color2是RGB颜色,先转换为HSV
    import colorsys
    H_1, S_1, V_1 = colorsys.rgb_to_hsv(color1[0], color1[1], color1[2])
    H_2, S_2, V_2 = colorsys.rgb_to_hsv(color2[0], color2[1], color2[2])
    R, angle_ = 100, 30
    h = R * math.cos(angle_ / 180 * math.pi)
    r = R * math.sin(angle_ / 180 * math.pi)
    x1 = r * V_1 * S_1 * math.cos(H_1 / 180 * math.pi)
    y1 = r * V_1 * S_1 * math.sin(H_1 / 180 * math.pi)
    z1, z2 = h * (1 - V_1), h * (1 - V_2)
    x2 = r * V_2 * S_2 * math.cos(H_2 / 180 * math.pi)
    y2 = r * V_2 * S_2 * math.sin(H_2 / 180 * math.pi)
    dx = x1 - x2
    dy = y1 - y2
    dz = z1 - z2
    return math.sqrt(dx * dx + dy * dy + dz * dz)
下面要说的是计算方法的原理:

注意:以下解释仅为个人理解,记录是为了防止遗忘,可能存在理解错误的地方,有些措辞也不慎恰当,望三思
众所周知,在hsv空间当中,s和v的取值都为0到1。也就是说,hsv空间中标准的色锥是底面半径为1,高为1,中垂线的斜边的夹角是45°。

给定一个HSV色锥P,假设斜边长为R,底面圆半径为r,高为h,以H=0为x轴的正方向, V从1到0的方向为z轴正方向建立坐标系。那么我们可以把一个(H, S, V)转换为(x, y, z)坐标,两个坐标之间的欧式距离可以表示为色差。

转换公式如下:

x = r∗V∗S∗cosH
y = r∗V∗S∗sinH
z = h∗(1−V)

先说 z = h∗(1−V),这个比较简单,画一个坐标系就明白了。z轴方向和V是相反的,所以1-V表示z轴上的距离。h是圆锥的高,这里其实就是作为一个比例系数,因为我们给定的圆锥P不一定是HSV空间中标准的圆锥(r=h=1),有可能是标准圆锥的100,1000倍(等比例放大,r=h=100/1000···)。假如v=0.3,当h=100时,z=70而不能是0.7。

接下来我们看x = r∗V∗S∗cosHS∗cosH就是S在x轴方向的一个投影,同样的,这个投影的值要根据圆锥P的大小进行放缩,r∗V就是放缩的比例系数(几何意义是该点所在横截面圆的半径)。圆锥P内任一点所在横截面为圆,其半径r’和横截面圆心到圆锥顶点(圆锥尖)的距离d1,以及圆锥斜边形成的三角形记为S1。其中d1=V*hh是圆锥的高,作为比例系数)。圆锥的高和底面半径以及斜边形成的三角形记作S2。S1和S2相似,可以求出横截面半径r'=d1*r/h=V*r
至于放缩的比例系数为什么是r'不是r,是因为S和横截面圆的放缩比例一致,而并不是圆锥底面。
y = r∗V∗S∗sinHx = r∗V∗S∗cosH 一样,只不过投影方向不同,不再赘述。

不清楚的话多画画图,想一想。
加上一张图,图中字母的表示和文字叙述不太一样,但是逻辑相同。
紫色三角形和红色三角形相似。

最后,有一个很重要的问题没想明白。

一开始说过,按照百度百科给的数据,hsv颜色空间中,标准圆锥的高为1,底面半径为1,斜边和高的夹角为45°,但是在上面的代码中,angle_ = 30°,这样子圆锥的形状就改变了,角度不一样求出的结果也不同,按照目前我的理解来讲是不对的。至于R=100,这个没有什么影响,无非就是结果扩大了多少倍。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/795006.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存