Difference between revisions of "BoofCV Change Log"

From BoofCV
Jump to navigationJump to search
m
m
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
Change Log
Date    : 2016/12/07
Version : 0.26


Date Format: year/month/day
* Fixed a long standing unit test issue where convolve unit test would some times on some systems erratically fail
 
** Appears that sometimes the random numbers caused a buffer overflow for U8 images
---------------------------------------------
** Now why it didn't have the exact same numbers every time when it has a fixed seed is disturbing...
Date    : 2014/6/19
* Renamed EquirectangularTo* to *ToEquirectangular
Version : Alpha 0.17
** Those classes convert pixels in * coordinates into their location in the equirectangular image
 
** They are used to generate a * image from equirectangular
* Improved/Fixed serialization
* Float 32bit auto coding switched over to using auto64fto32f library
** Several classes were missing no argument constructors
* TypeInterpolate is now InterpolationType for consistency
* Added ImageMiscOps.flipHorizontal()
* Examples
* Added WeightSample2D_F32 for computing the weight of a sample in an abstract manor
** InterpolatePixel added
** Reduced MeanShiftPeak from 3 classes into one
** Image blur added
* Edge Non-Maximum suppression's documentation now clearly states that it suppresses only if adjacent pixel is
** Non-Maximum Suppression added
  less than.  This is not true non-maximum suppression since it allows equal values but seems to produce
* Demonstrations
  better results
** Improved DemonstrationInterpolateScaleApp (renamed also)
** Improved unit tests to explicitly test for this behavior
** Added DetectBlackEllipseApp
* Canny edge detector would fail if threshold was zero and the image had no texture
* Gradle
** HysteresisEdge* code was using a value of 0 to mark traversed regions.  It now uses -1 and sanity checks
** Will fail on dependency version conflict now
    the lower threshold.
** Will fail when building release with SNAPSHOT dependencies
** Thanks Lucaro for finding this bug
** Resolved xstream version conflict
* Added GImageMultiBand for generalized access to multi-band image data
* Updated DeepBoof
* Added support for MultiSpectral images to:
** This is to get around an issue with a java wget library where it would hang instead of giving up
** GBlurImageOps and BlurImageOps
** New code is also much more informative and prints out size info and download status\
* Image Segmentation / Superpixels
* Visualization
** Watershed
** Removed a bad +PI/2 from ellipse rendering.
** Mean-shift
* SnapToEllipseEdge * Fixed bug where it was only performing one iteration no matter what
** Felzenszwalb-Huttenlocher 2004
* Circle Asymmetric Grid Target
** SLIC Superpixels
** Fixed issue which was causing clusters not to form by not limiting number of neighbors within X distance
* Dense Optical Flow
** When clustering ellipses orientation and major/minor axis size is now taken in account.
** KLT Based
** Significant net improvement in regression tests, only drop in performance in blurred images
** 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
** http://ddogleg.org
* 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
** http://code.google.com/p/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

Latest revision as of 21:16, 7 December 2016

Date  : 2016/12/07 Version : 0.26

  • Fixed a long standing unit test issue where convolve unit test would some times on some systems erratically fail
    • Appears that sometimes the random numbers caused a buffer overflow for U8 images
    • Now why it didn't have the exact same numbers every time when it has a fixed seed is disturbing...
  • Renamed EquirectangularTo* to *ToEquirectangular
    • Those classes convert pixels in * coordinates into their location in the equirectangular image
    • They are used to generate a * image from equirectangular
  • Float 32bit auto coding switched over to using auto64fto32f library
  • TypeInterpolate is now InterpolationType for consistency
  • Examples
    • InterpolatePixel added
    • Image blur added
    • Non-Maximum Suppression added
  • Demonstrations
    • Improved DemonstrationInterpolateScaleApp (renamed also)
    • Added DetectBlackEllipseApp
  • Gradle
    • Will fail on dependency version conflict now
    • Will fail when building release with SNAPSHOT dependencies
    • Resolved xstream version conflict
  • Updated DeepBoof
    • This is to get around an issue with a java wget library where it would hang instead of giving up
    • New code is also much more informative and prints out size info and download status\
  • Visualization
    • Removed a bad +PI/2 from ellipse rendering.
  • SnapToEllipseEdge * Fixed bug where it was only performing one iteration no matter what
  • Circle Asymmetric Grid Target
    • Fixed issue which was causing clusters not to form by not limiting number of neighbors within X distance
    • When clustering ellipses orientation and major/minor axis size is now taken in account.
    • Significant net improvement in regression tests, only drop in performance in blurred images