001/*
002 * $RCSfile: ROI.java,v $
003 * $Revision: 1.1 $
004 * $Date: 2005/02/11 05:02:22 $
005 * $State: Exp $
006 *
007 * Class:                   ROI
008 *
009 * Description:             This class describes a single ROI
010 *
011 *
012 *
013 * COPYRIGHT:
014 *
015 * This software module was originally developed by Raphaël Grosbois and
016 * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel
017 * Askelöf (Ericsson Radio Systems AB); and Bertrand Berthelot, David
018 * Bouchard, Félix Henry, Gerard Mozelle and Patrice Onno (Canon Research
019 * Centre France S.A) in the course of development of the JPEG2000
020 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This
021 * software module is an implementation of a part of the JPEG 2000
022 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio
023 * Systems AB and Canon Research Centre France S.A (collectively JJ2000
024 * Partners) agree not to assert against ISO/IEC and users of the JPEG
025 * 2000 Standard (Users) any of their rights under the copyright, not
026 * including other intellectual property rights, for this software module
027 * with respect to the usage by ISO/IEC and Users of this software module
028 * or modifications thereof for use in hardware or software products
029 * claiming conformance to the JPEG 2000 Standard. Those intending to use
030 * this software module in hardware or software products are advised that
031 * their use may infringe existing patents. The original developers of
032 * this software module, JJ2000 Partners and ISO/IEC assume no liability
033 * for use of this software module or modifications thereof. No license
034 * or right to this software module is granted for non JPEG 2000 Standard
035 * conforming products. JJ2000 Partners have full right to use this
036 * software module for his/her own purpose, assign or donate this
037 * software module to any third party and to inhibit third parties from
038 * using this software module for non JPEG 2000 Standard conforming
039 * products. This copyright notice must be included in all copies or
040 * derivative works of this software module.
041 *
042 * Copyright (c) 1999/2000 JJ2000 Partners.
043 */
044package jj2000.j2k.roi.encoder;
045
046import jj2000.j2k.codestream.writer.*;
047import jj2000.j2k.wavelet.analysis.*;
048import jj2000.j2k.quantization.*;
049import jj2000.j2k.image.input.*;
050import jj2000.j2k.wavelet.*;
051import jj2000.j2k.image.*;
052import jj2000.j2k.util.*;
053import jj2000.j2k.roi.*;
054
055/**
056 * This class contains the shape of a single ROI. In the current
057 * implementation only rectangles and circles are supported.
058 *
059 * @see ROIMaskGenerator
060 */
061public class ROI{
062
063    /** ImgReaderPGM object with the arbrtrary ROI */
064    public ImgReaderPGM maskPGM = null;
065
066    /** Where or not the ROI shape is arbitrary */
067    public boolean arbShape;
068
069    /** Flag indicating whether the ROI is rectangular or not */
070    public boolean rect;
071
072    /** The components for which the ROI is relevant */
073    public int comp;
074
075    /** x coordinate of upper left corner of rectangular ROI */
076    public int ulx;
077
078    /** y coordinate of upper left corner of rectangular ROI */
079    public int uly;
080
081    /** width of rectangular ROI  */
082    public int w;
083
084    /** height of rectangular ROI */
085    public int h;
086
087    /** x coordinate of center of circular ROI */
088    public int x;
089
090    /** y coordinate of center of circular ROI */
091    public int y;
092
093    /** radius of circular ROI  */
094    public int r;
095
096
097    /**
098     * Constructor for ROI with arbitrary shape
099     *
100     * @param comp The component the ROI belongs to
101     *
102     * @param maskPGM ImgReaderPGM containing the ROI
103     */
104    public ROI(int comp, ImgReaderPGM maskPGM){
105        arbShape = true;
106        rect = false;
107        this.comp = comp;
108        this.maskPGM = maskPGM;
109    }
110
111    /**
112     * Constructor for rectangular ROIs
113     *
114     * @param comp The component the ROI belongs to
115     *
116     * @param x x-coordinate of upper left corner of ROI
117     *
118     * @param y y-coordinate of upper left corner of ROI
119     *
120     * @param w width of ROI
121     *
122     * @param h height of ROI
123     */
124    public ROI(int comp, int ulx, int uly, int w, int h){
125        arbShape = false;
126        this.comp = comp;
127        this.ulx = ulx;
128        this.uly = uly;
129        this.w = w;
130        this.h = h;
131        rect = true;
132    }
133
134    /**
135     * Constructor for circular ROIs
136     *
137     * @param comp The component the ROI belongs to
138     *
139     * @param x x-coordinate of center of ROI
140     *
141     * @param y y-coordinate of center of ROI
142     *
143     * @param w radius of ROI
144     */
145    public ROI(int comp, int x, int y, int rad){
146        arbShape = false;
147        this.comp = comp;
148        this.x = x;
149        this.y = y;
150        this.r = rad;
151    }
152
153    /**
154     * This function prints all relevant data for the ROI
155     */
156    public String toString(){
157        if(arbShape) {
158            return "ROI with arbitrary shape, PGM file= "+maskPGM;
159        }
160        else if(rect)
161            return "Rectangular ROI, comp="+comp+" ulx="+ulx+" uly="+uly+
162                   " w="+w+" h="+h;
163        else
164            return "Circular ROI,  comp="+comp+" x="+x+" y="+y+
165                " radius="+r;
166
167    }
168
169}
170
171
172
173
174
175
176
177
178