/*
* This file is part of the JFeatureLib project: https://github.com/locked-fg/JFeatureLib
* JFeatureLib is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* JFeatureLib is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with JFeatureLib; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* You are kindly asked to refer to the papers of the according authors which
* should be mentioned in the Javadocs of the respective classes as well as the
* JFeatureLib project itself.
*
* Hints how to cite the projects can be found at
* https://github.com/locked-fg/JFeatureLib/wiki/Citation
*/
package de.lmu.ifi.dbs.jfeaturelib;
import ij.plugin.filter.PlugInFilter;
import ij.process.ImageProcessor;
import java.beans.PropertyChangeListener;
import java.util.EnumSet;
/**
* @author graf
*/
public interface Descriptor {
/**
* Defines the capability of the algorithm. It is possible that the list
* will be extended to the complete list of ImageJ's PlugInFilter Flags
*
* @see PlugInFilter
* @see #supports()
*/
public enum Supports {
/**
* If a mask is set, the features will only be extracted from this area
*/
Masking,
/**
* Set this, if the ImageProcessor will not be changed.
*/
NoChanges,
/**
* Supports 8bit Grayscale
*/
DOES_8G,
/**
* Supports 8bit indexed color
*/
DOES_8C,
/**
* supports 16-bit images
*/
DOES_16,
/**
* supports float images
*/
DOES_32,
/**
* supports RGB images
*/
DOES_RGB
}
/**
* Convenience field for "support all kinds of images".
*
* USE WITH EXTREME CAUTION: This may cause problems if a current algorithm
* uses DOES_ALL and new types for SUPPORT are added.
*/
public final EnumSet<Supports> DOES_ALL = EnumSet.of(
Supports.DOES_32,
Supports.DOES_16,
Supports.DOES_8C,
Supports.DOES_8G,
Supports.DOES_RGB);
/**
* Determine the capabilities of this algorithm.
*
* @return the set of supported capabilities.
*/
public EnumSet<Supports> supports();
/**
* Start processing of this algorithm on the given image processor. Keep in
* mind that if the imageProcessor is changed, Supports.NoChanges must not
* be set.
*
* This is also the case even if only ImageProcessor.snapshot() is used.
*
* @param ip the imageprocessor (which MIGHT be changed) from which features will be extracted
*/
public void run(ImageProcessor ip);
/**
* Adds a change listener to this descriptor. The descriptor might fire
* status change events which can be used to track the progress. Keep in
* mind that no implementation is forced to fire any events at all.
*
* @param listener Listenerobject that will be informed about the progress
*/
public void addPropertyChangeListener(PropertyChangeListener listener);
}