void
JImageMask::CalcMask
	(
	const JImage&		image,
	const JColorIndex	color
	)
{
	const unsigned long sysColor = image.GetSystemColor(color);

	const JCoordinate w = image.GetWidth();
	const JCoordinate h = image.GetHeight();
	for (JCoordinate y=0; y<h; y++)
		{
		for (JCoordinate x=0; x<w; x++)
			{
			if (image.GetSystemColor(x,y) == sysColor)
				{
				RemovePixel(x,y);
				}
			}
		}
}
Example #2
0
int Lee (StisInfo6 *sts, RowContents *row_cont) {

/* arguments:
StisInfo6 *sts         i:  calibration switches and info
RowContents *row_cont  i:  output row arrays
*/
	short	mask;
	int	ipix, npix, lfilt;
	double	sum, sum2, *hold;

	mask = sts->sdqflags & DETECTORPROB;

	lfilt = sts->lfilter / 2;

	/* Alloc holding buffer. */
	if ((hold = (double *) calloc (row_cont->npts, sizeof (double))) == 
            NULL)
	    return (OUT_OF_MEMORY);

	/* Initialize sums. */
	sum  = 0.0;
	sum2 = 0.0;
	npix = 0;
	for (ipix = 0; ipix <= lfilt; ipix++)
	    AddPixel (ipix, row_cont, mask, &sum, &sum2, &npix);

	/* Compute first filtered value. */
	hold[0] = LSF (sum, sum2, row_cont->back[0], row_cont->error[ipix],
                       npix);

	/* Compute filtered values at first edge. */
	for (ipix = 1; ipix <= lfilt; ipix++) {
	    AddPixel (ipix + lfilt, row_cont, mask, &sum, &sum2, &npix);
	    hold[ipix] = LSF (sum, sum2, row_cont->back[ipix], 
                              row_cont->error[ipix], npix);
	}

	/* Compute filtered values at "internal" region. */
	for (ipix = lfilt+1; ipix <= row_cont->npts-1-lfilt; ipix++) {
	    AddPixel    (ipix + lfilt,     row_cont, mask, &sum, &sum2, &npix);
	    RemovePixel (ipix - lfilt - 1, row_cont, mask, &sum, &sum2, &npix);
	    hold[ipix] = LSF (sum, sum2, row_cont->back[ipix], 
                              row_cont->error[ipix], npix);
	}

	/* Compute filtered values at second edge. */
	for (ipix = row_cont->npts-lfilt; ipix <row_cont->npts; ipix++) {
	    RemovePixel (ipix - lfilt - 1, row_cont, mask, &sum, &sum2, &npix);
	    hold[ipix] = LSF (sum, sum2, row_cont->back[ipix], 
                              row_cont->error[ipix], npix);
	}

	/* Recompute background and net arrays. */
	for (ipix = 0; ipix < row_cont->npts; ipix++) {
	    row_cont->back[ipix] = hold[ipix];
	    row_cont->net[ipix] = row_cont->gross[ipix] - row_cont->back[ipix];
	}

	free (hold);

	return (0);
}