Example Image Derivative
From BoofCV
Jump to navigationJump to search
Example of how to compute different image derivatives. The gradient (1st order derivative) is probably the important image derivative and is used as a first step when extracting many types of image features. The code below shows how gradient, Hessian (2nd order), and arbitrary image derivatives can be computed.
Example Code:
Concepts:
- Image Derivative
 - Gradient
 - Hessian
 
Relevant Applets:
Example Code
/**
 * Example showing how to compute different image derivatives using built in functions.
 *
 * @author Peter Abeles
 */
public class ExampleImageDerivative {
	public static void main(String[] args) {
		BufferedImage input = UtilImageIO.loadImage("../data/evaluation/simple_objects.jpg");
		// We will use floating point images here, but ImageUInt8 with ImageSInt16 for derivatives also works
		ImageFloat32 grey = new ImageFloat32(input.getWidth(),input.getHeight());
		ConvertBufferedImage.convertFrom(input, grey);
		// First order derivative, also known as the gradient
		ImageFloat32 derivX = new ImageFloat32(grey.width,grey.height);
		ImageFloat32 derivY = new ImageFloat32(grey.width,grey.height);
		GImageDerivativeOps.gradient(DerivativeType.SOBEL, grey, derivX, derivY, BorderType.EXTENDED);
		// Second order derivative, also known as the Hessian
		ImageFloat32 derivXX = new ImageFloat32(grey.width,grey.height);
		ImageFloat32 derivXY = new ImageFloat32(grey.width,grey.height);
		ImageFloat32 derivYY = new ImageFloat32(grey.width,grey.height);
		GImageDerivativeOps.hessian(DerivativeType.SOBEL, derivX, derivY, derivXX, derivXY, derivYY, BorderType.EXTENDED);
		// There's also a built in function for computing arbitrary derivatives
		AnyImageDerivative<ImageFloat32,ImageFloat32> derivative =
				GImageDerivativeOps.createAnyDerivatives(DerivativeType.SOBEL, ImageFloat32.class, ImageFloat32.class);
		// the boolean sequence indicates if its an X or Y derivative
		derivative.setInput(grey);
		ImageFloat32 derivXYX = derivative.getDerivative(true, false, true);
		// Visualize the results
		ListDisplayPanel gui = new ListDisplayPanel();
		gui.addImage(ConvertBufferedImage.convertTo(grey,null),"Input Grey");
		gui.addImage(VisualizeImageData.colorizeSign(derivX, null, -1),"Sobel X");
		gui.addImage(VisualizeImageData.colorizeSign(derivY, null, -1),"Sobel Y");
		// Use colors to show X and Y derivatives in one image.  Looks pretty.
		gui.addImage(VisualizeImageData.colorizeGradient(derivX, derivY, -1),"Sobel X and Y");
		gui.addImage(VisualizeImageData.colorizeSign(derivXX, null,-1),"Sobel XX");
		gui.addImage(VisualizeImageData.colorizeSign(derivXY, null,-1),"Sobel XY");
		gui.addImage(VisualizeImageData.colorizeSign(derivYY, null,-1),"Sobel YY");
		gui.addImage(VisualizeImageData.colorizeSign(derivXYX, null,-1),"Sobel XYX");
		ShowImages.showWindow(gui,"Image Derivatives",true);
	}
}