001: /*
002: * @(#) $Header: /cvs/jai-operators/src/main/ca/forklabs/media/jai/opimage/SpectralHomomorphicCIF.java,v 1.3 2007/07/17 17:19:25 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.util.Collection;
027: import javax.media.jai.CollectionImage;
028: import javax.media.jai.CollectionImageFactory;
029: import javax.media.jai.CollectionOp;
030: import ca.forklabs.media.jai.CollectionImageUtil;
031: import ca.forklabs.media.jai.FormatDataType;
032: import ca.forklabs.media.jai.ParameterBlockUtil;
033: import ca.forklabs.media.jai.SpectralFilter3D;
034: import ca.forklabs.media.jai.operator.PipelineDescriptor;
035: import ca.forklabs.media.jai.operator.SpectralFilterDescriptor;
036: import ca.forklabs.media.jai.operator.SpectralHomomorphicDescriptor;
037:
038: /**
039: * Class {@code SpectralHomomorphicCIF} is a {@link CollectionImageFactory}
040: * supporting the <em>spectralhomomorphic</em> operation.
041: *
042: * @author <a href="mailto:forklabs at dev.java.net?subject=ca.forklabs.media.jai.opimage.SpectralHomomorphicCIF">Daniel Léonard</a>
043: * @version $Revision: 1.3 $
044: */
045: public class SpectralHomomorphicCIF implements CollectionImageFactory {
046:
047: //---------------------------
048: // Constructor
049: //---------------------------
050:
051: /**
052: * Constructor.
053: */
054: public SpectralHomomorphicCIF() {
055: // nothing
056: }
057:
058: //---------------------------
059: // Instance methods
060: //---------------------------
061:
062: /**
063: * Gets the spectral filter.
064: * @param pb the parameter block.
065: * @return the spectral filter.
066: */
067: protected SpectralFilter3D getFilter(ParameterBlock pb) {
068: int index = SpectralHomomorphicDescriptor.FILTER_PARAMETER_INDEX;
069: SpectralFilter3D filter = (SpectralFilter3D) pb
070: .getObjectParameter(index);
071: return filter;
072: }
073:
074: /**
075: * Gets the type for the format operation.
076: * @param pb the parameter block.
077: * @return type for the format operation.
078: */
079: protected FormatDataType getDataType(ParameterBlock pb) {
080: int index = SpectralHomomorphicDescriptor.TYPE_PARAMETER_INDEX;
081: FormatDataType type = (FormatDataType) pb
082: .getObjectParameter(index);
083: return type;
084: }
085:
086: //---------------------------
087: // Implemented methods from javax.media.jai.CollectionImageFactory
088: //---------------------------
089:
090: /**
091: * Creates a {@code CollectionImage} that represents the result of applying
092: * the requested operation once to each image in the collection.
093: * @param pb the parameter block.
094: * @param hints the rendering hints.
095: * @return the collection image containing the results.
096: */
097: @SuppressWarnings({"unchecked","boxing","nls"})
098: public CollectionImage create(ParameterBlock pb,
099: RenderingHints hints) {
100: // the real type is CollectionImage,
101: // it is OK to see it as a collection
102: // of rendered images, which it is.
103: Collection<RenderedImage> sources = (Collection<RenderedImage>) pb
104: .getSource(0);
105:
106: SpectralFilter3D filter = this .getFilter(pb);
107: FormatDataType type = this .getDataType(pb);
108:
109: String[] operations = new String[] { "applytocollection",
110: "applytocollection", "applytocollection",
111: SpectralFilterDescriptor.NAME, "applytocollection",
112: "applytocollection", };
113: ParameterBlock[] pbs = new ParameterBlock[] {
114: new ParameterBlock().add("format").add(
115: ParameterBlockUtil.createFormatParameterBlock(
116: null, type)),
117: new ParameterBlock().add("addconst").add(
118: ParameterBlockUtil
119: .createAddConstParameterBlock(null,
120: new double[] { 1.0, })),
121: new ParameterBlock().add("log").add(
122: ParameterBlockUtil
123: .createLogParameterBlock(null)),
124: new ParameterBlock().add(filter).add(type),
125: new ParameterBlock().add("exp").add(
126: ParameterBlockUtil
127: .createExpParameterBlock(null)),
128: new ParameterBlock().add("subtractconst").add(
129: ParameterBlockUtil
130: .createSubtractConstParameterBlock(
131: null, new double[] { 1.0, })), };
132: Collection<RenderedImage> collection = PipelineDescriptor
133: .createCollection(sources, operations, pbs, hints);
134: CollectionImage sinks = CollectionImageUtil
135: .asCollectionImage(collection);
136: return sinks;
137: }
138:
139: /**
140: * It is impratical to perform the update.
141: * @param old_pb ignored
142: * @param old_hints ignored
143: * @param new_pb ignored
144: * @param new_hints ignored
145: * @param old_image ignored
146: * @param op ignored
147: * @return always {@code null}.
148: */
149: public CollectionImage update(ParameterBlock old_pb,
150: RenderingHints old_hints, ParameterBlock new_pb,
151: RenderingHints new_hints, CollectionImage old_image,
152: CollectionOp op) {
153: // it is impracticable to perform the update
154: CollectionImage new_image = null;
155: return new_image;
156: }
157:
158: }
159:
160: /*
161: * $Log: SpectralHomomorphicCIF.java,v $
162: * Revision 1.3 2007/07/17 17:19:25 forklabs
163: * Javadoc
164: *
165: * Revision 1.2 2007/07/17 16:41:47 forklabs
166: * Now uses operator spectralfilter.
167: *
168: * Revision 1.1 2007/07/05 18:31:30 forklabs
169: * Operator spectralhomomorphic.
170: *
171: */
|