[元宇宙]C01.12:后记B.Python生成Parula ColorMap
花小白2020
2024年05月16日 13:10
收录于文集
共53篇

零:元宇宙系列专栏C01:Matlab到Blender Python程序化建模

[元宇宙]C01.10:从Matlab到Blender Python的程序化建模小结​

涵盖了从Matlab面型生成,RGBD深度图,XyzRgb点云,泊松面片重建,BlenderMesh模型生成和图像渲染。 

一、ColorMap的替换

Matlab在生成Peaks的时候,会给生成的数据提供一个颜色映射。

ColorMap

稍微专业点的术语是ColorMap,就是根据Z值的数据,映射到一个256*3的颜色Map当中去。

刚开始的时候,还以为这个是小菜一碟,不就是映射么。

自己写一个映射Map就好了。后来发现不是那么回事。

二、Matlab的Parula ColorMap

据说这个Parula是后来更新的,灰度变化更均匀。

而且官方帮助文档也没有给出具体的实现。

只说了一个这个。

代码块
JavaScript
自动换行
复制代码
c = parula returns the parula colormap as a three-column array with the same number of rows as the colormap for the current figure. If no figure exists, then the number of rows is equal to the default length of 256. Each row in the array contains the red, green, and blue intensities for a specific color. The intensities are in the range [0,1], and the color scheme looks like this image.
复制成功

GUI界面可以选择不同的ColorMap

三、网络提供的Python使用parula的函数

在Python中使用Matlab中的parula格式的colormap Python 中没有类似于 matlb 中 parula 格式的 colormap,解决方法: 在 matlab 中导出 parula 格式的 colormap 对应的颜色矩阵 256*3,导出文件为 csv 格式。 然后在 python 中导入 csv 格式的文件即可。

实际上还是,利用Maltab构建parula ColorMap。

Matlab并没有提供parula的具体实现。

四、Matlab自己的parula函数实现

parula

具体实现如下:

代码块
JavaScript
自动换行
复制代码
P = size(values,1);
map = interp1(1:size(values,1), values, linspace(1,P,m), 'linear');
复制成功

values:是一个写死的256*3的矩阵,表示256采样点下的Parula ColorMap

m:Parula的输入参数,表示生成m*3的ColorMap。

上面两句的意思是

根据输入m,将values的256*3的Parula颜色,线性插值成m*3,然后输出。

五、Python的Parula函数实现

一样,知道Parula函数的实现原理之后,就可以借助values原生的256*3 Parula颜色,线性插值成需要输出的m*3颜色

代码块
JavaScript
自动换行
复制代码
def ColorMap_parula(Num):
     values = np.array([[0.2422, 0.1504, 0.6603], [0.2444, 0.1534, 0.6728], [0.2464, 0.1569, 0.6847], [0.2484, 0.1607, 0.6961], [0.2503, 0.1648, 0.7071], [0.2522, 0.1689, 0.7179], [0.2540, 0.1732, 0.7286], [0.2558, 0.1773, 0.7393], [0.2576, 0.1814, 0.7501], [0.2594, 0.1854, 0.7610], [0.2611, 0.1893, 0.7719], [0.2628, 0.1932, 0.7828], [0.2645, 0.1972, 0.7937], [0.2661, 0.2011, 0.8043], [0.2676, 0.2052, 0.8148], [0.2691, 0.2094, 0.8249], [0.2704, 0.2138, 0.8346], [0.2717, 0.2184, 0.8439], [0.2729, 0.2231, 0.8528], [0.2740, 0.2280, 0.8612], [0.2749, 0.2330, 0.8692], [0.2758, 0.2382, 0.8767], [0.2766, 0.2435, 0.8840], [0.2774, 0.2489, 0.8908], [0.2781, 0.2543, 0.8973], [0.2788, 0.2598, 0.9035], [0.2794, 0.2653, 0.9094], [0.2798, 0.2708, 0.9150], [0.2802, 0.2764, 0.9204], [0.2806, 0.2819, 0.9255], [0.2809, 0.2875, 0.9305], [0.2811, 0.2930, 0.9352], [0.2813, 0.2985, 0.9397], [0.2814, 0.3040, 0.9441], [0.2814, 0.3095, 0.9483], [0.2813, 0.3150, 0.9524], [0.2811, 0.3204, 0.9563], [0.2809, 0.3259, 0.9600], [0.2807, 0.3313, 0.9636], [0.2803, 0.3367, 0.9670], [0.2798, 0.3421, 0.9702], [0.2791, 0.3475, 0.9733], [0.2784, 0.3529, 0.9763], [0.2776, 0.3583, 0.9791], [0.2766, 0.3638, 0.9817], [0.2754, 0.3693, 0.9840], [0.2741, 0.3748, 0.9862], [0.2726, 0.3804, 0.9881], [0.2710, 0.3860, 0.9898], [0.2691, 0.3916, 0.9912], [0.2670, 0.3973, 0.9924], [0.2647, 0.4030, 0.9935], [0.2621, 0.4088, 0.9946], [0.2591, 0.4145, 0.9955], [0.2556, 0.4203, 0.9965], [0.2517, 0.4261, 0.9974], [0.2473, 0.4319, 0.9983], [0.2424, 0.4378, 0.9991], [0.2369, 0.4437, 0.9996], [0.2311, 0.4497, 0.9995], [0.2250, 0.4559, 0.9985], [0.2189, 0.4620, 0.9968], [0.2128, 0.4682, 0.9948], [0.2066, 0.4743, 0.9926], [0.2006, 0.4803, 0.9906], [0.1950, 0.4861, 0.9887], [0.1903, 0.4919, 0.9867], [0.1869, 0.4975, 0.9844], [0.1847, 0.5030, 0.9819], [0.1831, 0.5084, 0.9793], [0.1818, 0.5138, 0.9766], [0.1806, 0.5191, 0.9738], [0.1795, 0.5244, 0.9709], [0.1785, 0.5296, 0.9677], [0.1778, 0.5349, 0.9641], [0.1773, 0.5401, 0.9602], [0.1768, 0.5452, 0.9560], [0.1764, 0.5504, 0.9516], [0.1755, 0.5554, 0.9473], [0.1740, 0.5605, 0.9432], [0.1716, 0.5655, 0.9393], [0.1686, 0.5705, 0.9357], [0.1649, 0.5755, 0.9323], [0.1610, 0.5805, 0.9289], [0.1573, 0.5854, 0.9254], [0.1540, 0.5902, 0.9218], [0.1513, 0.5950, 0.9182], [0.1492, 0.5997, 0.9147], [0.1475, 0.6043, 0.9113], [0.1461, 0.6089, 0.9080], [0.1446, 0.6135, 0.9050], [0.1429, 0.6180, 0.9022], [0.1408, 0.6226, 0.8998], [0.1383, 0.6272, 0.8975], [0.1354, 0.6317, 0.8953], [0.1321, 0.6363, 0.8932], [0.1288, 0.6408, 0.8910], [0.1253, 0.6453, 0.8887], [0.1219, 0.6497, 0.8862], [0.1185, 0.6541, 0.8834], [0.1152, 0.6584, 0.8804], [0.1119, 0.6627, 0.8770], [0.1085, 0.6669, 0.8734], [0.1048, 0.6710, 0.8695], [0.1009, 0.6750, 0.8653], [0.0964, 0.6789, 0.8609], [0.0914, 0.6828, 0.8562], [0.0855, 0.6865, 0.8513], [0.0789, 0.6902, 0.8462], [0.0713, 0.6938, 0.8409], [0.0628, 0.6972, 0.8355], [0.0535, 0.7006, 0.8299], [0.0433, 0.7039, 0.8242], [0.0328, 0.7071, 0.8183], [0.0234, 0.7103, 0.8124], [0.0155, 0.7133, 0.8064], [0.0091, 0.7163, 0.8003], [0.0046, 0.7192, 0.7941], [0.0019, 0.7220, 0.7878], [0.0009, 0.7248, 0.7815], [0.0018, 0.7275, 0.7752], [0.0046, 0.7301, 0.7688], [0.0094, 0.7327, 0.7623], [0.0162, 0.7352, 0.7558], [0.0253, 0.7376, 0.7492], [0.0369, 0.7400, 0.7426], [0.0504, 0.7423, 0.7359], [0.0638, 0.7446, 0.7292], [0.0770, 0.7468, 0.7224], [0.0899, 0.7489, 0.7156], [0.1023, 0.7510, 0.7088], [0.1141, 0.7531, 0.7019], [0.1252, 0.7552, 0.6950], [0.1354, 0.7572, 0.6881], [0.1448, 0.7593, 0.6812], [0.1532, 0.7614, 0.6741], [0.1609, 0.7635, 0.6671], [0.1678, 0.7656, 0.6599], [0.1741, 0.7678, 0.6527], [0.1799, 0.7699, 0.6454], [0.1853, 0.7721, 0.6379], [0.1905, 0.7743, 0.6303], [0.1954, 0.7765, 0.6225], [0.2003, 0.7787, 0.6146], [0.2061, 0.7808, 0.6065], [0.2118, 0.7828, 0.5983], [0.2178, 0.7849, 0.5899], [0.2244, 0.7869, 0.5813], [0.2318, 0.7887, 0.5725], [0.2401, 0.7905, 0.5636], [0.2491, 0.7922, 0.5546], [0.2589, 0.7937, 0.5454], [0.2695, 0.7951, 0.5360], [0.2809, 0.7964, 0.5266], [0.2929, 0.7975, 0.5170], [0.3052, 0.7985, 0.5074], [0.3176, 0.7994, 0.4975], [0.3301, 0.8002, 0.4876], [0.3424, 0.8009, 0.4774], [0.3548, 0.8016, 0.4669], [0.3671, 0.8021, 0.4563], [0.3795, 0.8026, 0.4454], [0.3921, 0.8029, 0.4344], [0.4050, 0.8031, 0.4233], [0.4184, 0.8030, 0.4122], [0.4322, 0.8028, 0.4013], [0.4463, 0.8024, 0.3904], [0.4608, 0.8018, 0.3797], [0.4753, 0.8011, 0.3691], [0.4899, 0.8002, 0.3586], [0.5044, 0.7993, 0.3480], [0.5187, 0.7982, 0.3374], [0.5329, 0.7970, 0.3267], [0.5470, 0.7957, 0.3159], [0.5609, 0.7943, 0.3050], [0.5748, 0.7929, 0.2941], [0.5886, 0.7913, 0.2833], [0.6024, 0.7896, 0.2726], [0.6161, 0.7878, 0.2622], [0.6297, 0.7859, 0.2521], [0.6433, 0.7839, 0.2423], [0.6567, 0.7818, 0.2329], [0.6701, 0.7796, 0.2239], [0.6833, 0.7773, 0.2155], [0.6963, 0.7750, 0.2075], [0.7091, 0.7727, 0.1998], [0.7218, 0.7703, 0.1924], [0.7344, 0.7679, 0.1852], [0.7468, 0.7654, 0.1782], [0.7590, 0.7629, 0.1717], [0.7710, 0.7604, 0.1658], [0.7829, 0.7579, 0.1608], [0.7945, 0.7554, 0.1570], [0.8060, 0.7529, 0.1546], [0.8172, 0.7505, 0.1535], [0.8281, 0.7481, 0.1536], [0.8389, 0.7457, 0.1546], [0.8495, 0.7435, 0.1564], [0.8600, 0.7413, 0.1587], [0.8703, 0.7392, 0.1615], [0.8804, 0.7372, 0.1650], [0.8903, 0.7353, 0.1695], [0.9000, 0.7336, 0.1749], [0.9093, 0.7321, 0.1815], [0.9184, 0.7308, 0.1890], [0.9272, 0.7298, 0.1973], [0.9357, 0.7290, 0.2061], [0.9440, 0.7285, 0.2151], [0.9523, 0.7284, 0.2237], [0.9606, 0.7285, 0.2312], [0.9689, 0.7292, 0.2373], [0.9770, 0.7304, 0.2418], [0.9842, 0.7330, 0.2446], [0.9900, 0.7365, 0.2429], [0.9946, 0.7407, 0.2394], [0.9966, 0.7458, 0.2351], [0.9971, 0.7513, 0.2309], [0.9972, 0.7569, 0.2267], [0.9971, 0.7626, 0.2224], [0.9969, 0.7683, 0.2181], [0.9966, 0.7740, 0.2138], [0.9962, 0.7798, 0.2095], [0.9957, 0.7856, 0.2053], [0.9949, 0.7915, 0.2012], [0.9938, 0.7974, 0.1974], [0.9923, 0.8034, 0.1939], [0.9906, 0.8095, 0.1906], [0.9885, 0.8156, 0.1875], [0.9861, 0.8218, 0.1846], [0.9835, 0.8280, 0.1817], [0.9807, 0.8342, 0.1787], [0.9778, 0.8404, 0.1757], [0.9748, 0.8467, 0.1726], [0.9720, 0.8529, 0.1695], [0.9694, 0.8591, 0.1665], [0.9671, 0.8654, 0.1636], [0.9651, 0.8716, 0.1608], [0.9634, 0.8778, 0.1582], [0.9619, 0.8840, 0.1557], [0.9608, 0.8902, 0.1532], [0.9601, 0.8963, 0.1507], [0.9596, 0.9023, 0.1480], [0.9595, 0.9084, 0.1450], [0.9597, 0.9143, 0.1418], [0.9601, 0.9203, 0.1382], [0.9608, 0.9262, 0.1344], [0.9618, 0.9320, 0.1304], [0.9629, 0.9379, 0.1261], [0.9642, 0.9437, 0.1216], [0.9657, 0.9494, 0.1168], [0.9674, 0.9552, 0.1116], [0.9692, 0.9609, 0.1061], [0.9711, 0.9667, 0.1001], [0.9730, 0.9724, 0.0938], [0.9749, 0.9782, 0.0872], [0.9769, 0.9839, 0.0805]])
复制成功

其中values里面就是parula的256*3的颜色数据。

代码块
JavaScript
自动换行
复制代码
    XS = np.linspace(1, 256, Num)
    XP = np.linspace(1, 256, 256)
    R = np.interp(XS, XP, values[:, 0], left=None, right=None, period=None)
    G = np.interp(XS, XP, values[:, 1], left=None, right=None, period=None)
    B = np.interp(XS, XP, values[:, 2], left=None, right=None, period=None)
    Color = np.zeros([Num, 3], dtype='float16')
    Color[:, 0] = B
    Color[:, 1] = G
    Color[:, 2] = R
复制成功

后面的部分就是numpy的线性插值。

代码块
JavaScript
自动换行
复制代码
    return Color  #BGR,2024.05.15.1805
复制成功

函数最后返回Color。

六、Matlab和Python的Parula ColorMap的对比

Matlab的Parula ColorMap

Python的Parula ColorMap

七、结束语

代码块
JavaScript
自动换行
复制代码
我是小白,
一个致力于Blender Python 智能化三维建模的Up主,
精通Matlab,会用Python,超级精通光学三维建模。
E-mail:AICV_Blender2024@163.com
QQ-群:Blender智能三维建模技术:1051208654
复制成功