/*
* Copyright (c) 2011-2016, Peter Abeles. All Rights Reserved.
*
* This file is part of BoofCV (http://boofcv.org).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package boofcv.alg.feature.detect.intensity.impl;
import boofcv.misc.AutoTypeImage;
import boofcv.misc.CodeGeneratorBase;
import java.io.FileNotFoundException;
/**
* @author Peter Abeles
*/
public class GenerateImplHessianBlobIntensity extends CodeGeneratorBase {
String className = "ImplHessianBlobIntensity";
AutoTypeImage derivType;
@Override
public void generate() throws FileNotFoundException {
printPreamble();
printFuncs(AutoTypeImage.F32);
printFuncs(AutoTypeImage.S16);
out.print("\n" +
"}\n");
}
private void printPreamble() throws FileNotFoundException {
setOutputFile(className);
out.print("import boofcv.struct.image.*;\n" +
"\n" +
"/**\n" +
" * <p>\n" +
" * Implementations of {@link boofcv.alg.feature.detect.intensity.HessianBlobIntensity}.\n" +
" * </p>\n" +
" *\n" +
" * <p>\n" +
" * DO NOT MODIFY. Code has been automatically generated by {@link GenerateImplHessianBlobIntensity}.\n" +
" * </p>\n" +
" *\n" +
" * @author Peter Abeles\n" +
" */\n" +
"public class "+className+" {\n\n");
}
private void printFuncs( AutoTypeImage derivType )
{
this.derivType = derivType;
printDeterminant();
printTrace();
}
private void printDeterminant() {
String derivName = derivType.getSingleBandName();
String sumType = derivType.getSumType();
String bitWise = derivType.getBitWise();
out.print("\tpublic static void determinant( GrayF32 featureIntensity , "+derivName+" hessianXX, "+derivName+" hessianYY , "+derivName+" hessianXY ) {\n" +
"\t\tfinal int width = hessianXX.width;\n" +
"\t\tfinal int height = hessianXX.height;\n" +
"\n" +
"\t\tif( featureIntensity == null ) {\n" +
"\t\t\tfeatureIntensity = new GrayF32(width,height);\n" +
"\t\t}\n" +
"\n" +
"\t\tfor( int y = 0; y < height; y++ ) {\n" +
"\t\t\tint indexXX = hessianXX.startIndex + y*hessianXX.stride;\n" +
"\t\t\tint indexYY = hessianYY.startIndex + y*hessianYY.stride;\n" +
"\t\t\tint indexXY = hessianXY.startIndex + y*hessianXY.stride;\n" +
"\n" +
"\t\t\tint indexInten = featureIntensity.startIndex + y*featureIntensity.stride;\n" +
"\n" +
"\t\t\tfor( int x = 0; x < width; x++ ) {\n" +
"\t\t\t\t"+sumType+" dxx = hessianXX.data[indexXX++]"+bitWise+";\n" +
"\t\t\t\t"+sumType+" dyy = hessianYY.data[indexYY++]"+bitWise+";\n" +
"\t\t\t\t"+sumType+" dxy = hessianXY.data[indexXY++]"+bitWise+";\n" +
"\n" +
"\t\t\t\tfeatureIntensity.data[indexInten++] = dxx*dyy - dxy*dxy;\n" +
"\t\t\t}\n" +
"\t\t}\n" +
"\t}\n\n");
}
private void printTrace() {
String derivName = derivType.getSingleBandName();
String sumType = derivType.getSumType();
String bitWise = derivType.getBitWise();
out.print("\tpublic static void trace( GrayF32 featureIntensity , "+derivName+" hessianXX, "+derivName+" hessianYY ) {\n" +
"\t\tfinal int width = hessianXX.width;\n" +
"\t\tfinal int height = hessianXX.height;\n" +
"\n" +
"\t\tif( featureIntensity == null ) {\n" +
"\t\t\tfeatureIntensity = new GrayF32(width,height);\n" +
"\t\t}\n" +
"\n" +
"\t\tfor( int y = 0; y < height; y++ ) {\n" +
"\t\t\tint indexXX = hessianXX.startIndex + y*hessianXX.stride;\n" +
"\t\t\tint indexYY = hessianYY.startIndex + y*hessianYY.stride;\n" +
"\n" +
"\t\t\tint indexInten = featureIntensity.startIndex + y*featureIntensity.stride;\n" +
"\n" +
"\t\t\tfor( int x = 0; x < width; x++ ) {\n" +
"\t\t\t\t"+sumType+" dxx = hessianXX.data[indexXX++]"+bitWise+";\n" +
"\t\t\t\t"+sumType+" dyy = hessianYY.data[indexYY++]"+bitWise+";\n" +
"\n" +
"\t\t\t\tfeatureIntensity.data[indexInten++] = dxx + dyy;\n" +
"\t\t\t}\n" +
"\t\t}\n" +
"\t}\n\n");
}
public static void main( String args[] ) throws FileNotFoundException {
GenerateImplHessianBlobIntensity gen = new GenerateImplHessianBlobIntensity();
gen.generate();
}
}