001: /*
002: * @(#) $Header: /cvs/jai-operators/src/main/ca/forklabs/media/jai/opimage/KMeansRIF.java,v 1.2 2007/09/07 18:09:41 forklabs Exp $
003: *
004: * Copyright (C) 2007 Forklabs Daniel Léonard
005: *
006: * This program is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU General Public License
008: * as published by the Free Software Foundation; either version 2
009: * of the License, or (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: */
020:
021: package ca.forklabs.media.jai.opimage;
022:
023: import java.awt.RenderingHints;
024: import java.awt.image.RenderedImage;
025: import java.awt.image.renderable.ParameterBlock;
026: import java.awt.image.renderable.RenderedImageFactory;
027: import javax.media.jai.ImageLayout;
028: import javax.media.jai.JAI;
029: import ca.forklabs.media.jai.operator.KMeansDescriptor;
030:
031: /**
032: * Class {@code KMeansRIF} is a {@link RenderedImageFactory} supporting the
033: * <em>kmeans</em> operation in the rendered image layers.
034: *
035: * @author <a href="mailto:forklabs at dev.java.net?subject=ca.forklabs.media.jai.opimage.KMeansRIF">Daniel Léonard</a>
036: * @version $Revision: 1.2 $
037: * @see KMeansOpImage
038: */
039: public class KMeansRIF implements RenderedImageFactory {
040:
041: //---------------------------
042: // Constructor
043: //---------------------------
044:
045: /**
046: * Constructor.
047: */
048: public KMeansRIF() {
049: // nothing
050: }
051:
052: //---------------------------
053: // Instance methods
054: //---------------------------
055:
056: /**
057: * Gets the number of clusters.
058: * @param pb the parameter block.
059: * @return the number of clusters.
060: */
061: protected int getClusters(ParameterBlock pb) {
062: int index = KMeansDescriptor.CLUSTER_PARAMETER_INDEX;
063: int clusters = pb.getIntParameter(index);
064: return clusters;
065: }
066:
067: /**
068: * Gets the evaluation function.
069: * @param pb the parameter block.
070: * @return the evaluation function.
071: */
072: protected KMeansDescriptor.EvaluationFunction getEvaluationFunction(
073: ParameterBlock pb) {
074: int index = KMeansDescriptor.EVALUATION_FUNCTION_PARAMETER_INDEX;
075: KMeansDescriptor.EvaluationFunction function = (KMeansDescriptor.EvaluationFunction) pb
076: .getObjectParameter(index);
077: return function;
078: }
079:
080: /**
081: * Gets the number of iterations.
082: * @param pb the parameter block.
083: * @return the number of iterations.
084: */
085: protected int getIterations(ParameterBlock pb) {
086: int index = KMeansDescriptor.ITERATIONS_PARAMETER_INDEX;
087: int iterations = pb.getIntParameter(index);
088: return iterations;
089: }
090:
091: /**
092: * Gets the color map.
093: * @param pb the parameter block.
094: * @return the color map.
095: */
096: protected int[][] getColorMap(ParameterBlock pb) {
097: int index = KMeansDescriptor.COLOR_MAP_PARAMETER_INDEX;
098: int[][] color_map = (int[][]) pb.getObjectParameter(index);
099: return color_map;
100: }
101:
102: //---------------------------
103: // Implemented methods from java.awt.image.renderable.RenderedImageFactory
104: //---------------------------
105:
106: /**
107: * Creates a new instance of {@link KMeansOpImage} in the rendered
108: * layer.
109: * @param pb the parameter block.
110: * @param hints optional rendering hints.
111: */
112: @Override
113: @SuppressWarnings("unchecked")
114: public RenderedImage create(ParameterBlock pb, RenderingHints hints) {
115: RenderedImage source = pb.getRenderedSource(0);
116:
117: int clusters = this .getClusters(pb);
118: KMeansDescriptor.EvaluationFunction function = this
119: .getEvaluationFunction(pb);
120: int iterations = this .getIterations(pb);
121: int[][] color_map = this .getColorMap(pb);
122:
123: // this is exceptional, most factories are descendent of AbstractCRIF
124: ImageLayout layout = (null == hints) ? null
125: : (ImageLayout) hints.get(JAI.KEY_IMAGE_LAYOUT);
126:
127: RenderedImage sink = new KMeansOpImage(source, clusters,
128: function, iterations, color_map, hints, layout);
129: return sink;
130: }
131:
132: }
133:
134: /*
135: * $Log: KMeansRIF.java,v $
136: * Revision 1.2 2007/09/07 18:09:41 forklabs
137: * Refactored K-Means to add a new parameter, the evaluation function.
138: *
139: * Revision 1.1 2007/08/16 21:26:20 forklabs
140: * Operator kmeans.
141: *
142: */
|