Merge pull request #469 from openmv/add_color_palettes

Add ironbow lookup table
This commit is contained in:
Ibrahim Abd Elkader 2019-03-05 18:20:01 +02:00 committed by GitHub
commit 2944d42bea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 319 additions and 2 deletions

View File

@ -346,6 +346,15 @@ extern const int8_t yuv_table[196608];
#define COLOR_GRAYSCALE_TO_BINARY(pixel) ((pixel) > (((COLOR_GRAYSCALE_MAX - COLOR_GRAYSCALE_MIN) / 2) + COLOR_GRAYSCALE_MIN))
#define COLOR_GRAYSCALE_TO_RGB565(pixel) COLOR_YUV_TO_RGB565((pixel) - 128, 0, 0)
typedef enum {
COLOR_PALETTE_RAINBOW,
COLOR_PALETTE_IRONBOW
} color_palette_t;
// Color palette LUTs
extern const uint16_t rainbow_table[256];
extern const uint16_t ironbow_table[256];
/////////////////
// Image Stuff //
/////////////////

View File

@ -33,3 +33,37 @@ const uint16_t rainbow_table[256] = {
0xA0F9, 0x80F9, 0x60F9, 0x40F9, 0x40F9, 0x20F9, 0x00F9, 0xE0F8,
0xC0F8, 0xC0F8, 0xA0F8, 0x80F8, 0x60F8, 0x40F8, 0x40F8, 0x20F8
};
const uint16_t ironbow_table[256] = {
0xFFFF, 0xFFFF, 0xDFFF, 0xDEF7, 0xBEF7, 0xBEF7, 0x9EF7, 0x9DEF,
0x7DEF, 0x7DEF, 0x5DEF, 0x5CE7, 0x3CE7, 0x3CE7, 0x1CE7, 0x1BDF,
0xFBDE, 0xFBDE, 0xDBDE, 0xDAD6, 0xBAD6, 0xBAD6, 0x9AD6, 0x99CE,
0x79CE, 0x79CE, 0x59CE, 0x58C6, 0x38C6, 0x38C6, 0x18C6, 0x17BE,
0xF7BD, 0xF7BD, 0xD7BD, 0xD6B5, 0xB6B5, 0xB6B5, 0x96B5, 0x96B5,
0x75AD, 0x75AD, 0x55AD, 0x55AD, 0x34A5, 0x34A5, 0x14A5, 0x14A5,
0xF39C, 0xF39C, 0xD39C, 0xD39C, 0xB294, 0xB294, 0x9294, 0x9294,
0x718C, 0x718C, 0x518C, 0x518C, 0x3084, 0x3084, 0x1084, 0x1084,
0xEF7B, 0xEF7B, 0xCF7B, 0xCF7B, 0xAE73, 0xAE73, 0x8E73, 0x8E73,
0x6D6B, 0x6D6B, 0x4D6B, 0x4D6B, 0x2C63, 0x2C63, 0x0C63, 0x0C63,
0xEB5A, 0xEB5A, 0xCB5A, 0xCB5A, 0xAA52, 0xAA52, 0x8A52, 0x8A52,
0x694A, 0x694A, 0x494A, 0x494A, 0x294A, 0x2842, 0x0842, 0x0842,
0xE841, 0xE739, 0xC739, 0xC739, 0xA739, 0xA631, 0x8631, 0x8631,
0x6631, 0x6529, 0x4529, 0x4529, 0x2529, 0x2421, 0x0421, 0x0421,
0xE420, 0xE318, 0xC318, 0xC318, 0xA318, 0xA210, 0x8210, 0x8210,
0x6210, 0x6108, 0x4108, 0x4108, 0x2108, 0x2000, 0x0000, 0x0000,
0x0100, 0x0200, 0x0300, 0x0408, 0x0508, 0x0508, 0x0608, 0x0710,
0x0810, 0x0910, 0x0A18, 0x0B18, 0x0C18, 0x0D18, 0x0D20, 0x0E20,
0x0F20, 0x0F28, 0x0F30, 0x0F30, 0x0F38, 0x0F38, 0x0F40, 0x0F48,
0x1048, 0x1050, 0x1050, 0x1058, 0x1060, 0x1060, 0x1068, 0x1068,
0x1170, 0x1178, 0x1178, 0x1180, 0x3180, 0x3188, 0x3190, 0x3190,
0x3198, 0x3198, 0x31A0, 0x31A0, 0x31A8, 0x31B0, 0x51B0, 0x51B8,
0x51B8, 0x70B8, 0x8FC0, 0xAFC0, 0xAEC0, 0xCDC0, 0xEDC8, 0x0CC9,
0x0CC9, 0x2BC9, 0x4AD1, 0x6AD1, 0x69D1, 0x88D9, 0xA8D9, 0xC7D9,
0xC6D9, 0xE6D9, 0x05DA, 0x25E2, 0x45E2, 0x44E2, 0x64E2, 0x84E2,
0xA4E2, 0xC3E2, 0xE3E2, 0xE3E2, 0x02EB, 0x22EB, 0x42EB, 0x61EB,
0x81EB, 0xA1EB, 0xA1EB, 0xC1EB, 0xE1EB, 0x01EC, 0x21EC, 0x41F4,
0x62F4, 0x82F4, 0xA2F4, 0xC2F4, 0xE2F4, 0x02F5, 0x02F5, 0x22F5,
0x42F5, 0x62F5, 0x82F5, 0xA2F5, 0xC2F5, 0xE2F5, 0xE2F5, 0x03FE,
0x23FE, 0x43FE, 0x63FE, 0x83FE, 0xA3FE, 0xC3FE, 0xC4FE, 0xE4FE,
0x05FF, 0x26FF, 0x28FF, 0x4AFF, 0x4CFF, 0x4DFF, 0x6FFF, 0x71FF,
0x92FF, 0x94FF, 0xB6FF, 0xB7FF, 0xD9FF, 0xDBFF, 0xFDFF, 0xE3FF
};

View File

@ -1091,8 +1091,6 @@ static mp_obj_t py_image_to_rgb565(uint n_args, const mp_obj_t *args, mp_map_t *
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_image_to_rgb565_obj, 1, py_image_to_rgb565);
extern const uint16_t rainbow_table[256];
static mp_obj_t py_image_to_rainbow(uint n_args, const mp_obj_t *args, mp_map_t *kw_args)
{
image_t *arg_img = py_helper_arg_to_image_mutable(args[0]);

276
tools/gen_rainbow.py Executable file → Normal file
View File

@ -25,3 +25,279 @@ for i in range(NUM_COL):
sys.stdout.write(",\n")
else:
sys.stdout.write("\n};\n")
# https://github.com/groupgets/LeptonModule/blob/master/software/v4l2lepton/Palettes.cpp#L7
tup = [
(255, 255, 255),
(253, 253, 253),
(251, 251, 251),
(249, 249, 249),
(247, 247, 247),
(245, 245, 245),
(243, 243, 243),
(241, 241, 241),
(239, 239, 239),
(237, 237, 237),
(235, 235, 235),
(233, 233, 233),
(231, 231, 231),
(229, 229, 229),
(227, 227, 227),
(225, 225, 225),
(223, 223, 223),
(221, 221, 221),
(219, 219, 219),
(217, 217, 217),
(215, 215, 215),
(213, 213, 213),
(211, 211, 211),
(209, 209, 209),
(207, 207, 207),
(205, 205, 205),
(203, 203, 203),
(201, 201, 201),
(199, 199, 199),
(197, 197, 197),
(195, 195, 195),
(193, 193, 193),
(191, 191, 191),
(189, 189, 189),
(187, 187, 187),
(185, 185, 185),
(183, 183, 183),
(181, 181, 181),
(179, 179, 179),
(177, 177, 177),
(175, 175, 175),
(173, 173, 173),
(171, 171, 171),
(169, 169, 169),
(167, 167, 167),
(165, 165, 165),
(163, 163, 163),
(161, 161, 161),
(159, 159, 159),
(157, 157, 157),
(155, 155, 155),
(153, 153, 153),
(151, 151, 151),
(149, 149, 149),
(147, 147, 147),
(145, 145, 145),
(143, 143, 143),
(141, 141, 141),
(139, 139, 139),
(137, 137, 137),
(135, 135, 135),
(133, 133, 133),
(131, 131, 131),
(129, 129, 129),
(126, 126, 126),
(124, 124, 124),
(122, 122, 122),
(120, 120, 120),
(118, 118, 118),
(116, 116, 116),
(114, 114, 114),
(112, 112, 112),
(110, 110, 110),
(108, 108, 108),
(106, 106, 106),
(104, 104, 104),
(102, 102, 102),
(100, 100, 100),
(98, 98, 98),
(96, 96, 96),
(94, 94, 94),
(92, 92, 92),
(90, 90, 90),
(88, 88, 88),
(86, 86, 86),
(84, 84, 84),
(82, 82, 82),
(80, 80, 80),
(78, 78, 78),
(76, 76, 76),
(74, 74, 74),
(72, 72, 72),
(70, 70, 70),
(68, 68, 68),
(66, 66, 66),
(64, 64, 64),
(62, 62, 62),
(60, 60, 60),
(58, 58, 58),
(56, 56, 56),
(54, 54, 54),
(52, 52, 52),
(50, 50, 50),
(48, 48, 48),
(46, 46, 46),
(44, 44, 44),
(42, 42, 42),
(40, 40, 40),
(38, 38, 38),
(36, 36, 36),
(34, 34, 34),
(32, 32, 32),
(30, 30, 30),
(28, 28, 28),
(26, 26, 26),
(24, 24, 24),
(22, 22, 22),
(20, 20, 20),
(18, 18, 18),
(16, 16, 16),
(14, 14, 14),
(12, 12, 12),
(10, 10, 10),
(8, 8, 8),
(6, 6, 6),
(4, 4, 4),
(2, 2, 2),
(0, 0, 0),
(0, 0, 9),
(2, 0, 16),
(4, 0, 24),
(6, 0, 31),
(8, 0, 38),
(10, 0, 45),
(12, 0, 53),
(14, 0, 60),
(17, 0, 67),
(19, 0, 74),
(21, 0, 82),
(23, 0, 89),
(25, 0, 96),
(27, 0, 103),
(29, 0, 111),
(31, 0, 118),
(36, 0, 120),
(41, 0, 121),
(46, 0, 122),
(51, 0, 123),
(56, 0, 124),
(61, 0, 125),
(66, 0, 126),
(71, 0, 127),
(76, 1, 128),
(81, 1, 129),
(86, 1, 130),
(91, 1, 131),
(96, 1, 132),
(101, 1, 133),
(106, 1, 134),
(111, 1, 135),
(116, 1, 136),
(121, 1, 136),
(125, 2, 137),
(130, 2, 137),
(135, 3, 137),
(139, 3, 138),
(144, 3, 138),
(149, 4, 138),
(153, 4, 139),
(158, 5, 139),
(163, 5, 139),
(167, 5, 140),
(172, 6, 140),
(177, 6, 140),
(181, 7, 141),
(186, 7, 141),
(189, 10, 137),
(191, 13, 132),
(194, 16, 127),
(196, 19, 121),
(198, 22, 116),
(200, 25, 111),
(203, 28, 106),
(205, 31, 101),
(207, 34, 95),
(209, 37, 90),
(212, 40, 85),
(214, 43, 80),
(216, 46, 75),
(218, 49, 69),
(221, 52, 64),
(223, 55, 59),
(224, 57, 49),
(225, 60, 47),
(226, 64, 44),
(227, 67, 42),
(228, 71, 39),
(229, 74, 37),
(230, 78, 34),
(231, 81, 32),
(231, 85, 29),
(232, 88, 27),
(233, 92, 24),
(234, 95, 22),
(235, 99, 19),
(236, 102, 17),
(237, 106, 14),
(238, 109, 12),
(239, 112, 12),
(240, 116, 12),
(240, 119, 12),
(241, 123, 12),
(241, 127, 12),
(242, 130, 12),
(242, 134, 12),
(243, 138, 12),
(243, 141, 13),
(244, 145, 13),
(244, 149, 13),
(245, 152, 13),
(245, 156, 13),
(246, 160, 13),
(246, 163, 13),
(247, 167, 13),
(247, 171, 13),
(248, 175, 14),
(248, 178, 15),
(249, 182, 16),
(249, 185, 18),
(250, 189, 19),
(250, 192, 20),
(251, 196, 21),
(251, 199, 22),
(252, 203, 23),
(252, 206, 24),
(253, 210, 25),
(253, 213, 27),
(254, 217, 28),
(254, 220, 29),
(255, 224, 30),
(255, 227, 39),
(255, 229, 53),
(255, 231, 67),
(255, 233, 81),
(255, 234, 95),
(255, 236, 109),
(255, 238, 123),
(255, 240, 137),
(255, 242, 151),
(255, 244, 165),
(255, 246, 179),
(255, 248, 193),
(255, 249, 207),
(255, 251, 221),
(255, 253, 235),
(255, 255, 24)
]
col = [(int(((r*31)+127.5)/255)&0x1F)<<11 |
(int(((g*63)+127.5)/255)&0x3F)<<5 |
(int(((b*31)+127.5)/255)&0x1F) for r,g,b in tup]
sys.stdout.write("const uint16_t ironbow_table[%d] = {\n" % NUM_COL)
for i in range(NUM_COL):
if not (i % 8):
sys.stdout.write(" ")
sys.stdout.write("0x%04X" % (((col[i]&0x00ff)<<8)|((col[i]&0xff00)>>8)))
if (i + 1) % 8:
sys.stdout.write(", ")
elif i != (NUM_COL-1):
sys.stdout.write(",\n")
else:
sys.stdout.write("\n};\n")