int unrrdu_flipMain(int argc, char **argv, char *me, hestParm *hparm) { hestOpt *opt = NULL; char *out, *err; Nrrd *nin, *nout; int pret; unsigned int axis; airArray *mop; OPT_ADD_AXIS(axis, "axis to flip along"); OPT_ADD_NIN(nin, "input nrrd"); OPT_ADD_NOUT(out, "output nrrd"); mop = airMopNew(); airMopAdd(mop, opt, (airMopper)hestOptFree, airMopAlways); USAGE(_unrrdu_flipInfoL); PARSE(); airMopAdd(mop, opt, (airMopper)hestParseFree, airMopAlways); nout = nrrdNew(); airMopAdd(mop, nout, (airMopper)nrrdNuke, airMopAlways); if (nrrdFlip(nout, nin, axis)) { airMopAdd(mop, err = biffGetDone(NRRD), airFree, airMopAlways); fprintf(stderr, "%s: error flipping nrrd:\n%s", me, err); airMopError(mop); return 1; } SAVE(out, nout, NULL); airMopOkay(mop); return 0; }
int fixproj(Nrrd *nproj[3], Nrrd *nvol) { char me[]="fixproj", err[BIFF_STRLEN]; airArray *mop; Nrrd *ntmp[3], *nt; int sz[3], ii, map[3], h[3], E, mi; size_t rsz[3]; double vec[3][3], dot[3], sp[3], parm[NRRD_KERNEL_PARMS_NUM]; mop = airMopNew(); if (!( ELL_3V_EXISTS(nvol->axis[0].spaceDirection) && ELL_3V_EXISTS(nvol->axis[1].spaceDirection) && ELL_3V_EXISTS(nvol->axis[2].spaceDirection) )) { sprintf(err, "%s: space directions don't exist for all 3 axes", me); biffAdd(NINSPECT, err); airMopError(mop); return 1; } airMopAdd(mop, nt = nrrdNew(), (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, ntmp[0] = nrrdNew(), (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, ntmp[1] = nrrdNew(), (airMopper)nrrdNuke, airMopAlways); airMopAdd(mop, ntmp[2] = nrrdNew(), (airMopper)nrrdNuke, airMopAlways); /* RL AP SI */ ELL_3V_SET(vec[0], 1, 0, 0); ELL_3V_SET(vec[1], 0, 1, 0); ELL_3V_SET(vec[2], 0, 0, 1); for (ii=0; ii<3; ii++) { dot[0] = ELL_3V_DOT(vec[ii], nvol->axis[0].spaceDirection); dot[1] = ELL_3V_DOT(vec[ii], nvol->axis[1].spaceDirection); dot[2] = ELL_3V_DOT(vec[ii], nvol->axis[2].spaceDirection); dot[0] = AIR_ABS(dot[0]); dot[1] = AIR_ABS(dot[1]); dot[2] = AIR_ABS(dot[2]); map[ii] = ELL_MAX3_IDX(dot[0], dot[1], dot[2]); } ELL_3V_SET(h, 1, 0, 0); E = 0; for (ii=0; ii<3; ii++) { if (h[map[ii]] != map[h[ii]]) { if (!E) E |= nrrdAxesSwap(ntmp[ii], nproj[map[ii]], 1, 2); } else { if (!E) E |= nrrdCopy(ntmp[ii], nproj[map[ii]]); } } if (E) { sprintf(err, "%s: trouble with nrrd operations", me); biffMove(NINSPECT, err, NRRD); airMopError(mop); return 1; } E = 0; if (nvol->axis[map[0]].spaceDirection[0] > 0) { if (!E) E |= nrrdFlip(nt, ntmp[1], 0+1); if (!E) E |= nrrdCopy(ntmp[1], nt); if (!E) E |= nrrdFlip(nt, ntmp[2], 0+1); if (!E) E |= nrrdCopy(ntmp[2], nt); } if (nvol->axis[map[1]].spaceDirection[1] > 0) { if (!E) E |= nrrdFlip(nt, ntmp[0], 0+1); if (!E) E |= nrrdCopy(ntmp[0], nt); if (!E) E |= nrrdFlip(nt, ntmp[2], 1+1); if (!E) E |= nrrdCopy(ntmp[2], nt); } if (nvol->axis[map[2]].spaceDirection[2] > 0) { if (!E) E |= nrrdFlip(nt, ntmp[0], 1+1); if (!E) E |= nrrdCopy(ntmp[0], nt); if (!E) E |= nrrdFlip(nt, ntmp[1], 1+1); if (!E) E |= nrrdCopy(ntmp[1], nt); } if (E) { sprintf(err, "%s: trouble with nrrd operations", me); biffMove(NINSPECT, err, NRRD); airMopError(mop); return 1; } for (ii=0; ii<3; ii++) { sz[ii] = nvol->axis[map[ii]].size; sp[ii] = ELL_3V_LEN(nvol->axis[map[ii]].spaceDirection); } mi = ELL_MIN3_IDX(sp[0], sp[1], sp[2]); sz[0] = (int)(sz[0]*sp[0]/sp[mi]); sz[1] = (int)(sz[1]*sp[1]/sp[mi]); sz[2] = (int)(sz[2]*sp[2]/sp[mi]); parm[0] = 1; ELL_3V_SET(rsz, 3, sz[1], sz[2]); nrrdSimpleResample(nproj[0], ntmp[0], nrrdKernelBox, parm, rsz, NULL); ELL_3V_SET(rsz, 3, sz[0], sz[2]); nrrdSimpleResample(nproj[1], ntmp[1], nrrdKernelBox, parm, rsz, NULL); ELL_3V_SET(rsz, 3, sz[0], sz[1]); nrrdSimpleResample(nproj[2], ntmp[2], nrrdKernelBox, parm, rsz, NULL); airMopOkay(mop); return 0; }
int baneRawScatterplots(Nrrd *nvg, Nrrd *nvh, Nrrd *hvol, int histEq) { Nrrd *gA, *hA, *gB, *hB; char me[]="baneRawScatterplots", err[BIFF_STRLEN]; int E; if (!( nvg && nvh && hvol )) { sprintf(err, "%s: got NULL pointer", me); biffAdd(BANE, err); return 1; } if (baneHVolCheck(hvol)) { sprintf(err, "%s: didn't get a valid histogram volume", me); biffAdd(BANE, err); return 1; } gA = nrrdNew(); gB = nrrdNew(); hA = nrrdNew(); hB = nrrdNew(); /* create initial projections */ E = 0; if (!E) E |= nrrdProject(gA, hvol, 1, nrrdMeasureSum, nrrdTypeDefault); if (!E) E |= nrrdProject(hA, hvol, 0, nrrdMeasureSum, nrrdTypeDefault); if (E) { sprintf(err, "%s: trouble creating raw scatterplots", me); biffMove(BANE, err, NRRD); return 1; } /* do histogram equalization on them */ if (histEq) { if (!E) E |= nrrdHistoEq(gB, gA, NULL, baneStateHistEqBins, baneStateHistEqSmart, 1.0); if (!E) E |= nrrdHistoEq(hB, hA, NULL, baneStateHistEqBins, baneStateHistEqSmart, 1.0); } else { if (!E) E |= nrrdCopy(gB, gA); if (!E) E |= nrrdCopy(hB, hA); } if (E) { sprintf(err, "%s: couldn't histogram equalize or copy", me); biffMove(BANE, err, NRRD); return 1; } /* re-orient them so they look correct on the screen */ if (!E) E |= nrrdAxesSwap(gA, gB, 0, 1); if (!E) E |= nrrdAxesSwap(hA, hB, 0, 1); if (!E) E |= nrrdFlip(gB, gA, 1); if (!E) E |= nrrdFlip(hB, hA, 1); if (E) { sprintf(err, "%s: couldn't re-orient scatterplots", me); biffMove(BANE, err, NRRD); return 1; } if (!E) E |= nrrdCopy(nvg, gB); if (!E) E |= nrrdCopy(nvh, hB); if (E) { sprintf(err, "%s: trouble saving results to given nrrds", me); biffMove(BANE, err, NRRD); return 1; } nrrdNuke(gA); nrrdNuke(gB); nrrdNuke(hA); nrrdNuke(hB); return 0; }