001    /*
002     * MeanFilter
003     * 
004     * Copyright (c) 2001, 2002, 2003 Marco Schmidt.
005     * All rights reserved.
006     */
007    
008    package net.sourceforge.jiu.filters;
009    
010    import net.sourceforge.jiu.filters.AreaFilterOperation;
011    
012    /**
013     * Applies a mean filter that replaces each pixel by the mean of itself and its neighbors.
014     * The number of neighbors can be defined by the setArea methods.
015     * This filter only works with intensity-based image types.
016     * More precisely, only {@link net.sourceforge.jiu.data.GrayIntegerImage} and
017     * {@link net.sourceforge.jiu.data.RGBIntegerImage} will work.
018     * <h3>Usage example</h3>
019     * <pre>
020     * PixelImage image = ...; // some GrayIntegerImage or RGBIntegerImage
021     * MeanFilter filter = new MeanFilter();
022     * filter.setArea(5, 5);
023     * filter.setInputImage(image);
024     * filter.process();
025     * PixelImage filteredImage = filter.getOutputImage();
026     * </pre>
027     * @since 0.5.0
028     * @author Marco Schmidt
029     */
030    public class MeanFilter extends AreaFilterOperation
031    {
032            public int computeSample(int[] samples, int numSamples)
033            {
034                    int sum = 0;
035                    int index = numSamples;
036                    do
037                    {
038                            sum += samples[--index];
039                    }
040                    while (index != 0);
041                    return sum / numSamples;
042            }
043    }