public void convolveDerivOrder() {
		T blur = GeneralizedImageOps.createSingleBand(imageType, width, height);
		T blurDeriv = GeneralizedImageOps.createSingleBand(imageType, width, height);
		T deriv = GeneralizedImageOps.createSingleBand(imageType, width, height);
		T derivBlur = GeneralizedImageOps.createSingleBand(imageType, width, height);

		BlurStorageFilter<T> funcBlur = FactoryBlurFilter.gaussian(ImageType.single(imageType),sigma,radius);
		ImageGradient<T,T> funcDeriv = FactoryDerivative.three(imageType,imageType);

		funcBlur.process(input,blur);
		funcDeriv.process(blur,blurDeriv,derivY);

		funcDeriv.process(input,deriv,derivY);
		funcBlur.process(deriv,derivBlur);

		printIntensity("Blur->Deriv",blurDeriv);
		printIntensity("Deriv->Blur",blurDeriv);
	}
public void convolveDerivOrder ( ) { T blur = GeneralizedImageOps . createSingleBand ( imageType , width , height ) ; T blurDeriv = GeneralizedImageOps . createSingleBand ( imageType , width , height ) ; T deriv = GeneralizedImageOps . createSingleBand ( imageType , width , height ) ; T derivBlur = GeneralizedImageOps . createSingleBand ( imageType , width , height ) ; BlurStorageFilter < T > funcBlur = FactoryBlurFilter . gaussian ( ImageType . single ( imageType ) , sigma , radius ) ; ImageGradient < T , T > funcDeriv = FactoryDerivative . three ( imageType , imageType ) ; funcBlur . process ( input , blur ) ; funcDeriv . process ( blur , blurDeriv , derivY ) ; funcDeriv . process ( input , deriv , derivY ) ; funcBlur . process ( deriv , derivBlur ) ; printIntensity ( "Blur->Deriv" , blurDeriv ) ; printIntensity ( "Deriv->Blur" , blurDeriv ) ; }
Validate that convolution/derivative is in fact associative