forked from lessthanoptimal/BoofCV
-
Notifications
You must be signed in to change notification settings - Fork 0
/
change.txt
1065 lines (1019 loc) · 49.5 KB
/
change.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Change Log
Date Format: year/month/day
---------------------------------------------
Date :
Version : Alpha 0.21
- Scale-Space Features
* getScale() has been replaced with getRadius(), which refers to the radius of the detected object
- SURF
* Fixed a bug dealing with gradient calculation and improved stability for very small objects
* Exposed an inner parameter. You can now change the kernel size increment between scales
- WebcamTrackFiducial renamed to FiducialDetection
* Can now process more inputs sources; still images, videos, and webcams.
* Output to a file is a possibility
- Renamed SurfFeature to BrightFeature
* Used by SURF and SIFT, so the name was made more generic
- SIFT
* Complete rewrite of detector and descriptor
* Very similar to original paper by Lowe
* One common difference is the use of quadratic interpolation instead of the overly complex thing that
Lowe proposed
- Dense SIFT
* Optimized code for computing dense descriptors at a fixed scale in a grid across the entire image
- Black polygon detector
* can now handle features along image border
* fixed a couple of bugs inside refine function too
* improved false positive rejection (e.g. squarish bright lights)
- Square Fiducials
* Threshold is now done using the average of pixel intensity along the fiducial border
* Image border is used to remove false positives
- Change / Clarified behavior of non-maximum suppression classes
* Border refers to the border around the image in which extremes cannot be found
* A pixel inside the border can have a value larger than one inside the image and prevent it from being considered
an extreme
- FactoryPlanarCalibrationTarget renamed to FactoryCalibrationTarget
- Improved visualization in ShapeFitContourApp
- ConvertImage
* Interleaved to MultiSpectral
* MultiSpectral to Interleaved
- Chessboard detector
* Links squares together using corners instead of two grids
* TODO Can handle squares clipped by image border
- Square Grid Detector
* Changed how the pattern is specified. Based on black squares now
- DetectLineHoughPolar
* Fixed issue were a strict non-maximum was used when a non-strict was needed causing valid lines to be discarded
- WebcamCapture
* Provided an easy to use function that allows you to open devices by their /dev name
- Android
* Will automatically detect if image needs to be rotated 180 degrees and then does it. Needed for the Nexus 5x
- TODO Partial chessboard
* global threshold
* local threshold
- TODO See if contour can be improved by splitting line then applying the rule to each half
- TODO create a few more unit tests which highlight this issue
---------------------------------------------
Date : 2015/11/09
Version : Alpha 0.20
- Improved pose stability of calibration targets as fiducials
* Turns out they were using a linear estimate only
* Now uses EPnP followed by a few steps of non-linear refinement
- PerspectiveOps.createIntrinsic() which creates intrinsic parameters from a known FOV and image shape
- New WebcamInterface and some examples now can run on your webcam
* Requires WebcamCapture
- ExamplePointFeatureTracker has colorized points to make it easier to identify the same point
- Polygon Detector
* Simplified code by removing requirement the CW/CCW must be known by helper classes
- BinaryPolygonConvexDetector
* Much improved performance on non-square like shapes
* Stability is much better on very small shapes
- Merged data/applet and data/evaluation together
* Renamed to data/examples
- Renamed package boofcv/evaluations to boofcv/demonstrations
* It no longer served as a place for benchmarks
- VisualizeBinaryData
* Marked buffered image as dirty when rendering a labeled image
- Removed Processing from project
* Might spawn into its own project if there is more interest in the future
- Binary Thresholding
* Created a generic config class which supports all current types
- Square Fiducial Generator App
* no longer defaults to a page border of 1cm
* page border is actually user configurable
* border and white border are correctly handled
- Square Binary Fiducial
* Can now handle grids with arbtirary widths!
- Thanks Nathan Pahucki npahucki@gmail.com for submitting this pull request
* The width of the border can now be adjusted too
- Moved PyBoof to it's own repository at https://github.com/lessthanoptimal/PyBoof
* It will be update on its own cycle
- Chessboard Detector
* Improved stability especially for slightly blurred images
- PointTrackerKltPyramid
* Fixed uninitialized variable in one of the constructors. Thanks ericbhatti
* Change it from two constructors down to one constructor
- Created built in class for removing perspective distortion
* RemovePerspectiveDistortion
- Partially observable calibration targets are now supported
* Mathematically at least. Targets which can be partially observed are not supported yet
- ConvertBufferedImage.stripAlphaChannel()
* Can be used to ensure that an alpha channel is not in the buffered image
* Inspired by an issue pete-experimenter had
- Renamed FiducialDetector to FiducialPoseDetector
* Done to accommodate fiducials in which you don't care about the pose
- Morphological Thinning has been fixed and tweaked
* Thanks Emil Hellman who first pointed out the issue and helped solve/improve the implementation
- Locally adaptive threshold techniques that had a bias term now have a scale term.
* Much more useful since bias was intensity and value range dependent
---------------------------------------------
Date : 2015/09/20
Version : Alpha 0.19
- Removed -1 from CachedSineCosine_F32
* Change suggested by Jochem
* Original code could cause problems for edge cases in hough transform
- Moved BufferedImage to IO package since it is swing dependent
* Suggested by Baha Elkassaby
- JCodec
* Formally added it back in since it works on Android videos
* Added utilities to convert Picture into BoofCV formatted images
- Images can be serialized again
* Made ImageType serializable now
* Fixed bug where subimages were not assigned an image type.
- Scene classification
* Bag-of-Words based techniques
* K-Nearest-Neighbor classification. Learning and Classifier
- Image setTo() will now automatically resize the image to match it's input
- Added invert option to visualizing binary images
* swing and android
- Added in-place CW and CCW image rotation
- Fiducials
* Image square fiducials can now have their width individually set
* Square based fiducials now use the new polygon detector and benefit from its improved subpixel
* Fixed bug where the returned orientation was inconsistent with the JavaDoc
* Fixed another bug that caused the sides to "flip" depending on view angle
* Handling of small far away fiducials being viewed head on has improved much
- PerspectiveOps
* Can render pixel in camera frame using IntrinsicParameters
- Created FactoryMultiViewRobust for simplifying the creation of robust versions of
solutions to PnP, essential, homography
- Camera Model
* Support for tangential distortion has been added
* Intrinsic parameters can now use a flow style assignment of parameters
* Removed support for flipY to simplify the code. Just flip the image if this is an issue.
* Lens distortion. More abstracted
- LensDistortionOps
* refactored several functions to make it more consistent and easier to use
* Change fullView to expand
* Many functions will now correct for lens distortion.
- Square grid calibration target
* Fixed. Multiple bugs were introduced at some point in the past but were not caught due to the
lack of regression tests
* Change underlying algorithm. Now uses polygon detector for corners.
- Chessboard calibration target
* Complete re-write. Now uses polygon detector
* Corner precision appears to have improved and runs faster
- Calibration
* A single class fully specifies the calibration target now
* Intrinsic parameters can now use a flow style assignment of parameters
- Interpolation
* Can specify a border handling algorithm now
- PixelMath
* Added minus(image,scalar)
* Added minus(scalar,image)
- Distortion
* Scale once again goes from in.width/out.width instead of (in.width-1)/(out.width-1)
- The former is correct, but you have to deal with interpolating values like 9.5 when there are 10 pixels (9 is largest index)
* Added FDistort
- Much easier to use and more flexible than the procedural fuctions in DistortImageOps
- FactoryDerivativeSparse
* Added sobel, prewitt, three, two0, two1
- Gradient Two0 and Two1
* There are two different ways to define the gradient from two samples, depending on the zero index.
* Two0 is [1] - [0] and Two1 is [0] - [-1].
* Before only one of these variants was available
- UtilImageIO
* Can save an image directly that is in BoofCV format
- Shape Features
* Corner fitting algorithm that uses the tangent of the gradient
* Black convex polygon detector
* Polygon fitting
- ShowImages
* Will now display any BoofCV image directly.
- Android
* Can convert from 8888 to 3 channel multi-spectral images
* Moved NV21 out of Android because it's also useful with Webcams
- Added support for YV12 image format
- BinaryImageOps
* BinaryImageOps.labelToBinary() now has an easier to use variant. No need to explicitly declare a boolean array
* Added thin() operator for thinning/skeletonization
- Template Matching
* Can provide a mask for a template and effectively make pixels transparent or translucent
* Requested by Rafael Maus and others
- ConvertBufferedImage
* Tweaked defaults for boof to BufferedImage. Single band images return single band images.
- Thanks thhart for pointing this out
* Added partial support for images encoded with SunWritableRaster
* Much improved support of BoofCV Interleaved images
- ThresholdImageOps
* Changed threshold up from >= to >.
* Turns out the original choice was bad. Images were not inverses of each other
* Was possible the threshold an image with two values up and end up with all 0.
- PyBoof has been added to integration
* Python wrapper for BoofCV
* Thanks Romotive allowing donating this code!
- GHistogramFeatureOps, Histogram_F64, HistogramFeatureOps
* Computes color histograms with the intent that they can be used as features
* Supports an arbitrary number of color bands
* Can also be computed from a list of pixel values
* arbitrary min/max values and number of bins also supported
* Example added demonstrating how to look up images with similar histograms
- GImageDerivativeOps
* General cleaning up the API
* Fewer functions, but uses enum for specific type
* Function for AnyImageDerivative is clearly named and more useful
- ImageMiscOps
* fill band and bands
* insert band
- Background Model / Motion Detection
* For stationary cameras and moving cameras
* Basic: pixels modeled with a fading average
* Gaussian: pixels modeled with a fading Normal distribution
---------------------------------------------
Date : 2014/9/22
Version : Alpha 0.18
- Renamed ImageSegmentation to ImageSuperpixels
* Added a unit test which ensures connectivity requirement is meet
* Fixed issue with SLIC where it did not set its ConnectRule
- Renamed ExampleStructureFromMotion to ExampleMultiviewSceneReconstruction
- Processing
* Gradle copies over processing JavaDoc
* Fixed SimpleTrackerPoints.spawn() which did not update the tracks before
* Added more comments to examples
- Removed Caliper dependency
* Not designed the way I want it to be and recent changes made it less usable
- Removed v4l4j support since Webcam Capture is easier and does a better job
- Fixed OpenKinect examples
- ImageDistort now supports a different input and output types
* Support is provided for the same image type
* It now allows for all types to float 32. Interpolation always outputs a floating point value.
- ThresholdImageOps
* Otsu's method
* Entropy based method
* Sauvola
- Fixed problem in FilterImageReflection where it assumed two arguments but some binary operations have 3 now
- Added pow2 and sqrt to PixelMath
- Added invert to BinaryImageOps
- Added rotateCW and rotateCCW to ImageMiscOps
- FilterImageInterface
* Reference ImageBase instead of ImageSingleBand
* Can get output type
- InputToBinary = Interface for converting an arbitrary image into a binary one
* Added wrappers/implementations for all current thresholding techniques
- Fiducial Detector
* Square-Binary. Encodes 4096 numbers
* Square-Image. Detects arbitrary image fiducials contained inside a square.
- Fixed bug in ColorHsv for multi-spectral images
* Was missing a check to see if saturation was zero
* Thanks sandreas for reporting the bug
- GConvolveImageOps
* Fixed generics so it wasn't forcing input and output to be the same type
- Added ExampleConvolution
- Convolution
* ConvolveNormalizedNaive correctly handles offsets in the kernel
* 2D convolution correctly supports offset. Before it used radius no matter what
* Normalized convolution makes sure the input kernel sums up to 1 for floating point
- Processing
* Added new thresholding and fiducials
---------------------------------------------
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
* 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 are 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
- Added SIFT feature descriptor and detector
---------------------------------------------
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 subtle bug in Harris corner detector.
* Surprisingly doesn't seem to change output that much.
---------------------------------------------
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