001/*******************************************************************************
002 * This software is provided as a supplement to the authors' textbooks on digital
003 *  image processing published by Springer-Verlag in various languages and editions.
004 * Permission to use and distribute this software is granted under the BSD 2-Clause 
005 * "Simplified" License (see http://opensource.org/licenses/BSD-2-Clause). 
006 * Copyright (c) 2006-2016 Wilhelm Burger, Mark J. Burge. All rights reserved. 
007 * Visit http://imagingbook.com for additional details.
008 *******************************************************************************/
009
010package imagingbook.pub.sift.scalespace;
011
012import ij.process.FloatProcessor;
013
014public class GaussianScaleSpace extends HierarchicalScaleSpace {
015
016        public GaussianScaleSpace(FloatProcessor fp, double sigma_s, double sigma_0, int P, int Q, int botLevel, int topLevel) {
017                super(P, Q, sigma_s, sigma_0, botLevel, topLevel);      
018                build(fp);
019        }
020        
021        private final void build(FloatProcessor fp) {
022                double scale_b = getAbsoluteScale(0, -1) ;      // absolute scale of level(0,-1)
023                double sigma_b = getRelativeScale(sigma_s, scale_b);
024                
025                ScaleLevel Ginit = new ScaleLevel(fp, sigma_s);
026                Ginit.filterGaussian(sigma_b);
027                Ginit.setAbsoluteScale(scale_b);
028
029                // build Gaussian octaves:
030                octaves[0] = new GaussianOctave(0, Q, Ginit, botLevel, topLevel, sigma_0);
031                for (int p = 1; p < P; p++) {
032                        ScaleLevel Gbase = octaves[p-1].getLevel(Q-1).decimate();
033                        octaves[p] = new GaussianOctave(p, Q, Gbase, botLevel, topLevel, sigma_0);
034                }
035        }
036        
037}