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 }