001    /*
002     * MaximumFilter
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     * Filter operation that replaces each sample by the maximum value of itself
014     * and its neighbor samples.
015     * <p>
016     * Note that this is not the maximum operation that takes two input images
017     * and, for each position, takes the maximum sample value and writes it 
018     * to output.
019     *
020     * <h3>Usage example</h3>
021     * <pre>
022     * MaximumFilter filter = new MaximumFilter();
023     * filter.setArea(7, 5);
024     * filter.setInputImage(image);
025     * filter.process();
026     * PixelImage filteredImage = filter.getOutputImage();
027     * </pre>
028     * @author Marco Schmidt
029     * @since 0.9.0
030     * @see MinimumFilter
031     */
032    public class MaximumFilter extends AreaFilterOperation
033    {
034            public final int computeSample(int[] samples, int numSamples)
035            {
036                    int max = samples[0];
037                    int index = 1;
038                    while (index < numSamples)
039                    {
040                            int value = samples[index++];
041                            if (value > max)
042                            {
043                                    max = value;
044                            }
045                    }
046                    return max;
047            }
048    }