Difference between revisions of "BoofCV Change Log"

From BoofCV
Jump to navigationJump to search
m
m
Line 12: Line 12:
* Added WeightSample2D_F32 for computing the weight of a sample in an abstract manor
* Added WeightSample2D_F32 for computing the weight of a sample in an abstract manor
** Reduced MeanShiftPeak from 3 classes into one
** Reduced MeanShiftPeak from 3 classes into one
* Edge Non-Maximum suppression's documentation now clearly states that it suppresses only if adjacent pixel is
* Edge Non-Maximum suppression's documentation now clearly states that it suppresses only if adjacent pixel is less than.  This is not true non-maximum suppression since it allows equal values but seems to produce better results
  less than.  This is not true non-maximum suppression since it allows equal values but seems to produce
  better results
** Improved unit tests to explicitly test for this behavior
** Improved unit tests to explicitly test for this behavior
* Canny edge detector would fail if threshold was zero and the image had no texture
* Canny edge detector would fail if threshold was zero and the image had no texture
** HysteresisEdge* code was using a value of 0 to mark traversed regions.  It now uses -1 and sanity checks
** HysteresisEdge code was using a value of 0 to mark traversed regions.  It now uses -1 and sanity checks the lower threshold.
    the lower threshold.
** Thanks Lucaro for finding this bug
** Thanks Lucaro for finding this bug
* Added GImageMultiBand for generalized access to multi-band image data
* Added GImageMultiBand for generalized access to multi-band image data

Revision as of 13:52, 19 June 2014

Change Log

Date Format: year/month/day


Date  : 2014/6/19 Version : Alpha 0.17

  • Improved/Fixed serialization
    • Several classes were missing no argument constructors
  • Added ImageMiscOps.flipHorizontal()
  • Added WeightSample2D_F32 for computing the weight of a sample in an abstract manor
    • Reduced MeanShiftPeak from 3 classes into one
  • Edge Non-Maximum suppression's documentation now clearly states that it suppresses only if adjacent pixel is less than. This is not true non-maximum suppression since it allows equal values but seems to produce better results
    • Improved unit tests to explicitly test for this behavior
  • Canny edge detector would fail if threshold was zero and the image had no texture
    • HysteresisEdge code was using a value of 0 to mark traversed regions. It now uses -1 and sanity checks the lower threshold.
    • Thanks Lucaro for finding this bug
  • Added GImageMultiBand for generalized access to multi-band image data
  • Added support for MultiSpectral images to:
    • GBlurImageOps and BlurImageOps
  • Image Segmentation / Superpixels
    • Watershed
    • Mean-shift
    • Felzenszwalb-Huttenlocher 2004
    • SLIC Superpixels
  • Dense Optical Flow
    • KLT Based
    • Square Region Based
    • Horn Schunck
    • Horn Schunck Pyramid
    • Brox Spacial Warping
  • Fixed bugs in ConvertNV21
    • Was applying YV12 byte alignment to NV21 images. Depending on image size, this could cause a crash.
  • Fixed bug in ImplConvertToBitmap.multiToArray_F32()
    • Didn't handle case where the input image has 3 bands and not 4
  • ImageBase now provides a method for getting ImageType information
  • Threshold in the interface Associate is now <= instead of <
  • Android
    • Added classes which greatly simplify dealing with camera previews
    • Added new visualizations intended for use with segmented images
    • Simplified example code
  • Added XYZ and LAB color spaces
  • GImageMiscOps.fillUniform() max is inclusive for both integer and float and this is enforced
  • BinaryImageOps
    • Erode and dilate can now be applied multiple times with a single function call
  • StitchingFromMotion2D can now resize and translate the stitch image
    • Thanks Julien Seinturier for the suggestion
  • Convolution
    • 1D convolution now supports kernels which are not symmetric
  • Image gradient from a difference of two neighbors added
  • Square grid calibration grid detector has been improved.
    • No longer permutes through all combinations. Selects each valid square and assumes its the first instead
    • Graph connection rule has been improved too to reduce false connections
  • Moved serializeXML from BoofMiscOps to UtilIO
    • Removing an IO function which shouldn't be in image processing
  • FactoryDerivative
    • If derivative type is null it will use the default
  • Added ImageType to interpolate interface
  • Added ImageType to ImageSegmentation interface
  • Processing (http://processing.org) integration
    • Lots of examples
    • Simplified interface for working with BoofCV
  • XStream now works without that ugly hack
    • Thanks to Jörg Schaible of XStream for fixing the issue and all the help
  • Webcam Capture Support
    • Easy to use library for streaming webcams
    • Wrote several example showing how Webcam Capture can be used with BoofCV
  • Structure From Motion (SFM) example

Date  : 2013/12/25 Version : Alpha 0.16

  • Simplified DescribeRegionPoint
    • describe now returns true or false
    • removed isInBounds()
    • removed getDescriptionLength() since it is contained in the description itself
    • added getImageType()
  • Feature detection and describing related classes now extend ImageBase to allow support of color image processing
  • SURF
    • Laplacian sign calculation doesn't declare new memory for every single feature any more
    • Added a color SURF descriptor
  • Fixed SIFT bug which produced a feature with NaN in its descriptor
    • The extractor border was not being taken in account when examining features. The net result was that the localization interpolation would messed up since the center would not be a maximum, causing really bad stuff.
    • Unit tests updated so that it they can detect it.
    • Thanks Lefteris for detecting this bug.
  • SURF detector (Fast-Hessian)
    • Was affected in a similar fashion to the SIFT bug. The fix doesn't seem to change its stability at all.
  • NCC error now more "correct" and divides by the number of elements
  • Integral image operations now support more image types. S64 and F64
  • KltTracker.setDescription() can now fail due to lack of texture
  • Created TrackObjectQuad for tracking user select objects inside an image
    • Added TLD tracker
    • Added Circulant tracker
    • Added Sparse Flow Object Tracker
    • Added various mean-shift trackers
  • Created recognition package
    • No other good place to put object trackers
  • UtilImageIO
    • Can read PPM from InputStream
    • Can read images from URL
    • Can read/write PGM files
    • Can handle comments in PPM + PGM files
  • Moved FastQueue and GrowQueue into DDogleg project so that other projects can use those data structures
  • Modified ConvertBufferedImage functions with orderRgb to make it easier to maintain RGB ordering.
    • No need to explicitly call orderBandsIntoRGB() any more
  • Change behavior of ConvertRaster so that it does not modify the order of color bands at all
    • Improved unit tests
  • Added Fast Fourier Transform
    • Code originally from General Purpose FFT by Takuya Ooura, actual Java code copied from JTransforms with minor modifications.
  • PixelMath
    • pixel-wise image-to-image multiplication
    • pixel-wise image-to-image division
    • pixel-wise log(1+x)
  • ImageMiscOps
    • added copy() for rectangular sub-images
    • limited support for Interleaved images
  • ThresholdImageOps
    • Added adaptiveSquare
    • Added adaptiveGaussian
  • Convolution and ImageBlurOps
    • Improved accuracy of operations on integer images. Rounded instead of floored.
  • Removed GeoModelRefine and replaced with ModelFitter
  • Image Types
    • Improved and renamed interleaved image types
    • Added full support to all primitive data structures in interleaved images
    • Added ImageBase.subimage class variable
    • Added InterleavedImageOps
    • Added ImageMultiBand as a base class for multi-band images.
  • Generalized interpolation so that support can be provided for single-band and multi-band images.
    • InterpolatePixelS for single-band
    • InterpolatePixelMB for multi-band
  • Fixed sub-image support for ConvertBufferedImage.extract*
    • Thanks pcmoen
  • Calibration target detection
    • Locally adaptive thresholding is now used for square and chessboard target types. Less sensitive to lighting conditions
    • Chessboard target detector works much better on small targets. Uses QuadBlob corners to estimate initial calibration point position then uses mean-shift for refinement
    • Chessboard now orders calibration points using QuadBlobs. Allowing orientation ambiguity to be correctly resolved when the target is not symmetric.
  • ImplConvertBitmap incorrectly converted floating point images
    • Was doing an integer divide instead of a floating point divide
    • Thanks Vagoster for reporting the bug
  • KLT can now track features which partially extend outside the image
  • Image Interpolation
    • Almost all interpolation routines incorrectly treated pixels 1 outside of the image as inside. Unit tests have been added and other classes modified for the change in behavior.
  • Fixed FactoryDistort.scale(). Off by one error when specifying scale factor
  • SearchLocalPeak high level interface
    • For algorithms which perform a local search for a peak
    • Added two mean-shift variants
  • New examples
    • Estimating pose from calibration grids
    • Two examples for object tracking
    • How to remove perspective distortion
    • Added video stabilization example
    • Reorganized package structure
  • VisOdomDualTrackPnP
    • It is now possible for it to produce a fatal error when all its tracks are lost
    • Computes a descriptor of the feature each time as needed. Doesn't extract it from the track itself. Made the code base more complex. Maybe old version has a slight runtime speed advantage
  • Fixed overflow issue in HarrisCorner_S16 weighted and unweighted
  • Improved Maven support by breaking it up into multiple modules
  • Fixed bug in UtilWavelet for integer images. X and Y got reversed in for loop

Date  : 2013/06/21 Version : Alpha 0.15

  • Improved automatic thresholding for calibration grids
  • Fixed bug in Zhang99 calibration where skew was not being copied
  • Fixed stereo calibration bug where if a target was not detected in right image it wouldn't be removed from the left
  • Chessboard calibration
    • Support for targets which are not symmetric. Requested by Karim Hammoudi.
    • Much more tolerant of target which are visually small
    • Handles cluttered backgrounds better
  • Added support for OpenKinect in integration
    • Added related example code and applications demonstrating how to process its data
  • Can read/write PPM images
  • Added DepthVisualOdometry for computing visual odometry from a Kinect
    • Added several related classes and interfaces too
  • Added MonocularPlaneVisualOdometry for computing 2D motion from a camera when traveling over a plane
    • Two algorithms implement this interface
  • Generalized VisualOdometry interface to allow for arbitrary transforms
  • Cleaned up VisualOdometry and StereoVisualOdometry interfaces
  • Automatic rescaling of images for visual odometry
    • StereoVisualOdometryScaleInput
    • MonocularPlaneVisualOdometryScaleInput
  • Added VisualDepthParameters to specify calibration of RGB-D cameras
  • Added MonoPlaneParameters to specify calibration of single camera with a known ground plane
  • Added DistanceHomographyPixelSq so that the fit error for normalized homography can be computed in image pixels.
  • Added MultiViewOps.decomposeHomography().
  • Added more support for convert to/from 16bit BufferedImages
  • Added DoNothingPixelTransform_F32 for those times when you don't want to do anything
  • Added PairLineNorm for sets of line correspondences between two lines
  • Added algorithms for computing induced homographies from planes
    • Three points
    • Line and a point
    • Two lines
  • Added NearestNeighborPixel_U16
  • Added index setters and getters to GImageSingleBand
  • CreateSyntheticOverheadView for converting an image into an overhead view when the scene is planar
  • Added numBands to ImageDataType
  • Fixed type-o in triangulation JavaDoc. Thanks tverbele
  • Fixed bug in SIFT where a change in non-maximum behavior caused features to be detected too close to image border.
    • Thanks lefman for pointing it out
  • Fixed ConvertBufferedImage.orderBandsIntoRGB() for ABGR images. Thanks André Ambrósio Boechat
  • Maven build working again. Thanks JensKapitza for the help.
  • Moved boofcv/applet into boofcv/integration/applet

Date  : 2013/04/15 Version : Alpha 0.14

  • Added histogram to ImageStatistics
  • Calibration target's binary threshold is selected using image histogram to make it more tolerant to shadows
  • Calibration grid size does not refer to number of black squares any more. Instead to number of square total.
  • Added image enhancement operations
    • Global histogram
    • Local histogram
    • Sharpen 4 and 8
    • Demonstration to example directory
  • Interface for V4L4J to provide webcam support
  • ImageMiscOps
    • added fillBorder()
  • BinaryImageOps
    • Changed API and algorithms used to label blobs and find their contour
    • New algorithm is about 3x faster in all situations.
  • Canny edge has been improved
    • Can be configured to create a binary image output or a set of contours
    • Conour pixels are now ordered and returned as a graph
  • Fixed bug in FactoryImageBorder.value()
  • Color Models (Added)
    • Added HSV, YUV
    • Added new example demonstrating simple color based segmentation
  • XML Serialization
    • Switched over to using XStream since XMLEncoder is broken in Java 1.7.
    • XStream also produces easier to read XML
  • Added ConfigFast. Configuration class for FAST feature detector
  • Image Pyramids and Scale*Space
    • Added additional functions to ImagePyramid interface that provide information on how the image is sample and the amount of blur in it
    • There is no separate class for updating image pyramids any more. The image pyramid takes in the input image
    • Scale*Space pyramids have been moved into the pyramid package instead of having its own
    • Bug Fix: FeatureLaplacePyramid now looks for local maximum or minimum in searching across scales
    • Removed GaussianScaleSpace class since it can now be represented using ImageFloatPyramid
  • Added ExampleStereoDisparity3D and tweaked the first one
  • Shape Fitting (Added)
    • Fit polygon
    • Fit ellipse
    • Usage examples
  • BRIEF description computation is 30% faster
  • Made it easier to create mosaics from colored images and updated examples
  • Generalized several classes so that images other than single band can be used
    • VideoInterface
    • SimpleImageSequence
  • Added average down sampling and a related discrete image pyramid
  • Android: YUV to RGB now works
  • ExampleImageStitching has rendering code pushed into it

Date  : 2013/02/16 Version : Alpha 0.13

  • Removed TupleDescQueue
    • Use UtilFeature.createFeature() instead or extend FastQueue
  • Fixed bug in ImplSelectSparseStandardWta_* where peak checks for 0 disparity were incorrectly handled
  • FactoryPointSequentialTracker tweaked tracker configurations for better SFM performance
  • PointTrackerKltPyramid can now create new data to store tracks after init
  • Made scale configurable in corner based interest points
  • Renamed GeneralAssociation to AssociateDescription
  • Added AssociateDescription2D for association with location info
  • ScoreAssociateCorrelation no longer takes the abs()
  • SIFT
    • Accounts for offset during sub-sampling
    • Documents deviations from paper in pyramid construction
    • Tweaked pyramid construction
    • Tweaked non-maximum suppression
  • Improved handling of Max Features in SURF + SIFT
    • All features are considered in order of intensity
    • Features are no longer added once the max has been reached
  • Point Trackers
    • Renamed and changed function
    • Created interface for extracting feature descriptions
    • Added variant designed for two pass tracking
  • Chessboard and Square grid calibration target detectors
    • Made minimum blob automatically adjust to image size
    • Made it user configurable
    • These changes allow calibration of 320x240 images
    • Fixed multiple bugs/issues so that it detects targets more reliably
  • PerspectiveOps.scaleIntrinsic() changes image width/height
  • Improved unit tests for MultiSpectral images
  • ImageConvert
    • Added support for ImageSInt64
    • Added support for MultiSpectral to SingleBand using average
    • Added GImageConvert
  • Code to convert between different types of TupleDesc
  • Fixed bug in TupleDesc_F64 SAD scorer
  • Added approximate nearest neighbor from DDogleg
    • k-d tree best-bin-first
    • k-d random forest
  • Changing the way complex algorithm are configured
    • Instead of passing in parameters to a factory a config class is passed in.
    • Affected: SIFT, SURF
  • PixelMath
    • Fixed bug in PixelMath.subtract for ImageUInt8
      • Thanks Paul Dumais for reporting the problem
    • Added PixelMath.invert()
  • Associate and ScoreAssociation
    • Added ability to set a threshold via Associate interface
    • Can get a list of unassociate destination features
    • Can determine if the algorithm selects a unique match for source and destination
    • Created MatchScoreType to provide more information on the score's behavior
  • Created EasyGeneralFeatureDetector
    • Automatically handles image derivatives
    • Split off from WrapGeneralFeatureDetector
  • GeneralFeatureDetector
    • moved to alg package
    • can now detect local minimums
    • Removed ability to segment image. Turned out to not be all that useful, just increase the size of the non-maximum region.
  • Non-Maximum supression
    • Renamed FeatureExtractor to NonMaxSuppression
      • Removed the parameter for requesting the number of returned features
    • All algorithms contained a bug where the ignore border was being incorrectly enforced
    • Added support for detecting maximums and minimums
  • Fixed bugs in SortBestFeatures and added sort for negative peaks
  • GeneralFeatureIntensity: Added flags to indicate if features are maximum or minimums
  • Calibration package was missing from Maven build
  • Removed maxMatches from greedy assocaition since its not part of Association interface and can be easily added
  • Android
    • ConvertNV21 * Convert camera preview images into BoofCV image types
    • VisualizeImageData * Render different types of image information into a visible format
  • Fixed bug in RemoveRadialPto*_* where it couldn't detect convergence
  • 2D stabilization checks image fraction contained by points before spawning more points
  • LaplacianEdge added suport for U8 in and F32 out
  • Added kernel based (using LaplacianEdge) blob detector
  • GridRansacLineDetector has support for S16 an F32
  • Redesigned image stabilization and mosaic code
    • Much easier to work with now and can be plugged in a high level
    • Added a factory for creating related algorithms
  • Stereo Disparity: support for ImageSInt16

Date  : 2012/12/05 Version : Alpha 0.12

  • Fixed inverse wavelet transform so that it bounds the pixel values
    • Wavelet denoising sometimes overflowed
  • Adding new feature tracker which combines KLT and DDA style tracking
  • Updated Pyramid KLT tracker
    • Removed PkltTrackManager and pushed its functionality into the ImagePointTracker implementation
    • Was only separate for historical reasons
    • renamed PstWrapperPyramidKlt to PointTrackerKltPyramid
    • Deleted GenericPkltFeatureSelector and put into KLT point tracker
    • Moved what was left into KLT directory
  • ImagePointTracker
    • Changed contract, more fully specified contract, improved tests
    • Updated behavior of implementing classes
  • Deleted KeyFramePointTracker
    • Added pointless complexity. Use ImagePointTracker instead
    • Changed 2D and 3D SFM algorithms which were using it
  • Fixed bugs in various feature descriptors setTo() and copy() functions:
    • SurfFeature
    • TupleDesc_B
    • NccFeature
  • Feature Descriptors
    • No longer have hidden orienation estimation algorithms inside
  • Feature Orienation
    • Interfaces moved to abst package
    • Created wrappers to convert different types into image input
    • Added a new factory
  • Created DetectDescribePoint interface
    • Combines detection and describing into a single interface
    • Useful for algorithms which have coupled data structures are are more efficient this way.
  • FactoryPointSequentialTracker has been tweaked a bit
  • GeneralAssociation provides two functions for specifying the source and destination lists
    • Allows better optimization since preprocessing might only need to be done once
  • ConvertBufferedImage
    • Added support for sub-image BufferedImages
  • All numerics code has been put into its own project
  • Reworking several basic image operations
    • Created ImageMiscOps
    • Created ImageStatistics
    • Deleted ImageTestingOps
    • Changed PixelMath
    • Changed GeneralizedImageOps
  • Added setTo() in ImageBase
  • FastHessianFeatureDetector now recycles ScalePoints that it detects
  • Removed canoncialRadius() from feature detector and descriptor
    • It was poorly implemented
    • Was not consistent with scale-space theory
  • Added 2D convolution in KernelMath
  • Maven build has been added.
    • BoofCV is on the central repository
  • Added SIFT feature descriptor and detector
  • Removed seperable kernel
    • Wasn't being used and there is no need for it with more modern techniques
    • Plus it was causing a unit test to fail
  • Removed Gaussian12 and Steerable feature descriptors
    • They sucked and were not properly implemented limited their historical value

Date  : 2012/11/6 Version : Alpha 0.11

  • Association Score
    • Normalized Cross Correlation (NCC) has been fixed (yet again) in ScoreAssociateNccFeature where the abs() was incorretly being taken.
    • Fixed bug in NccFeature.setTo()
  • FactoryAssociation
    • Added NCC to defaultScore()
  • Template Matching
    • Added NCC template matching algorithm
    • TemplateScoreType: ERROR_SQUARED renamed to SUM_DIFF_SQ
  • ModelSet
    • Original index of inlier set can be requested now
    • Removed the ability to generate multiple hypotheses. Was not needed after all.
    • RANSAC score has been deleted and RANSAC simplified
  • RectifyImageOps
    • Cleaned up function names and improved documentation
  • LensDistortionOps
    • Added transformRadialToPixel_F64()
  • Reorganized functions in geometric vision package
    • Created MultiViewOps and PerspetiveOps
    • Refactored/deleted other related Util classes
    • Enums are now used to select which algorithm is returned in the Factory in many cases
    • New interfaces for each problem and improved JavaDoc
  • Moved AssociatedPair and PointPositionPair to boofcv.struct.geo package
  • Trifocal Tensor
    • Added related functions to MultiViewOps
    • Added linear estimator for 7+ points
  • PnP Problem
    • Added two P3P solutions
    • Analytic Jacobian for non-linear refinement
    • Refactored class names for better consistency
  • Fixed bugs in StereoSparse3D
  • Fixed bug in DistortImageOps.boundBox_F32()
  • Added ImageGridPanel to display a set of images as a grid
  • ModelMatcher added getMinimumSize()
  • Renamed PointPosePair to Point2D3D since the old name was misleading
  • Visual Odometry
    • Added stereo camera based algorithm that uses PnP for pose estimation
    • Removed broken mono and stereo algorithms
  • DetectAssociateTracker
    • Changed from an abstract class into a regular class
    • Deleted SURF,BRIEF,NCC specific implementations since they are no longer needed
  • AssociatedPair
    • renamed key and curr points to p1 and p2
    • new names are more generic and consistent
  • DetectAssociateTracker
    • Changed internal design a bit and fixed bugs
    • Performs well in structure from motion applications (2D and 3D)
  • ImagePointTracker accessors changed so that a storage list is requested
    • Makes usage easier since now its impossible to drop a track while reading from the main list.
    • Updated implementations so that the internal list is not returned
    • Removed addTrack() since only KLT supported that functionality, hence not generic.
  • ConvertBufferedImage
    • Fixed bug where INDEXED images where not being converted correctly

Date  : 2012/09/18 Version : Alpha 0.10

  • Association Score
    • Pushed implementations of ScoreAssociation into abst package
    • Put most association distance algorithms into DescriptorDistance
    • Added hamming lookup table
    • Brief now uses a look up table. About a 7x speed improvement.
    • FactoryAssociate now can create instances of ScoreAssociate.
    • Fixed incorrect NCC equation. Thanks Christian Kramer.
  • DescribeRegionPoint has been redesigned
    • Now more generic and can work with any feature descriptor
    • Separate function for checking to see if feature is inside bounds
  • TupleDesc
    • changed to an interface
    • functions added to provide some generic support
  • Brief descriptor renamed to TupleDesc_B
    • Acts as a generic binary feature descriptor
  • Descriptors
    • BRIEF and BRIEF-SO now can process features along the image border. Bit set to false in that case.
  • Visualization Apps
    • VisualizeAssociationScoreApp has score type in a separate panel and can support binary descriptors
  • InterestPointDetector
    • WrapFHtoInterestPoint now returns the correct detection radius
    • Fixed non-compliant implementations with incorrectly handled unsupported features. Thanks jasonnn for submitting this bug
  • FAST Feature Detector
    • Original implementation was buggy and did not produce same results as original author's code
    • Rewrote from scratch and replicates original author results
  • GeneralFeatureDetector moved from extract to interest package
  • Fundamental/Essential Matrix
    • 7-point algorithm now returns all solutions and the algorithm was tweaked
    • Nister 5-pt Essential Matrix
    • Abstractions which can handle multiple solutions
    • Stability evaluator for epipolar matrices
    • Improved unit tests
  • Polynomials
    • Various ways to find and polish polynomial roots (EVD and Sturm)
    • New data type and basic operations
  • Added ExampleStereoTwoViewsOneCamera
    • Demonstrates how to perform stereo image processing using a single camera and two views
  • LensDistortionOps
    • Added normalized to distorted pixel transform
    • Tweaked some of the function names
  • SparseIntegralSample_I32.isInBounds() did not return that correct value along the right and bottom image border
  • Functions inside of GThresholdImageOps did not return the number of blobs found like it should
    • Thanks jasonnn
  • NonMaxBlockStrict
    • Fixed bug where it assumed intensity values were all positive
  • TemplateMatching
    • Added code for template matching
    • Added example code to demonstrate its use
  • Added support for alpha channel in ConvertBufferedImage
  • FactoryPointSequentialTracker doesn't create trackers with FAST detector instead uses ShiTomasi to improve stability

Date  : 2012/7/22 Version : Alpha 0.9

  • Renamed factories
    • FactoryBlobDetector -> FactoryDetectPoint
    • FactoryCornerDetector -> FactoryDetectPoint
  • Renamed KLT corner to Shi Tomasi corner, which is more standard
  • Fixed bug various point detectors where if the input image was resized the edge intensity might not be zero when it should be
  • Changed some corner detection algorithms to take the intensity image in as an input.
  • Added new Pixel to Normalized transform
  • Created interface for Stereo visual odometry
  • Fixed bug in unsafe_set inside of ImageInt8
  • Added unsafe_set() and unsafe_get() to ImageFloat32, ImageFloat64, ImageSInt64
  • Fixed bug in ImageSInt64.set() where the value was cast into a short
  • Changed transform* functions inside of DistortImageOps so that you can specify how outside image pixels are handled.
  • Fixed bug in ImageHistogramPanel - reported by Ray
    • Added support for integer images
  • Integration
    • Created ant build scripts
    • Updated Xuggler integration code
    • Added Android
  • Generalized SimpleImageSequence so that it does not reference BufferedImage and will play nicer with Android
  • Fixed bug in ImplImageDistort* where for 16bit and 32 bit images values were being type casted into bytes
  • Changed UnconstrainedMinimization so that the minimum function value is specified in setFunction()
  • Added ExampleContours
    • Thanks cspnanda for pointing out the lack of documentation
  • New non-maximum suppression algorithm
    • About the same for 3x3 regions, much faster for larger regions
    • Tweaked related API and improved unit tests
  • Fixed bug in WrapDescrivePixelRegion where the descriptor is not properly configured for integer images

Date  : 2012/05/13 Version : Alpha 0.8

IMPORTANT Discard old calibration files and calibrate again with latest code!

  • Added processing monitor to CalibrateStereoPlanarGuiApp
  • Fixed bug in Zhang99 calibration where Rodrigues coordinates were being parameterized incorrectly
    • Calibration results would be less accurate, but have a lower residual due to the increased degree of freedom
  • Added analytic Jacobian to Zhang99
    • Decided not to use it since it produces same estimation parameters as numerical.
  • Added functions for creating detectors in FactoryPlanarCalibrationTarget
    • changed code to reference those functions
  • Stereo Disparity Image
    • Dense and Sparse algorithms
    • Rectangular region winner take all (WTA)
      • Validation: right to left, max error, texture
      • Precision: Pixel and Subpixel
    • Algorithms:
      • Basic rectangular region
      • Five region adaptive: Hirschmuller, et. al. "Real-Time Correlation-Based Stereo Vision with Reduced Border Errors," 2002
  • IntrinsicParameters
    • Added flipY to parameter list since it is vital information for many calculations.
  • RectifyImageOps
    • Fixed bug in functions that adjusted the rectification for viewing. If left handed the coordinate systems got messed up
  • Changed allInside() so that the annoying single pixel black region is gone
    • RectifyImageOps and LensDistortOps
  • FactoryCornerDetector
    • Added flag for weighted KLT and Harris
  • Added weighted corners to list of features in some evaluation apps
  • Examples:
    • ExampleCalibrateMonocularPoints
    • ExampleDetectCalibrationPoints
    • ExampleStereoDisparity
  • ImageTestingOps
    • Flip image vertical
  • Fast point cloud viewer

Date  : 2012/04/22

Version : Alpha 0.7

  • Redesigned how evaluation apps/applets handle data input and configuration
  • Removed the epipolar directory
    • More than just stereo algorithms in there
  • Camera calibration outputs XML file containing intrinsic parameters
    • Java XML serialization
  • For square calibration grids, added sub-pixel refinement using canny edge
  • Fixed a bug in camera calibration where it transposed the grid instead of rotating it if the number of rows/columns needed to be swapped.
  • 3D Vision Algorithms
    • Estimate translation given rotation and two observations
    • Refine pose estimate given set of 3D points and observations
    • Interface for n-view triangulation
    • Bundle adjustment for calibrated cameras
      • Analytic Jacobian
      • A bit slow right now
  • Changed behavior of GeneralFeatureDetector
    • Supports sub-region extraction. Forces features to be more spread out
    • Max N now is the total number of features, including excludes
  • Improved speed of Levenberg algorithm by taking advantage of symmetry
  • UtilEpipolar
    • Added canonicalCamera() and decomposeCameraMatrix()
  • Created the following Util and Ops classes
    • UtilIntrinsic
    • LensDistortionOps
    • RectifyImageOps
  • Stereo Rectification
    • Calibrated with known baseline
    • Uncalibrated, from using a fundamental matrix.
    • Adjust rectification to maximize usefull viewing area
  • New Examples
    • Estimate fundamental matrix
    • Rectify calibrated
    • Rectify fundamental matrix
    • Remove lens distortion
  • The feature score was not being set in WrapAssociateGreedy
    • Thanks Nir Amar
    • Also changed AssociateSurfBasic for a similar reason
  • Fixed problem in FundamentalResidualSampson where the denominator was being squared
  • Fixed problem in Se3 Essential generator
  • Changed positive depth constraint class

Date  : 2012/03/01

Version : Alpha 0.6

  • Added convolution related code for ImageSInt32
  • Added weighted KLT and Harris corner detectors
  • Refactored factory names and other classes to make them easier to find and more consistent
  • Planar calibration grid detectors
    • Chess board pattern
    • Square grid pattern
  • Generic code for detecting squares in binary images
    • Inside of calibration module
  • Application for calibration from planar calibration targets
    • GUI and commandline
  • ImageDistort
    • Fixed bug where border.setImage() was not being called
  • ImageBorder
    • Added generalized get(x,y)
  • Refactored FactoryImageBorder into two factories
  • Fixed bug in several derivative operators where the passed in border was being ignored and an extended border being used instead
  • Change ImplImageDistort* to use interpolate.get_unsafe() to speed it up by a large margin
  • Moved ImageDistort from boofcv.alg.distort to boofcv.struct.distort
  • Added PointTransform_F32
  • Added both forward and reverse radial distortion PixelTransform_F32 implementations
  • ModelMatcher classes can now create multiple model hypotheses from a single set of points.
  • Changed ImagePointTracker to use PointTrack instead of AssociatedPair
    • Created KeyFramePointTracker to track features and create AssociatedPairs
  • Added FactoryEpipolar
  • Added FactoryTriangulate
  • Added non-linear refinement for:
    • Fundamental/Essential matrix
    • Homography matrix
    • Triangulation
  • Added 2-view and N-View triangulation algorithms
    • DLT
    • Closest point from two lines
  • Added EPnP from Lepetit 2009 paper
    • Validation against author's code is pending
  • Added color processing to several Apps
    • EvaluateInterpolateEnlargeApp
    • ShowImageBlurApp
  • Added SimpleNumberSequenceReader for reading small sequences of numbers
  • Added lens distortion app
  • Found sudbtle bug in Harris corner detector.
    • Surprisingly doesn't seem to change output.

Date  : 2012/02/01

Version : Alpha 0.5

  • Improved SURF performance
    • Fixed various bugs and changed algorithm to improve performance
      • Both speed and stibility have been improved
    • Now is the best performing SURF implementation in the benchmark
  • ImplOrientationSlidingWindowIntegral has been replaced with a faster and more accurate algorithm
  • Improved integral image support
  • Improved sparse gradient support
  • Refactored sparse image operator code
    • Added SparseImageSample interface
  • Added/Improved unconstrained non-linear optimization code
    • Quasi-Newton line search
    • Levenberg-Marquardt
  • Geometric vision and calibration code which uses non-linear optimization now works correectly
  • Started converting internal micro benchmarks to use Caliper

Date  : 2012/01/06

Version : Alpha 0.4

  • Changed behavior of ConvertBufferedImage so that it won't automatically swap bands in MultiSpecitral image
    • orderBandsIntoRGB() has been provided to do that manually if needed
  • All automatic convert to/from BGR and been removed from ConvertRaster
  • Fixed SURF related issue
    • Image bounds check was being incorrectly performed for integral image orientation estimation algorithms (Thanks Oleg Chernoguz for pointing this out)
    • FactoryOrientationAlgs.sliding_ii() was creating an average orienation alg for I32 images
    • Some coordinates were integer instead of double
  • Added comments to several factories and other classes
  • Added ant script for examples and readme.txt explaining how to use it

Date  : 2012/01/02

Version : Alpha 0.3

  • Camera Calibration
    • Planar grid (Zhang 98)
    • Camera calibration matrix from homographies
    • Linear radial distortion
    • Decomposition of homography for calibration
    • Nonlinear optimization of all parameters
  • Calibration Grid Detection
    • Detects corners up to "pixel accuracy", in reality its probably worse than that
    • Sub-pixel accuracy code exists but needs more work
  • Added min and max values to ImageTestingOps.addGaussian()
  • Tweaked factories related to wavelet denoising so that they take in an image type.
  • Removed cyclical dependency between modules by creating a visualize modules
  • Added to BinaryImageOps
    • label to clusters
    • clusters to binary
  • Renamed ImageBase to ImageSingleBand
  • Created a new ImageBase
  • Flushed out MultSpectral image type more and extended ImageBase
    • Created functions to convert to and from BufferedImage
  • Changed behavior of several functions in GeneralizedImageOps to include MultiSpectral images
    • refactor createImage -> createSingleBand
  • Updated ant scripts
    • Common template is now used for the different modules
    • Fixed unit test and make it work across the whole project
  • Added crop to ImageDistort
    • If cropping is used the only part of the destimation image is processed
  • Created calibration package to hold calibration related code
  • Moved jars not part of the primary build into boofcv/lib/testing
  • Started converting runtime benchmark code over to Caliper

Date  : 2011/12/01

Version : Alpha 0.2

  • Added integer polynomial interpolation
    • Cleaned up polynomial interpolation code
  • Fixed bug in PixelMath.bound() dealing with unsigned images
  • Converting to a BufferedImage now marks it as modified
  • Added min and max pixel values to ImageTypeInfo
  • Added ComplexMath
  • Added PolynomialSolver
  • Added process(image) to PointSequentialTracker and renamed it to ImagePointTracker
  • Added the following 3D vision code:
    • Linear 8-point essential/fundamental matrix
    • Linear 7-point essential/fundamental matrix
    • Linear 4-point homography
    • Extract camera motion from essential
    • Extract camera and plane normal from homography
    • Triangulate: Linear pixel depth
    • Projective N Point (PNP): Linear N >= 6
  • Added non-linear optimizer based upon Levenberg-Marquardt
  • Added pixel region based descriptors
    • Raw pixel values
    • Normalized Cross Correlation (NCC)
  • Added pixel region based trackers
  • Added Sum of Absolute Difference (SAD) score for feature association with a few different descriptor types.

Date  : 2011/11/01

Version : Alpha 0.1

  • Initial public release