从地图猜测 rgb 渐变?

Mas*_*ran 5 python rgb gradient image python-imaging-library

我有一张像这样比例尺的地图:(数字只是一个例子)

坡度它描述了地图上的单个变量。但是,我无法访问原始数据,并且对图像处理几乎一无所知。我所做的是使用 PIL 来获取地图上每个点的像素坐标和 RGB 值。简单地使用pix = im.load()和保存pix[x,y]每个x,y。现在我想用上面的梯度来猜测每个点的值。

这种梯度有标准公式吗?训练有素的眼睛看起来很熟悉吗?我已经访问了数学函数数字图书馆的一些例子......但我不确定它是否使用了色调、rgb 高度函数或其他东西(为了让事情变得更容易,我也对一些绿色/眉毛/红色视而不见) ) :)

任何关于如何进行、图书馆、链接或想法的提示表示赞赏。谢谢!

编辑:

按照回复和马蒂诺的建议,我试图捕捉顶部和底部的颜色:

def rgb2hls(colotup):
    '''converts 225 based RGB to 360 based HLS
    `input`: (222,98,32) tuple'''

    dec_rgb = [x/255.0 for x in colotup] # use decimal 0.0 - 1.0 notation for RGB
    hsl_col = colorsys.rgb_to_hls(dec_rgb[0], dec_rgb[1], dec_rgb[2])
    # PIL uses hsl(360,x%,y%) notation and throws errors on float, so I use int
    return (int(hsl_col[0]*360), int(hsl_col[1]*100), int(hsl_col[2]*100))


def pil_hsl_string(hsltup):
    '''returns a string PIL can us as HSL color
    from a tuple (x,y,z) -> "hsl(x,y%,z%)"'''
    return 'hsl(%s,%s%%,%s%%)' % (hsltup[0], hsltup[1], hsltup[2])


BottomRed = (222,98,32) # taken with gimp
TopBlue =  (65, 24, 213) 

hue_red = pil_hsl_string(rgb2hls(BottomRed))
hue_blue = pil_hsl_string(rgb2hls(TopBlue))
Run Code Online (Sandbox Code Playgroud)

然而,它们的结果却大不相同……这让我担心使用 rgb_to_hls 函数来提取值。还是我做错了什么?这是使用代码将颜色转换为的内容: 在此处输入图片说明

enh*_*lep 2

有趣的问题..

如果您在 HSL 颜色空间中从 250,85%,85% --> 21,85%,85% 进行顺时针行走,您会得到一个非常接近您所显示的渐变。明显的区别是您的图像表现出相当窄的绿色值带。

因此,如果您有 4 个幻数,那么您可以插值到地图内的任何点。

这些当然是第一个和最后一个颜色,也是第一个和最后一个比例值。这是我在 H 通道上使用直线渐变得到的图像(使用 gimp)。 在此输入图像描述

编辑:我已经编写了一个程序来获取每行的像素值,并绘制结果。您可以看到,色相确实不是线性的,您还可以看到 S 和 V 通道在 115 左右(距离图像顶部 115 像素)明显下降,这确实与绿色波段相对应。

考虑到曲线的形状,我倾向于认为它们可能是为了模拟某些东西。但没有相关领域的经验来识别曲线的形状。

下面,我添加了 HSV 和 RGB 模型中变化的图表。图表的左侧代表条形的顶部。X 轴标签代表像素

我觉得很有趣。已添加书签。

在此输入图像描述

在此输入图像描述

  • RGB图看起来像[matlabs jet颜色图]的平滑版本(http://4.bp.blogspot.com/-OTAL6CoX4_U/T1cHIWRHpVI/AAAAAAAAAT8/SEl9fJESXR0/s1600/jetchannels.png) (2认同)