/* * The Npic library * * Copyright (C) 2003 Edouard Thiel * * This library is free software under the terms of the * GNU Lesser General Public License (LGPL) version 2.1. */ /* DO NOT EDIT !!! Generated by npic-templa from "calc_threshold.ct" */ /* * calc_threshold.c - 16/01/2003 * * Threshold on pixel values */ #include /*--------------------- P U B L I C - I N T E R F A C E ----------------------*/ /* * Threshold Less Than : val2 * Set each pixel having value < val1 to the value val2. * * Do not modify border pixels. * Do nothing if np is not ok. set not ok on error. Verbose. */ void NpicThresholdLT_i (Npic_image *np, int val1, int val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2C : { Npic_image_2c *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] < val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_2L : { Npic_image_2l *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] < val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3C : { Npic_image_3c *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] < val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_3L : { Npic_image_3l *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] < val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4C : { Npic_image_4c *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] < val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_4L : { Npic_image_4l *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] < val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5C : { Npic_image_5c *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] < val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_5L : { Npic_image_5l *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] < val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6C : { Npic_image_6c *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] < val1) p1->pix[r][s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6L : { Npic_image_6l *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] < val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdLT_d (Npic_image *np, double val1, double val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2D : { Npic_image_2d *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] < val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3D : { Npic_image_3d *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] < val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4D : { Npic_image_4d *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] < val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5D : { Npic_image_5d *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] < val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6D : { Npic_image_6d *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] < val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdLT_q (Npic_image *np, int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2Q : { Npic_image_2q *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x].a < a1 && p1->pix[y][x].b < b1 && p1->pix[y][x].c < c1 && p1->pix[y][x].d < d1 ) { p1->pix[y][x].a = a2; p1->pix[y][x].b = b2; p1->pix[y][x].c = c2; p1->pix[y][x].d = d2; } return; } case NPIC_IMAGE_3Q : { Npic_image_3q *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x].a < a1 && p1->pix[z][y][x].b < b1 && p1->pix[z][y][x].c < c1 && p1->pix[z][y][x].d < d1 ) { p1->pix[z][y][x].a = a2; p1->pix[z][y][x].b = b2; p1->pix[z][y][x].c = c2; p1->pix[z][y][x].d = d2; } return; } case NPIC_IMAGE_4Q : { Npic_image_4q *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x].a < a1 && p1->pix[t][z][y][x].b < b1 && p1->pix[t][z][y][x].c < c1 && p1->pix[t][z][y][x].d < d1 ) { p1->pix[t][z][y][x].a = a2; p1->pix[t][z][y][x].b = b2; p1->pix[t][z][y][x].c = c2; p1->pix[t][z][y][x].d = d2; } return; } case NPIC_IMAGE_5Q : { Npic_image_5q *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x].a < a1 && p1->pix[s][t][z][y][x].b < b1 && p1->pix[s][t][z][y][x].c < c1 && p1->pix[s][t][z][y][x].d < d1 ) { p1->pix[s][t][z][y][x].a = a2; p1->pix[s][t][z][y][x].b = b2; p1->pix[s][t][z][y][x].c = c2; p1->pix[s][t][z][y][x].d = d2; } return; } case NPIC_IMAGE_6Q : { Npic_image_6q *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x].a < a1 && p1->pix[r][s][t][z][y][x].b < b1 && p1->pix[r][s][t][z][y][x].c < c1 && p1->pix[r][s][t][z][y][x].d < d1 ) { p1->pix[r][s][t][z][y][x].a = a2; p1->pix[r][s][t][z][y][x].b = b2; p1->pix[r][s][t][z][y][x].c = c2; p1->pix[r][s][t][z][y][x].d = d2; } return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } /*----------------------------------------------------------------------------*/ /* * Threshold Less or Equal : val2 * Set each pixel having value <= val1 to the value val2. * * Do not modify border pixels. * Do nothing if np is not ok. set not ok on error. Verbose. */ void NpicThresholdLE_i (Npic_image *np, int val1, int val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2C : { Npic_image_2c *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] <= val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_2L : { Npic_image_2l *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] <= val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3C : { Npic_image_3c *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] <= val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_3L : { Npic_image_3l *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] <= val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4C : { Npic_image_4c *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] <= val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_4L : { Npic_image_4l *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] <= val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5C : { Npic_image_5c *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] <= val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_5L : { Npic_image_5l *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] <= val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6C : { Npic_image_6c *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] <= val1) p1->pix[r][s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6L : { Npic_image_6l *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] <= val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdLE_d (Npic_image *np, double val1, double val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2D : { Npic_image_2d *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] <= val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3D : { Npic_image_3d *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] <= val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4D : { Npic_image_4d *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] <= val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5D : { Npic_image_5d *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] <= val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6D : { Npic_image_6d *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] <= val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdLE_q (Npic_image *np, int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2Q : { Npic_image_2q *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x].a <= a1 && p1->pix[y][x].b <= b1 && p1->pix[y][x].c <= c1 && p1->pix[y][x].d <= d1 ) { p1->pix[y][x].a = a2; p1->pix[y][x].b = b2; p1->pix[y][x].c = c2; p1->pix[y][x].d = d2; } return; } case NPIC_IMAGE_3Q : { Npic_image_3q *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x].a <= a1 && p1->pix[z][y][x].b <= b1 && p1->pix[z][y][x].c <= c1 && p1->pix[z][y][x].d <= d1 ) { p1->pix[z][y][x].a = a2; p1->pix[z][y][x].b = b2; p1->pix[z][y][x].c = c2; p1->pix[z][y][x].d = d2; } return; } case NPIC_IMAGE_4Q : { Npic_image_4q *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x].a <= a1 && p1->pix[t][z][y][x].b <= b1 && p1->pix[t][z][y][x].c <= c1 && p1->pix[t][z][y][x].d <= d1 ) { p1->pix[t][z][y][x].a = a2; p1->pix[t][z][y][x].b = b2; p1->pix[t][z][y][x].c = c2; p1->pix[t][z][y][x].d = d2; } return; } case NPIC_IMAGE_5Q : { Npic_image_5q *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x].a <= a1 && p1->pix[s][t][z][y][x].b <= b1 && p1->pix[s][t][z][y][x].c <= c1 && p1->pix[s][t][z][y][x].d <= d1 ) { p1->pix[s][t][z][y][x].a = a2; p1->pix[s][t][z][y][x].b = b2; p1->pix[s][t][z][y][x].c = c2; p1->pix[s][t][z][y][x].d = d2; } return; } case NPIC_IMAGE_6Q : { Npic_image_6q *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x].a <= a1 && p1->pix[r][s][t][z][y][x].b <= b1 && p1->pix[r][s][t][z][y][x].c <= c1 && p1->pix[r][s][t][z][y][x].d <= d1 ) { p1->pix[r][s][t][z][y][x].a = a2; p1->pix[r][s][t][z][y][x].b = b2; p1->pix[r][s][t][z][y][x].c = c2; p1->pix[r][s][t][z][y][x].d = d2; } return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } /*----------------------------------------------------------------------------*/ /* * Threshold Greater Than : >val1 -> val2 * Set each pixel having value > val1 to the value val2. * * Do not modify border pixels. * Do nothing if np is not ok. set not ok on error. Verbose. */ void NpicThresholdGT_i (Npic_image *np, int val1, int val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2C : { Npic_image_2c *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] > val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_2L : { Npic_image_2l *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] > val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3C : { Npic_image_3c *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] > val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_3L : { Npic_image_3l *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] > val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4C : { Npic_image_4c *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] > val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_4L : { Npic_image_4l *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] > val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5C : { Npic_image_5c *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] > val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_5L : { Npic_image_5l *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] > val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6C : { Npic_image_6c *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] > val1) p1->pix[r][s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6L : { Npic_image_6l *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] > val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdGT_d (Npic_image *np, double val1, double val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2D : { Npic_image_2d *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] > val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3D : { Npic_image_3d *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] > val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4D : { Npic_image_4d *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] > val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5D : { Npic_image_5d *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] > val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6D : { Npic_image_6d *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] > val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdGT_q (Npic_image *np, int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2Q : { Npic_image_2q *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x].a > a1 && p1->pix[y][x].b > b1 && p1->pix[y][x].c > c1 && p1->pix[y][x].d > d1 ) { p1->pix[y][x].a = a2; p1->pix[y][x].b = b2; p1->pix[y][x].c = c2; p1->pix[y][x].d = d2; } return; } case NPIC_IMAGE_3Q : { Npic_image_3q *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x].a > a1 && p1->pix[z][y][x].b > b1 && p1->pix[z][y][x].c > c1 && p1->pix[z][y][x].d > d1 ) { p1->pix[z][y][x].a = a2; p1->pix[z][y][x].b = b2; p1->pix[z][y][x].c = c2; p1->pix[z][y][x].d = d2; } return; } case NPIC_IMAGE_4Q : { Npic_image_4q *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x].a > a1 && p1->pix[t][z][y][x].b > b1 && p1->pix[t][z][y][x].c > c1 && p1->pix[t][z][y][x].d > d1 ) { p1->pix[t][z][y][x].a = a2; p1->pix[t][z][y][x].b = b2; p1->pix[t][z][y][x].c = c2; p1->pix[t][z][y][x].d = d2; } return; } case NPIC_IMAGE_5Q : { Npic_image_5q *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x].a > a1 && p1->pix[s][t][z][y][x].b > b1 && p1->pix[s][t][z][y][x].c > c1 && p1->pix[s][t][z][y][x].d > d1 ) { p1->pix[s][t][z][y][x].a = a2; p1->pix[s][t][z][y][x].b = b2; p1->pix[s][t][z][y][x].c = c2; p1->pix[s][t][z][y][x].d = d2; } return; } case NPIC_IMAGE_6Q : { Npic_image_6q *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x].a > a1 && p1->pix[r][s][t][z][y][x].b > b1 && p1->pix[r][s][t][z][y][x].c > c1 && p1->pix[r][s][t][z][y][x].d > d1 ) { p1->pix[r][s][t][z][y][x].a = a2; p1->pix[r][s][t][z][y][x].b = b2; p1->pix[r][s][t][z][y][x].c = c2; p1->pix[r][s][t][z][y][x].d = d2; } return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } /*----------------------------------------------------------------------------*/ /* * Threshold Greater or Equal : >=val1 -> val2 * Set each pixel having value >= val1 to the value val2. * * Do not modify border pixels. * Do nothing if np is not ok. set not ok on error. Verbose. */ void NpicThresholdGE_i (Npic_image *np, int val1, int val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2C : { Npic_image_2c *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] >= val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_2L : { Npic_image_2l *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] >= val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3C : { Npic_image_3c *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] >= val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_3L : { Npic_image_3l *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] >= val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4C : { Npic_image_4c *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] >= val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_4L : { Npic_image_4l *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] >= val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5C : { Npic_image_5c *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] >= val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_5L : { Npic_image_5l *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] >= val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6C : { Npic_image_6c *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] >= val1) p1->pix[r][s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6L : { Npic_image_6l *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] >= val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdGE_d (Npic_image *np, double val1, double val2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2D : { Npic_image_2d *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x] >= val1) p1->pix[y][x] = val2; return; } case NPIC_IMAGE_3D : { Npic_image_3d *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x] >= val1) p1->pix[z][y][x] = val2; return; } case NPIC_IMAGE_4D : { Npic_image_4d *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x] >= val1) p1->pix[t][z][y][x] = val2; return; } case NPIC_IMAGE_5D : { Npic_image_5d *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x] >= val1) p1->pix[s][t][z][y][x] = val2; return; } case NPIC_IMAGE_6D : { Npic_image_6d *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x] >= val1) p1->pix[r][s][t][z][y][x] = val2; return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } void NpicThresholdGE_q (Npic_image *np, int a1, int b1, int c1, int d1, int a2, int b2, int c2, int d2) { if (NpicImageIsOK (np, __func__) != NPIC_SUCCESS) return; switch (np->type) { case NPIC_IMAGE_2Q : { Npic_image_2q *p1 = NpicCastImage(np); int y, x; for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[y][x].a >= a1 && p1->pix[y][x].b >= b1 && p1->pix[y][x].c >= c1 && p1->pix[y][x].d >= d1 ) { p1->pix[y][x].a = a2; p1->pix[y][x].b = b2; p1->pix[y][x].c = c2; p1->pix[y][x].d = d2; } return; } case NPIC_IMAGE_3Q : { Npic_image_3q *p1 = NpicCastImage(np); int z, y, x; for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[z][y][x].a >= a1 && p1->pix[z][y][x].b >= b1 && p1->pix[z][y][x].c >= c1 && p1->pix[z][y][x].d >= d1 ) { p1->pix[z][y][x].a = a2; p1->pix[z][y][x].b = b2; p1->pix[z][y][x].c = c2; p1->pix[z][y][x].d = d2; } return; } case NPIC_IMAGE_4Q : { Npic_image_4q *p1 = NpicCastImage(np); int t, z, y, x; for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[t][z][y][x].a >= a1 && p1->pix[t][z][y][x].b >= b1 && p1->pix[t][z][y][x].c >= c1 && p1->pix[t][z][y][x].d >= d1 ) { p1->pix[t][z][y][x].a = a2; p1->pix[t][z][y][x].b = b2; p1->pix[t][z][y][x].c = c2; p1->pix[t][z][y][x].d = d2; } return; } case NPIC_IMAGE_5Q : { Npic_image_5q *p1 = NpicCastImage(np); int s, t, z, y, x; for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[s][t][z][y][x].a >= a1 && p1->pix[s][t][z][y][x].b >= b1 && p1->pix[s][t][z][y][x].c >= c1 && p1->pix[s][t][z][y][x].d >= d1 ) { p1->pix[s][t][z][y][x].a = a2; p1->pix[s][t][z][y][x].b = b2; p1->pix[s][t][z][y][x].c = c2; p1->pix[s][t][z][y][x].d = d2; } return; } case NPIC_IMAGE_6Q : { Npic_image_6q *p1 = NpicCastImage(np); int r, s, t, z, y, x; for (r = 0; r < p1->rmax; r++) for (s = 0; s < p1->smax; s++) for (t = 0; t < p1->tmax; t++) for (z = 0; z < p1->zmax; z++) for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) if (p1->pix[r][s][t][z][y][x].a >= a1 && p1->pix[r][s][t][z][y][x].b >= b1 && p1->pix[r][s][t][z][y][x].c >= c1 && p1->pix[r][s][t][z][y][x].d >= d1 ) { p1->pix[r][s][t][z][y][x].a = a2; p1->pix[r][s][t][z][y][x].b = b2; p1->pix[r][s][t][z][y][x].c = c2; p1->pix[r][s][t][z][y][x].d = d2; } return; } default : np->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } /*----------------------------------------------------------------------------*/