makeUniformityImage()

in src/engine/actvolume/actvol.js [505:561]


  makeUniformityImage(pixelsSrc, xDim, yDim, zDim, zStart, zEnd, pixelsGrad, pixelsDst, koefAlpha) {
    // radius neighbours
    const TWICE = 2;
    const RAD_UNI = 1;
    const DIA_UNI = 1 + TWICE * RAD_UNI;

    const SCALE_ALL_ELEMS = 1.0 / (DIA_UNI * DIA_UNI * DIA_UNI);
    // let maxLen = 0.0;
    let cx, cy, cz;

    const zs = zStart > RAD_UNI ? zStart : RAD_UNI;
    const ze = zEnd < zDim - RAD_UNI ? zEnd : zDim - RAD_UNI;

    for (cz = zs; cz < ze; cz++) {
      const czOff = cz * xDim * yDim;
      for (cy = RAD_UNI; cy < yDim - RAD_UNI; cy++) {
        const cyOff = cy * xDim;
        for (cx = RAD_UNI; cx < xDim - RAD_UNI; cx++) {
          let sumDx = 0.0;
          let sumDy = 0.0;
          let sumDz = 0.0;
          let dx, dy, dz;

          for (dz = -RAD_UNI; dz <= +RAD_UNI; dz++) {
            const z = cz + dz;
            const zOff = z * xDim * yDim;
            for (dy = -RAD_UNI; dy <= +RAD_UNI; dy++) {
              const y = cy + dy;
              const yOff = y * xDim;
              for (dx = -RAD_UNI; dx <= +RAD_UNI; dx++) {
                const x = cx + dx;
                const offSrc = x + yOff + zOff;
                // if ((offSrc < 0) || (offSrc >= numPixelsVol)) {
                //   console.log('!!! Out of array');
                // }
                const val = pixelsSrc[offSrc];
                sumDx += val * dx;
                sumDy += val * dy;
                sumDz += val * dz;
              } // for (dx)
            } // for (dy)
          } // for (dz)

          sumDx *= SCALE_ALL_ELEMS;
          sumDy *= SCALE_ALL_ELEMS;
          sumDz *= SCALE_ALL_ELEMS;

          // maxLen = (gradLen > maxLen) ? gradLen : maxLen;

          const gradLen = Math.sqrt(sumDx * sumDx + sumDy * sumDy + sumDz * sumDz);
          pixelsGrad[cx + cyOff + czOff] = gradLen;
          pixelsDst[cx + cyOff + czOff] = Math.exp(-koefAlpha * gradLen);
        } // for (cx)
      } // for (cy)
    } // for (cz)
    // console.log(`makeUniformityImage done for z = ${zs} to ${ze}`);
  }