⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quanttypespec.java

📁 jpeg2000算法实现
💻 JAVA
字号:
/*  * CVS identifier: *  * $Id: QuantTypeSpec.java,v 1.16 2000/12/15 10:07:44 grosbois Exp $ *  * Class:                   QuantTypeSpec *  * Description:             Quantization type specifications *  *  *  * COPYRIGHT: *  * This software module was originally developed by Rapha雔 Grosbois and * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel * Askel鰂 (Ericsson Radio Systems AB); and Bertrand Berthelot, David * Bouchard, F閘ix Henry, Gerard Mozelle and Patrice Onno (Canon Research * Centre France S.A) in the course of development of the JPEG2000 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This * software module is an implementation of a part of the JPEG 2000 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio * Systems AB and Canon Research Centre France S.A (collectively JJ2000 * Partners) agree not to assert against ISO/IEC and users of the JPEG * 2000 Standard (Users) any of their rights under the copyright, not * including other intellectual property rights, for this software module * with respect to the usage by ISO/IEC and Users of this software module * or modifications thereof for use in hardware or software products * claiming conformance to the JPEG 2000 Standard. Those intending to use * this software module in hardware or software products are advised that * their use may infringe existing patents. The original developers of * this software module, JJ2000 Partners and ISO/IEC assume no liability * for use of this software module or modifications thereof. No license * or right to this software module is granted for non JPEG 2000 Standard * conforming products. JJ2000 Partners have full right to use this * software module for his/her own purpose, assign or donate this * software module to any third party and to inhibit third parties from * using this software module for non JPEG 2000 Standard conforming * products. This copyright notice must be included in all copies or * derivative works of this software module. *  * Copyright (c) 1999/2000 JJ2000 Partners. *  */package jj2000.j2k.quantization;import jj2000.j2k.util.*;import jj2000.j2k.*;import java.util.*;/** * This class extends ModuleSpec class in order to hold specifications about * the quantization type to use in each tile-component. Supported quantization * type are:<br> * * <ul> * <li> Reversible (no quantization)</li> * <li> Derived (the quantization step size is derived from the one of the * LL-subband)</li> * <li> Expounded (the quantization step size of each subband is signalled in * the codestream headers) </li> * </ul> * * @see ModuleSpec * */public class QuantTypeSpec extends ModuleSpec{        /**      * Constructs an empty 'QuantTypeSpec' with specified number of tile and     * components. This constructor is called by the decoder.     *     * @param nt Number of tiles     *     * @param nc Number of components     *     * @param type the type of the specification module i.e. tile specific,     * component specific or both.     * */    public QuantTypeSpec(int nt, int nc, byte type){	super(nt, nc, type);    }    /**     * Constructs a new 'QuantTypeSpec' for the specified number of components     * and tiles and the arguments of "-Qtype" option. This constructor is     * called by the encoder.     *     * @param nt The number of tiles     *     * @param nc The number of components     *     * @param type the type of the specification module i.e. tile specific,     * component specific or both.     *     * @param pl The ParameterList     * */    public QuantTypeSpec(int nt, int nc, byte type, ParameterList pl){        super(nt, nc, type);	String param = pl.getParameter("Qtype");	if(param==null){            if(pl.getBooleanParameter("lossless"))                setDefault("reversible");            else                setDefault("expounded");            return;	}	// Parse argument	StringTokenizer stk = new StringTokenizer(param);	String word; // current word	byte curSpecValType = SPEC_DEF; // Specification type of the	// current parameter	boolean[] tileSpec = null; // Tiles concerned by the specification	boolean[] compSpec = null; // Components concerned by the specification		while(stk.hasMoreTokens()){	    word = stk.nextToken().toLowerCase();	  	    switch(word.charAt(0)){	    case 't': // Tiles specification 		tileSpec = parseIdx(word,nTiles);		if(curSpecValType==SPEC_COMP_DEF){		    curSpecValType = SPEC_TILE_COMP;		}		else{		    curSpecValType = SPEC_TILE_DEF;		} 		break;	    case 'c': // Components specification		compSpec = parseIdx(word,nComp);		if(curSpecValType==SPEC_TILE_DEF){		    curSpecValType = SPEC_TILE_COMP;		}		else		    curSpecValType = SPEC_COMP_DEF;		break;	    case 'r': // reversible specification	    case 'd': // derived quantization step size specification	    case 'e': // expounded quantization step size specification		if(!word.equalsIgnoreCase("reversible") && 		   !word.equalsIgnoreCase("derived") &&		   !word.equalsIgnoreCase("expounded"))                    throw new IllegalArgumentException("Unknown parameter "+                                                       "for "+                                                       "'-Qtype' option: "+                                                       word);                 if(pl.getBooleanParameter("lossless") &&                    ( word.equalsIgnoreCase("derived") ||                     word.equalsIgnoreCase("expounded") ) )                    throw new IllegalArgumentException("Cannot use non "+                                                       "reversible "+                                                       "quantization with "+                                                       "'-lossless' option");		if(curSpecValType==SPEC_DEF){		    setDefault(word);		}		else if(curSpecValType==SPEC_TILE_DEF){		    for(int i=tileSpec.length-1; i>=0; i--)			if(tileSpec[i]){			    setTileDef(i,word);                        }		}		else if(curSpecValType==SPEC_COMP_DEF){		    for(int i=compSpec.length-1; i>=0; i--)			if(compSpec[i]){			    setCompDef(i,word);                        }		}		else{		    for(int i=tileSpec.length-1; i>=0; i--){			for(int j=compSpec.length-1; j>=0 ; j--){			    if(tileSpec[i] && compSpec[j]){				setTileCompVal(i,j,word);                            }			}		    }		}		// Re-initialize		curSpecValType = SPEC_DEF;		tileSpec = null;		compSpec = null;		break;	    default:		throw new IllegalArgumentException("Unknown parameter for "+                                                   "'-Qtype' option: "+word); 	    }	}        // Check that default value has been specified        if(getDefault()==null){            int ndefspec = 0;            for(int t=nt-1; t>=0; t--){                for(int c=nc-1; c>=0 ; c--){                    if(specValType[t][c] == SPEC_DEF){                        ndefspec++;                    }                }            }                        // If some tile-component have received no specification, it takes            // the default value defined in ParameterList            if(ndefspec!=0){                if(pl.getBooleanParameter("lossless"))                    setDefault("reversible");                else                    setDefault("expounded");            }            else{                // All tile-component have been specified, takes the first                // tile-component value as default.                setDefault(getTileCompVal(0,0));                switch(specValType[0][0]){                case SPEC_TILE_DEF:                    for(int c=nc-1; c>=0; c--){                        if(specValType[0][c]==SPEC_TILE_DEF)                            specValType[0][c] = SPEC_DEF;                    }                    tileDef[0] = null;                    break;                case SPEC_COMP_DEF:                    for(int t=nt-1; t>=0; t--){                        if(specValType[t][0]==SPEC_COMP_DEF)                            specValType[t][0] = SPEC_DEF;                    }                    compDef[0] = null;                    break;                case SPEC_TILE_COMP:                    specValType[0][0] = SPEC_DEF;                    tileCompVal.put("t0c0",null);                    break;                }            }	}   }    /**      * Returns true if given tile-component uses derived quantization step     * size.     *     * @param t Tile index     *     * @param c Component index     *     * @return True if derived quantization step size     * */     public boolean isDerived(int t,int c){	if( ((String)getTileCompVal(t,c)).equals("derived") )	    return true;	else	    return false;    }    /**     * Check the reversibility of the given tile-component.     *     * @param t The index of the tile     *     * @param c The index of the component     *     * @return Whether or not the tile-component is reversible     * */    public boolean isReversible(int t,int c){	if( ((String)getTileCompVal(t,c)).equals("reversible") )	    return true;	else	    return false;    }    /**     * Check the reversibility of the whole image.     *     * @return Whether or not the whole image is reversible     * */    public boolean isFullyReversible(){	// The whole image is reversible if default specification is	// rev and no tile default, component default and	// tile-component value has been specificied	if( ((String)getDefault()).equals("reversible") ){	    for(int t=nTiles-1; t>=0; t--)		for(int c=nComp-1; c>=0; c--)		    if(specValType[t][c]!=SPEC_DEF)			return false;	    return true;	}	 	return false;    }    /**     * Check the irreversibility of the whole image.     *     * @return Whether or not the whole image is reversible     * */    public boolean isFullyNonReversible(){	// The whole image is irreversible no tile-component is reversible	for(int t=nTiles-1; t>=0; t--)	    for(int c=nComp-1; c>=0; c--)		if( ((String)getSpec(t,c)).equals("reversible") )		    return false;	return true;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -