py_image: Add new depth palette.

This commit is contained in:
Kwabena W. Agyeman 2024-10-21 13:01:35 -07:00
parent f6e0aed109
commit 3e99ef0ceb
9 changed files with 82 additions and 8 deletions

View File

@ -28,7 +28,7 @@ while True:
hint=image.BILINEAR, hint=image.BILINEAR,
scale=(0, 4000), scale=(0, 4000),
copy_to_fb=True, copy_to_fb=True,
color_palette=tof.PALETTE_IRONBOW, color_palette=image.PALETTE_DEPTH,
) )
img.flush() img.flush()
except RuntimeError as e: except RuntimeError as e:

View File

@ -41,7 +41,7 @@ while True:
hint=image.BILINEAR, hint=image.BILINEAR,
alpha=100, alpha=100,
scale=(0, 4000), scale=(0, 4000),
color_palette=tof.PALETTE_RAINBOW, color_palette=image.PALETTE_DEPTH,
) )
# Draw min and max distance. # Draw min and max distance.

View File

@ -375,6 +375,7 @@ extern const int8_t lab_table[196608 / 2];
typedef enum { typedef enum {
COLOR_PALETTE_RAINBOW, COLOR_PALETTE_RAINBOW,
COLOR_PALETTE_IRONBOW, COLOR_PALETTE_IRONBOW,
COLOR_PALETTE_DEPTH,
COLOR_PALETTE_EVT_DARK, COLOR_PALETTE_EVT_DARK,
COLOR_PALETTE_EVT_LIGHT COLOR_PALETTE_EVT_LIGHT
} color_palette_t; } color_palette_t;
@ -382,6 +383,7 @@ typedef enum {
// Color palette LUTs // Color palette LUTs
extern const uint16_t rainbow_table[256]; extern const uint16_t rainbow_table[256];
extern const uint16_t ironbow_table[256]; extern const uint16_t ironbow_table[256];
extern const uint16_t depth_table[256];
extern const uint16_t evt_dark_table[256]; extern const uint16_t evt_dark_table[256];
extern const uint16_t evt_light_table[256]; extern const uint16_t evt_light_table[256];

View File

@ -1,4 +1,38 @@
#include <stdint.h> #include <stdint.h>
const uint16_t depth_table[256] = {
0xF820, 0xF840, 0xF840, 0xF860, 0xF880, 0xF8A0, 0xF8C0, 0xF8C0,
0xF8E0, 0xF900, 0xF920, 0xF940, 0xF940, 0xF960, 0xF980, 0xF9A0,
0xF9A0, 0xF9C0, 0xF9E0, 0xFA00, 0xFA20, 0xFA20, 0xFA40, 0xFA60,
0xFA80, 0xFAA0, 0xFAA0, 0xFAC0, 0xFAE0, 0xFB00, 0xFB20, 0xFB20,
0xFB40, 0xFB60, 0xFB80, 0xFBA0, 0xFBA0, 0xFBC0, 0xFBE0, 0xFC00,
0xFC20, 0xFC20, 0xFC40, 0xFC60, 0xFC80, 0xFCA0, 0xFCA0, 0xFCC0,
0xFCE0, 0xFD00, 0xFD00, 0xFD20, 0xFD40, 0xFD60, 0xFD80, 0xFD80,
0xFDA0, 0xFDC0, 0xFDE0, 0xFE00, 0xFE00, 0xFE20, 0xFE40, 0xFE60,
0xFE80, 0xFE80, 0xFEA0, 0xFEC0, 0xFEE0, 0xFF00, 0xFF00, 0xFF20,
0xFF40, 0xFF60, 0xFF80, 0xFF80, 0xFFA0, 0xFFC0, 0xFFE0, 0xFFE0,
0xF7E0, 0xF7E0, 0xF7E0, 0xEFE0, 0xEFE0, 0xE7E0, 0xE7E0, 0xE7E0,
0xDFE0, 0xDFE0, 0xD7E0, 0xD7E0, 0xD7E0, 0xCFE0, 0xCFE0, 0xC7E0,
0xC7E0, 0xC7E0, 0xBFE0, 0xBFE0, 0xBFE0, 0xB7E0, 0xB7E0, 0xAFE0,
0xAFE0, 0xAFE0, 0xA7E0, 0xA7E0, 0x9FE0, 0x9FE0, 0x9FE0, 0x97E0,
0x97E0, 0x8FE0, 0x8FE0, 0x8FE0, 0x87E0, 0x87E0, 0x87E0, 0x7FE0,
0x7FE0, 0x77E0, 0x77E0, 0x77E0, 0x6FE0, 0x6FE0, 0x67E0, 0x67E0,
0x67E0, 0x5FE0, 0x5FE0, 0x57E0, 0x57E0, 0x57E0, 0x4FE0, 0x4FE0,
0x47E0, 0x47E0, 0x47E0, 0x3FE0, 0x3FE0, 0x3FE0, 0x37E0, 0x37E0,
0x2FE0, 0x2FE0, 0x2FE0, 0x27E0, 0x27E0, 0x1FE0, 0x1FE0, 0x1FE0,
0x17E0, 0x17E0, 0x0FE0, 0x0FE0, 0x0FE0, 0x07E0, 0x07E0, 0x07E1,
0x07E1, 0x07E1, 0x07E2, 0x07E2, 0x07E2, 0x07E3, 0x07E3, 0x07E4,
0x07E4, 0x07E4, 0x07E5, 0x07E5, 0x07E6, 0x07E6, 0x07E6, 0x07E7,
0x07E7, 0x07E8, 0x07E8, 0x07E8, 0x07E9, 0x07E9, 0x07EA, 0x07EA,
0x07EA, 0x07EB, 0x07EB, 0x07EB, 0x07EC, 0x07EC, 0x07ED, 0x07ED,
0x07ED, 0x07EE, 0x07EE, 0x07EF, 0x07EF, 0x07EF, 0x07F0, 0x07F0,
0x07F1, 0x07F1, 0x07F1, 0x07F2, 0x07F2, 0x07F2, 0x07F3, 0x07F3,
0x07F4, 0x07F4, 0x07F4, 0x07F5, 0x07F5, 0x07F6, 0x07F6, 0x07F6,
0x07F7, 0x07F7, 0x07F8, 0x07F8, 0x07F8, 0x07F9, 0x07F9, 0x07FA,
0x07FA, 0x07FA, 0x07FB, 0x07FB, 0x07FB, 0x07FC, 0x07FC, 0x07FD,
0x07FD, 0x07FD, 0x07FE, 0x07FE, 0x07FF, 0x07FF, 0x07DF, 0x07BF,
0x07BF, 0x079F, 0x077F, 0x075F, 0x073F, 0x073F, 0x071F, 0x06FF,
0x06DF, 0x06BF, 0x06BF, 0x069F, 0x067F, 0x065F, 0x063F, 0x063F
};
const uint16_t rainbow_table[256] = { const uint16_t rainbow_table[256] = {
0x063F, 0x063F, 0x065F, 0x067F, 0x069F, 0x06BF, 0x06BF, 0x06DF, 0x063F, 0x063F, 0x065F, 0x067F, 0x069F, 0x06BF, 0x06BF, 0x06DF,
0x06FF, 0x071F, 0x073F, 0x073F, 0x075F, 0x077F, 0x079F, 0x07BF, 0x06FF, 0x071F, 0x073F, 0x073F, 0x075F, 0x077F, 0x079F, 0x07BF,

View File

@ -1038,6 +1038,11 @@ static mp_obj_t py_omv_csi_set_color_palette(mp_obj_t palette_obj) {
case COLOR_PALETTE_IRONBOW: case COLOR_PALETTE_IRONBOW:
omv_csi_set_color_palette(ironbow_table); omv_csi_set_color_palette(ironbow_table);
break; break;
#if (MICROPY_PY_TOF == 1)
case COLOR_PALETTE_DEPTH:
omv_csi_set_color_palette(depth_table);
break;
#endif // MICROPY_PY_TOF == 1
#if (OMV_GENX320_ENABLE == 1) #if (OMV_GENX320_ENABLE == 1)
case COLOR_PALETTE_EVT_DARK: case COLOR_PALETTE_EVT_DARK:
omv_csi_set_color_palette(evt_dark_table); omv_csi_set_color_palette(evt_dark_table);
@ -1060,6 +1065,10 @@ static mp_obj_t py_omv_csi_get_color_palette() {
return mp_obj_new_int(COLOR_PALETTE_RAINBOW); return mp_obj_new_int(COLOR_PALETTE_RAINBOW);
} else if (palette == ironbow_table) { } else if (palette == ironbow_table) {
return mp_obj_new_int(COLOR_PALETTE_IRONBOW); return mp_obj_new_int(COLOR_PALETTE_IRONBOW);
#if (MICROPY_PY_TOF == 1)
} else if (palette == depth_table) {
return mp_obj_new_int(COLOR_PALETTE_DEPTH);
#endif // MICROPY_PY_TOF == 1
#if (OMV_GENX320_ENABLE == 1) #if (OMV_GENX320_ENABLE == 1)
} else if (palette == evt_dark_table) { } else if (palette == evt_dark_table) {
return mp_obj_new_int(COLOR_PALETTE_EVT_DARK); return mp_obj_new_int(COLOR_PALETTE_EVT_DARK);

View File

@ -78,6 +78,10 @@ const void *py_helper_arg_to_palette(const mp_obj_t arg, uint32_t pixfmt) {
palette = rainbow_table; palette = rainbow_table;
} else if (type == COLOR_PALETTE_IRONBOW) { } else if (type == COLOR_PALETTE_IRONBOW) {
palette = ironbow_table; palette = ironbow_table;
#if (MICROPY_PY_TOF == 1)
} else if (type == COLOR_PALETTE_DEPTH) {
palette = depth_table;
#endif // MICROPY_PY_TOF == 1
#if (OMV_GENX320_ENABLE == 1) #if (OMV_GENX320_ENABLE == 1)
} else if (type == COLOR_PALETTE_EVT_DARK) { } else if (type == COLOR_PALETTE_EVT_DARK) {
palette = evt_dark_table; palette = evt_dark_table;
@ -484,6 +488,10 @@ const uint16_t *py_helper_keyword_color_palette(uint n_args, const mp_obj_t *arg
default_color_palette = rainbow_table; default_color_palette = rainbow_table;
} else if (palette == COLOR_PALETTE_IRONBOW) { } else if (palette == COLOR_PALETTE_IRONBOW) {
default_color_palette = ironbow_table; default_color_palette = ironbow_table;
#if (MICROPY_PY_TOF == 1)
} else if (palette == COLOR_PALETTE_DEPTH) {
default_color_palette = depth_table;
#endif // MICROPY_PY_TOF == 1
#if (OMV_GENX320_ENABLE == 1) #if (OMV_GENX320_ENABLE == 1)
} else if (palette == COLOR_PALETTE_EVT_DARK) { } else if (palette == COLOR_PALETTE_EVT_DARK) {
default_color_palette = evt_dark_table; default_color_palette = evt_dark_table;

View File

@ -1210,6 +1210,13 @@ static mp_obj_t py_image_to_ironbow(uint n_args, const mp_obj_t *args, mp_map_t
} }
static MP_DEFINE_CONST_FUN_OBJ_KW(py_image_to_ironbow_obj, 1, py_image_to_ironbow); static MP_DEFINE_CONST_FUN_OBJ_KW(py_image_to_ironbow_obj, 1, py_image_to_ironbow);
#if (MICROPY_PY_TOF == 1)
static mp_obj_t py_image_to_depth(uint n_args, const mp_obj_t *args, mp_map_t *kw_args) {
return py_image_to(PIXFORMAT_RGB565, MP_ROM_INT(COLOR_PALETTE_DEPTH), false, n_args, args, kw_args);
}
static MP_DEFINE_CONST_FUN_OBJ_KW(py_image_to_depth_obj, 1, py_image_to_depth);
#endif // MICROPY_PY_TOF == 1
#if (OMV_GENX320_ENABLE == 1) #if (OMV_GENX320_ENABLE == 1)
static mp_obj_t py_image_to_evt_dark(uint n_args, const mp_obj_t *args, mp_map_t *kw_args) { static mp_obj_t py_image_to_evt_dark(uint n_args, const mp_obj_t *args, mp_map_t *kw_args) {
return py_image_to(PIXFORMAT_RGB565, MP_ROM_INT(COLOR_PALETTE_EVT_DARK), false, n_args, args, kw_args); return py_image_to(PIXFORMAT_RGB565, MP_ROM_INT(COLOR_PALETTE_EVT_DARK), false, n_args, args, kw_args);
@ -6245,6 +6252,9 @@ static const mp_rom_map_elem_t locals_dict_table[] = {
{MP_ROM_QSTR(MP_QSTR_to_rgb565), MP_ROM_PTR(&py_image_to_rgb565_obj)}, {MP_ROM_QSTR(MP_QSTR_to_rgb565), MP_ROM_PTR(&py_image_to_rgb565_obj)},
{MP_ROM_QSTR(MP_QSTR_to_rainbow), MP_ROM_PTR(&py_image_to_rainbow_obj)}, {MP_ROM_QSTR(MP_QSTR_to_rainbow), MP_ROM_PTR(&py_image_to_rainbow_obj)},
{MP_ROM_QSTR(MP_QSTR_to_ironbow), MP_ROM_PTR(&py_image_to_ironbow_obj)}, {MP_ROM_QSTR(MP_QSTR_to_ironbow), MP_ROM_PTR(&py_image_to_ironbow_obj)},
#if (MICROPY_PY_TOF == 1)
{MP_ROM_QSTR(MP_QSTR_to_depth), MP_ROM_PTR(&py_image_to_depth_obj)},
#endif // MICROPY_PY_TOF == 1
#if (OMV_GENX320_ENABLE == 1) #if (OMV_GENX320_ENABLE == 1)
{MP_ROM_QSTR(MP_QSTR_to_evt_dark), MP_ROM_PTR(&py_image_to_evt_dark_obj)}, {MP_ROM_QSTR(MP_QSTR_to_evt_dark), MP_ROM_PTR(&py_image_to_evt_dark_obj)},
{MP_ROM_QSTR(MP_QSTR_to_evt_light), MP_ROM_PTR(&py_image_to_evt_light_obj)}, {MP_ROM_QSTR(MP_QSTR_to_evt_light), MP_ROM_PTR(&py_image_to_evt_light_obj)},
@ -7058,6 +7068,9 @@ static const mp_rom_map_elem_t globals_dict_table[] = {
{MP_ROM_QSTR(MP_QSTR_PNG), MP_ROM_INT(PIXFORMAT_PNG)}, /* PNG/COMPRESSED*/ {MP_ROM_QSTR(MP_QSTR_PNG), MP_ROM_INT(PIXFORMAT_PNG)}, /* PNG/COMPRESSED*/
{MP_ROM_QSTR(MP_QSTR_PALETTE_RAINBOW), MP_ROM_INT(COLOR_PALETTE_RAINBOW)}, {MP_ROM_QSTR(MP_QSTR_PALETTE_RAINBOW), MP_ROM_INT(COLOR_PALETTE_RAINBOW)},
{MP_ROM_QSTR(MP_QSTR_PALETTE_IRONBOW), MP_ROM_INT(COLOR_PALETTE_IRONBOW)}, {MP_ROM_QSTR(MP_QSTR_PALETTE_IRONBOW), MP_ROM_INT(COLOR_PALETTE_IRONBOW)},
#if (MICROPY_PY_TOF == 1)
{MP_ROM_QSTR(MP_QSTR_PALETTE_DEPTH), MP_ROM_INT(COLOR_PALETTE_DEPTH)},
#endif // MICROPY_PY_TOF == 1
#if (OMV_GENX320_ENABLE == 1) #if (OMV_GENX320_ENABLE == 1)
{MP_ROM_QSTR(MP_QSTR_PALETTE_EVT_DARK), MP_ROM_INT(COLOR_PALETTE_EVT_DARK)}, {MP_ROM_QSTR(MP_QSTR_PALETTE_EVT_DARK), MP_ROM_INT(COLOR_PALETTE_EVT_DARK)},
{MP_ROM_QSTR(MP_QSTR_PALETTE_EVT_LIGHT), MP_ROM_INT(COLOR_PALETTE_EVT_LIGHT)}, {MP_ROM_QSTR(MP_QSTR_PALETTE_EVT_LIGHT), MP_ROM_INT(COLOR_PALETTE_EVT_LIGHT)},

View File

@ -404,7 +404,7 @@ mp_obj_t py_tof_draw_depth(uint n_args, const mp_obj_t *pos_args, mp_map_t *kw_a
{ MP_QSTR_roi, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} }, { MP_QSTR_roi, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
{ MP_QSTR_rgb_channel, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = -1 } }, { MP_QSTR_rgb_channel, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = -1 } },
{ MP_QSTR_alpha, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 256 } }, { MP_QSTR_alpha, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 256 } },
{ MP_QSTR_color_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_INT(COLOR_PALETTE_RAINBOW)} }, { MP_QSTR_color_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_INT(COLOR_PALETTE_DEPTH)} },
{ MP_QSTR_alpha_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} }, { MP_QSTR_alpha_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
{ MP_QSTR_hint, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0 } }, { MP_QSTR_hint, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0 } },
{ MP_QSTR_scale, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} }, { MP_QSTR_scale, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
@ -480,7 +480,7 @@ mp_obj_t py_tof_snapshot(uint n_args, const mp_obj_t *pos_args, mp_map_t *kw_arg
{ MP_QSTR_roi, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} }, { MP_QSTR_roi, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
{ MP_QSTR_rgb_channel, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = -1 } }, { MP_QSTR_rgb_channel, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = -1 } },
{ MP_QSTR_alpha, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 256 } }, { MP_QSTR_alpha, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 256 } },
{ MP_QSTR_color_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_INT(COLOR_PALETTE_RAINBOW)} }, { MP_QSTR_color_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_INT(COLOR_PALETTE_DEPTH)} },
{ MP_QSTR_alpha_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} }, { MP_QSTR_alpha_palette, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
{ MP_QSTR_hint, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0 } }, { MP_QSTR_hint, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0 } },
{ MP_QSTR_scale, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} }, { MP_QSTR_scale, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = MP_ROM_NONE} },
@ -578,10 +578,6 @@ static const mp_rom_map_elem_t globals_dict_table[] = {
#if (OMV_TOF_VL53L5CX_ENABLE == 1) #if (OMV_TOF_VL53L5CX_ENABLE == 1)
{ MP_ROM_QSTR(MP_QSTR_TOF_VL53L5CX), MP_ROM_INT(TOF_VL53L5CX) }, { MP_ROM_QSTR(MP_QSTR_TOF_VL53L5CX), MP_ROM_INT(TOF_VL53L5CX) },
#endif #endif
{ MP_ROM_QSTR(MP_QSTR_PALETTE_RAINBOW), MP_ROM_INT(COLOR_PALETTE_RAINBOW) },
{ MP_ROM_QSTR(MP_QSTR_PALETTE_IRONBOW), MP_ROM_INT(COLOR_PALETTE_IRONBOW) },
{ MP_ROM_QSTR(MP_QSTR_GRAYSCALE), MP_ROM_INT(PIXFORMAT_GRAYSCALE) },
{ MP_ROM_QSTR(MP_QSTR_RGB565), MP_ROM_INT(PIXFORMAT_RGB565) },
{ MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&py_tof_init_obj) }, { MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&py_tof_init_obj) },
{ MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&py_tof_init_obj) }, { MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&py_tof_init_obj) },
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&py_tof_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&py_tof_deinit_obj) },

View File

@ -48,6 +48,18 @@ col = [(int((((r*255)*31)+127.5)/255)&0x1F)<<11 |
(int((((g*255)*63)+127.5)/255)&0x3F)<<5 | (int((((g*255)*63)+127.5)/255)&0x3F)<<5 |
(int((((b*255)*31)+127.5)/255)&0x1F) for r,g,b in tup] (int((((b*255)*31)+127.5)/255)&0x1F) for r,g,b in tup]
sys.stdout.write("const uint16_t depth_table[%d] = {\n" % NUM_COL)
for i in range(NUM_COL):
if not (i % 8):
sys.stdout.write(" ")
sys.stdout.write("0x%04X" % col[255-i])
if (i + 1) % 8:
sys.stdout.write(", ")
elif i != (NUM_COL-1):
sys.stdout.write(",\n")
else:
sys.stdout.write("\n};\n")
sys.stdout.write("const uint16_t rainbow_table[%d] = {\n" % NUM_COL) sys.stdout.write("const uint16_t rainbow_table[%d] = {\n" % NUM_COL)
for i in range(NUM_COL): for i in range(NUM_COL):
if not (i % 8): if not (i % 8):