001/* 002 * $RCSfile: SubbandROIMask.java,v $ 003 * $Revision: 1.1 $ 004 * $Date: 2005/02/11 05:02:24 $ 005 * $State: Exp $ 006 * 007 * Class: ROI 008 * 009 * Description: This class describes the ROI mask for a subband 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.wavelet.*; 050import jj2000.j2k.image.*; 051import jj2000.j2k.util.*; 052import jj2000.j2k.roi.*; 053 054/** 055 * This abstract class describes the ROI mask for a single subband. Each 056 * object of the class contains the mask for a particular subband and also has 057 * references to the masks of the children subbands of the subband 058 * corresponding to this mask. */ 059public abstract class SubbandROIMask{ 060 061 /** The subband masks of the child LL */ 062 protected SubbandROIMask ll; 063 064 /** The subband masks of the child LH */ 065 protected SubbandROIMask lh; 066 067 /** The subband masks of the child HL */ 068 protected SubbandROIMask hl; 069 070 /** The subband masks of the child HH */ 071 protected SubbandROIMask hh; 072 073 /** Flag indicating whether this subband mask is a node or not */ 074 protected boolean isNode; 075 076 /** Horizontal uper-left coordinate of the subband mask */ 077 public int ulx; 078 079 /** Vertical uper-left coordinate of the subband mask */ 080 public int uly; 081 082 /** Width of the subband mask */ 083 public int w; 084 085 /** Height of the subband mask */ 086 public int h; 087 088 /** 089 * The constructor of the SubbandROIMask takes the dimensions of the 090 * subband as parameters 091 * 092 * @param ulx The upper left x coordinate of corresponding subband 093 * 094 * @param uly The upper left y coordinate of corresponding subband 095 * 096 * @param w The width of corresponding subband 097 * 098 * @param h The height of corresponding subband 099 * */ 100 public SubbandROIMask(int ulx, int uly, int w, int h){ 101 this.ulx=ulx; 102 this.uly=uly; 103 this.w=w; 104 this.h=h; 105 } 106 107 /** 108 * Returns a reference to the Subband mask element to which the specified 109 * point belongs. The specified point must be inside this (i.e. the one 110 * defined by this object) subband mask. This method searches through the 111 * tree. 112 * 113 * @param x horizontal coordinate of the specified point. 114 * 115 * @param y horizontal coordinate of the specified point. 116 * */ 117 public SubbandROIMask getSubbandRectROIMask(int x, int y) { 118 SubbandROIMask cur,hhs; 119 120 // Check that we are inside this subband 121 if (x < ulx || y < uly || x >= ulx+w || y >= uly+h) { 122 throw new IllegalArgumentException(); 123 } 124 125 cur = this; 126 while (cur.isNode) { 127 hhs = cur.hh; 128 // While we are still at a node -> continue 129 if (x < hhs.ulx) { 130 // Is the result of horizontal low-pass 131 if (y < hhs.uly) { 132 // Vertical low-pass 133 cur = cur.ll; 134 } 135 else { 136 // Vertical high-pass 137 cur = cur.lh; 138 } 139 } 140 else { 141 // Is the result of horizontal high-pass 142 if (y < hhs.uly) { 143 // Vertical low-pass 144 cur = cur.hl; 145 } 146 else { 147 // Vertical high-pass 148 cur = cur.hh; 149 } 150 } 151 } 152 return cur; 153 } 154} 155 156 157 158 159 160 161 162 163 164 165