// Path: colormine/src/main/org/colormine/image/profile/ColorProfile.java
// public class ColorProfile implements Profile<Color> {
// 
// 	private Map<Color, Integer> _colors = new HashMap<Color, Integer>();
// 	private int _total = 0;
// 
// 	public ColorProfile() {
// 	}
// 
// 	public ColorProfile(Image image) {
// 		int width = image.getWidth();
// 		int height = image.getHeight();
// 
// 		for (int y = 0; y < height; y++) {
// 			for (int x = 0; x < width; x++) {
// 				Color color = new Color(image.getRGB(x, y));
// 				put(color);
// 			}
// 		}
// 	}
// 
// 	public ColorProfile(Map<Color, Integer> colors) {
// 		Iterator<Map.Entry<Color, Integer>> color = colors.entrySet().iterator();
// 		while (color.hasNext()) {
// 			Map.Entry<Color, Integer> pairs = (Map.Entry<Color, Integer>) color.next();
// 			put(pairs.getKey(), pairs.getValue());
// 		}
// 	}
// 
// 	public ColorProfile(Profile<Color> colors) {
// 		Iterator<Map.Entry<Color, Integer>> color = colors.entrySet().iterator();
// 		while (color.hasNext()) {
// 			Map.Entry<Color, Integer> pairs = (Map.Entry<Color, Integer>) color.next();
// 			put(pairs.getKey(), pairs.getValue());
// 		}
// 	}
// 
// 	@Override
// 	public void put(Color key) {
// 		int count = get(key) + 1;
// 		_colors.put(key, count);
// 		_total += count;
// 	}
// 
// 	@Override
// 	public void put(Color key, int count) {
// 		_colors.put(key, count);
// 		_total += count;
// 	}
// 
// 	@Override
// 	public int get(Color key) {
// 		return _colors.containsKey(key) ? _colors.get(key) : 0;
// 	}
// 
// 	@Override
// 	public int getTotal() {
// 		return _total;
// 	}
// 
// 	@Override
// 	public int size() {
// 		return _colors.size();
// 	}
// 
// 	@Override
// 	public Set<Entry<Color, Integer>> entrySet() {
// 		return _colors.entrySet();
// 	}
// 
// 	@Override
// 	public Set<Color> keySet() {
// 		return _colors.keySet();
// 	}
// }
// 
// Path: colormine/src/main/org/colormine/image/profile/Profile.java
// public interface Profile<K> {
// 	/*
// 	 * Tracks an item
// 	 */
// 	void put(K key);
// 
// 	/*
// 	 * Tracks an item
// 	 */
// 	void put(K key, int count);
// 
// 	/*
// 	 * Returns the number of times an item has been recorded
// 	 */
// 	int get(K key);
// 
// 	/*
// 	 * Returns the sum of all items that have been recorded
// 	 */
// 	int getTotal();
// 
// 	/*
// 	 * Returns the count of all distinct items that have been recorded
// 	 */
// 	int size();
// 
// 	Set<Entry<K, Integer>> entrySet();
// 
// 	Set<K> keySet();
// 
// }


import java.awt.Color;
import org.colormine.image.profile.ColorProfile;
import org.colormine.image.profile.Profile;
package org.colormine.image.profile.filter;



/**
 * Removes colors that make up less than a given percentage of the image This is
 * best done after using something like the MapFilter to 'condense' the palette
 */

public final class OutlierFilter implements Filter<Profile<Color>> {

	private final int _percentage;

	public OutlierFilter(int threshHoldPercentage) {
		_percentage = threshHoldPercentage;
	}

	public FilterResult<Profile<Color>> apply(Profile<Color> colors) {
// Path: colormine/src/main/org/colormine/image/profile/ColorProfile.java
// public class ColorProfile implements Profile<Color> {
// 
// 	private Map<Color, Integer> _colors = new HashMap<Color, Integer>();
// 	private int _total = 0;
// 
// 	public ColorProfile() {
// 	}
// 
// 	public ColorProfile(Image image) {
// 		int width = image.getWidth();
// 		int height = image.getHeight();
// 
// 		for (int y = 0; y < height; y++) {
// 			for (int x = 0; x < width; x++) {
// 				Color color = new Color(image.getRGB(x, y));
// 				put(color);
// 			}
// 		}
// 	}
// 
// 	public ColorProfile(Map<Color, Integer> colors) {
// 		Iterator<Map.Entry<Color, Integer>> color = colors.entrySet().iterator();
// 		while (color.hasNext()) {
// 			Map.Entry<Color, Integer> pairs = (Map.Entry<Color, Integer>) color.next();
// 			put(pairs.getKey(), pairs.getValue());
// 		}
// 	}
// 
// 	public ColorProfile(Profile<Color> colors) {
// 		Iterator<Map.Entry<Color, Integer>> color = colors.entrySet().iterator();
// 		while (color.hasNext()) {
// 			Map.Entry<Color, Integer> pairs = (Map.Entry<Color, Integer>) color.next();
// 			put(pairs.getKey(), pairs.getValue());
// 		}
// 	}
// 
// 	@Override
// 	public void put(Color key) {
// 		int count = get(key) + 1;
// 		_colors.put(key, count);
// 		_total += count;
// 	}
// 
// 	@Override
// 	public void put(Color key, int count) {
// 		_colors.put(key, count);
// 		_total += count;
// 	}
// 
// 	@Override
// 	public int get(Color key) {
// 		return _colors.containsKey(key) ? _colors.get(key) : 0;
// 	}
// 
// 	@Override
// 	public int getTotal() {
// 		return _total;
// 	}
// 
// 	@Override
// 	public int size() {
// 		return _colors.size();
// 	}
// 
// 	@Override
// 	public Set<Entry<Color, Integer>> entrySet() {
// 		return _colors.entrySet();
// 	}
// 
// 	@Override
// 	public Set<Color> keySet() {
// 		return _colors.keySet();
// 	}
// }
// 
// Path: colormine/src/main/org/colormine/image/profile/Profile.java
// public interface Profile<K> {
// 	/*
// 	 * Tracks an item
// 	 */
// 	void put(K key);
// 
// 	/*
// 	 * Tracks an item
// 	 */
// 	void put(K key, int count);
// 
// 	/*
// 	 * Returns the number of times an item has been recorded
// 	 */
// 	int get(K key);
// 
// 	/*
// 	 * Returns the sum of all items that have been recorded
// 	 */
// 	int getTotal();
// 
// 	/*
// 	 * Returns the count of all distinct items that have been recorded
// 	 */
// 	int size();
// 
// 	Set<Entry<K, Integer>> entrySet();
// 
// 	Set<K> keySet();
// 
// }


// Path: colormine/src/main/org/colormine/image/profile/filter/OutlierFilter.java
import java.awt.Color;
import org.colormine.image.profile.ColorProfile;
import org.colormine.image.profile.Profile;

package org.colormine.image.profile.filter;



/**
 * Removes colors that make up less than a given percentage of the image This is
 * best done after using something like the MapFilter to 'condense' the palette
 */

public final class OutlierFilter implements Filter<Profile<Color>> {

	private final int _percentage;

	public OutlierFilter(int threshHoldPercentage) {
		_percentage = threshHoldPercentage;
	}

	public FilterResult<Profile<Color>> apply(Profile<Color> colors) {
		Profile<Color> result = new ColorProfile();