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}