-
Notifications
You must be signed in to change notification settings - Fork 261
/
change.txt
2442 lines (2320 loc) · 111 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
Version Meaning: <compatible>.<feature>.<bug fix>
- First digit indicates if there has been a "major" refactoring or a ton of new features
- Second digit indicates if a new feature was added and/or if only a minor refactoring has been done
- Last digit always indicates a bug fix and other minor changes
---------------------
Date : 202X/XXX/XX
Version : 1.1.8
- PackedArray
* Added isEquals()
---------------------
Date : 2024/Oct/05
Version : 1.1.7
- Fixed backwards compatibility issue in MultiViewIO cause by last release
---------------------
Date : 2024/Sep/06
Version : 1.1.6
- Homogenous -> Homogeneous (Wide spread spelling error)
---------------------
Date : 2024/Jun/27
Version : 1.1.5
- PerspectiveOps
* Added pointAt()
- Quality of life features added to various array types
- Support for textured mesh reading and rendering
- Fixed camera for 3D mesh viewer so that it actually points at the object
- Updated Android and other dependencies
---------------------
Date : 2024/May/14
Version : 1.1.4
- TupleDesc
* Added isEquals()
- Added PackedTupleArray interface
- Updated: AssociatedIndex, NccFeature
- Bug Fix: RecognitionVocabularyTreeNister2006
---------------------------------------------
Date : 2024/Feb/24
Version : 1.1.3
- CalibrateStereoPlanar provides valid results once again
- Android
* Switched to using andndroidx.annotation for @Nullable
---------------------------------------------
Date : 2023/Nov/05
Version : 1.1.2
- Android
* Better handling when the camera becomes inaccessible while it was reading it
- WorldToCameraToPixel
* Supports homogenous coordinates
- BundleAdjustmentMetricResidualFunction
* Fixed bug with homogeneous coordinates and rigid objects
---------------------------------------------
Date : 2023/Sep/24
Version : 1.1.1
- Updated dependencies so that a bug in EJML could be fixed
- The bug caused bundle adjustment to fail if all views were fixed.
---------------------------------------------
Date : 2023/Sep/9
Version : 1.1.0
- Calibration
* Support for multiple calibration targets
- Bundle Adjustment
* Can prune by reprojection error now
* Support for pruning observation of rigid objects
- Android: CameraProcessFragment
* A few small bug fixes and quality of life improvements
---------------------------------------------
Date : 2023/Aug/21
Version : 1.0.0
- Version
* Arbitrarily declared this as version 1.0.0
* This was done to make version info more informative.
* Originally it was decided that when face detection was added that would be 1.0 and that's still not on the menu
- Bundle Adjustment
* Added a way to specify the camera state when a frame was captured
* Added a new camera model that adjusts the focal length based on zoom factor
- Calibration
* Tangental -> Tangential for consistency
---------------------------------------------
Date : 2023/July/15
Version : 0.44
- SimulatePlanarWorld
* Handles edge of objects better making motion appear smoother
- MicroQR
* Rendering doesn't crash in special situations if you specify error level. Thanks for reporting Simon-Staal
* You can ignore padding bytes now. Thanks for reporting Simon-Staal
- Demos
* Added a color segmentation demo. Thanks Maxim Dossioukov.
- Android
* Completely new build system that doesn't use any local files
* New fragment camera code is available for use
* Thanks Maxim Dossioukov for getting the first prototype of the build running
- Security
* When de-serializing YAML it now uses Yaml(new SafeConstructor()) to prevent arbitrary code execution
* Thanks Letian Yuan for the disclosure
* SerializeFieldsYamlBase now has a whitelist of what can be deserialized
- Disparity
* Fixed a catastrophic cancellation (CC) issue with floating point math with disparity score.
* This CC issue effects SAD and NCC when dealing with distant objects.
* Sub-pixel math is adjusted depending on type of error function. Improved SAD and CENSUS subpixel
* Most application won't see a significant change in performance
---------------------------------------------
Date : 2023/May/31
Version : 0.43.1
- ImageLinePruneMerge
* Fixed NPE introduced in the previous fix that was somehow missed
- QR Code
* Padding bytes are ignored by default so that poorly encoded markers can be decoded
* Thanks Simon Staal for identifying this "issue"
---------------------------------------------
Date : 2023/May/15
Version : 0.43
- ImageLinePruneMerge
* Fixed type-o in near intersection formula. Thanks Erhan Erdemir for finding the problem.
- PointCloudIO
* Added support for STL mesh files
- Added a mesh viewer
* Swing panel, multiple controls, and help
* Generic rendering engine
---------------------------------------------
Date : 2023/Feb/20
Version : 0.42
- Build
* Added StandardStructChecks for simple data structures for follow setTo() reset() pattern
- QR Code
* An incorrectly encoded QR message will no longer cause an exception
* More support for VerbosePrint interface
- Applications
* Command line application for multi camera calibration
* PDF Titles for Fiducials are now independent of file name and informative
- Image Data Type
* forEachPixel added to interleaved images
- Image Restoration
* Geometric Mean filter
* Adaptive mean filter
- Reconstruction
* Support OBJ file format
---------------------------------------------
Date : 2022/Sep/02
Version : 0.41
- Applications
* Added Aztec Code generator
* Removed unused flag to disable printing info in PDF documents
* QR and other markers no longer require spacing between markers when there is only a single marker
* Fixed units in manually specified document size
* Create Calibration: Fixed units in manually specified paper size
* Create Calibration: Fixed disable info flag
- Android
* Properly handles multi camera systems by finding physical cameras inside a logical camera
- Demonstrations
* Better Micro QR Code visualizations
- Contour Tracing
* Can specify max and minimum contours using fractional size, i.e. ConfigLength instead of int
* Added ability to specify maximum contour in places it was missing
* ConfigPolygonFromContour doesn't produce identical results, but very similar
- ConvertBufferedImage
* RGBA with pre-multiplied alpha will have channels swapped correctly
* BufferedImage sub images work again, Thanks GenieTim
- Added Aztec Code encoder and decoder
- QR Code
* Fixed issue where it was rejecting version 1 QR codes at a highly skewed angle
* Fixed issue where it failed to detect all QR when there was a cluster of several high version
* If error correction passes it will stop processing the QR. Easier to diagnose issues.
- Micro QR Code
* Doesn't keep on trying to decode a marker if it fails after the ECC check
- Various
* Fixed crash in Niblack Family when output image was not resized to match input image
* Image.setTo() now returns 'this' to enable chaining.
* Can now colorize points based on camera reference frame, not just global
* PlyCodec - writes correct header for little endian
- Stereo Disparity: Fixed bug where invalid values got cast to a byte when image was float, causing artifacts.
- RansacCalibrated now support concurrency
- Stereo
* There's now the option to save the fit score for each pixel
- Photogrammetry
* Three-View Reconstruction: Does self calibration entirely inside of RANSAC
* Added ResolveThreeViewScaleAmbiguity
* N-View reconstruction code now directly uses the 3-view class and skips a projective scene step
* MultiBaselineDisparity now fuses into an inverse depth image
- 3D Mesh
* Added related example code
* Added support for saving mesh + color points to PLY
* Added algorithms for converting stereo disparity into a 3D mesh
- Calibration
* Mono and Stereo apps now generate calibration quality metrics for coverage and geometry
* Mono and Stereo GUIs have option to show border and inner coverage
* Added Division camera model
* Added multi camera calibration
- ImageMiscOps
* Added maskFill()
* Added a generic filter()
---------------------------------------------
Date : 2022/Jan/24
Version : 0.40.1
- Build
* Compiles using Java 17. bytecode is still Java 11
* Updated to Gradle 7
- Applications
* Batch scanning of Micro QR Codes
- QR Code and Micro QR Code
* Much stricter and more accurate test that looks for UTF-8 strings in BYTE data
* Config has defaultEncoding which is the encoding it uses if it decides BYTE isn't UTF-8
* Added an example demonstrating how raw data can be used ExampleQrCodeRawData
* Added JMH Benchmarks for regression testing
- Concurrency
* Added threaded KLT tracker
---------------------------------------------
Date : 2022/Jan/17
Version : 0.40
Build
- Added sanity check that makes sure autogenerate has been run already first and prints out a helpful message
- Fixed accidental Lombok dependency
- Added NullAway again
Misc
- Config classes now must implement setTo() which returns 'this' to allow chaining and easy copies
- ImageBase.reshapeTo() replaces matchShape()
ImageProcessing
- Added ImageMiscOps.transpose()
Background Model
- Created threaded implementations of stationary and moving
- Added internal benchmarks for moving
QR Code
- Added ability to decode transposed markers. Can be turned off.
- Records number of bit errors detected by error correction
Micro QR Code
- Added support for reading and generating
DemoThreeViewStereoApp
- Fixed handling of gray images. Thanks mb for reporting the issue!
---------------------------------------------
Date : 2021/Oct/13
Version : 0.39.1
Build
- Dropped support for Java 8 (finally)
- Generates Java 11 bytecode
- Gradle createLibraryDirectory no longer includes .class files
- Gradle alljavadoc excludes Android code to avoid silently failing
Applications
- Fixed assisted calibration launcher from CameraCalibrationMono
- Launcher now has a scrollbar and assisted calibration button
- CameraCalibrationMono --GUI now launches the new GUI
- Fixed crash in CreateFiducialSquareHammingGui
Data Structures
- StereoParameters is no longer initialized with null fields
---------------------------------------------
Date : 2021/Oct/8
Version : 0.39
- Build
* Summary JavaDoc is now required
* Runtime regression from JMH files
- Applications
* Calibration target generator supports more targets
* Add option to save landmarks locations on PDF document
* New monocular calibration GUI app
* New stereo calibration app. Command line and GUI.
* Assisted calibration can now change target type in the GUI
- Image Processing
* Added function for PSF for linear motion blur
* GConvolveImage - can now pass in BorderType
* ConvolveImage - automatic resizing of output
- Simulation
* Hunted down causes of small errors in rendering. New approach is used the samples multiple points.
* Can simulate motion blur
- Calibration
* Two high level calibration detection APIs. One for single target and one for multiple targets
* Added support for full Kannala-Brandt fisheye camera model
* Added new ECoCheck marker for multi camera calibration
* Removed Square Grid Binary target type as it was never reliable enough to flush out entirely and never used
- Fiducial Markers
* Added support for ArUco and AprilTags as "HammingMarkers"
* Can render ChaRuCo and ArUco grids, but can't detect them yet
- Visual Odometry
* Now supports concurrent model matching
- Demonstrations
* Improved stereo and mono calibration applications
---------------------------------------------
Date : 2021/Jul/12
Version : 0.38
- Build
* Updated to Gradle 6.8.3
* Now uses Toolchains. This should eliminate problems caused by people using an incompatible JDK.
* Move template from feature package into recognition package since recognition is what it does
- Examples
* Added an example for computing a trifocal tensor
* Added an example showing how the trifocal tensor can be used
- Applications
* Batch down sample app now lets you scale for a fix number of pixels and keep aspect ratio.
* CameraCalibration can now just save detections
* Several apps now let you specify a path using 'glob:' and 'regex:' greatly improving its versatility
* Added Scene reconstruction application. Command line only for now
- Android
* Fixed SimpleCamera2Activity not properly settings intrinsics. Thanks infologika-outsrc for the bug report
- Functional API
* Added forEachXY and forEachPixel to images
* PixelMath.lambda is now PixelMath.operator
* ImageBorder no longer uses reflection but uses a functional API instead
- CalibrationIO
* Can save and load calibration landmarks in CSV format
* Can save and load Brown camera model in OpenCV format
- UtilIO
* Added saveConfig() to save any BoofCV Configuration in a yaml format
* Added listSmart() that can list files inside a directory, blob pattern, or regex pattern
- DownSelectVideoFramesFor3DApp
* Fixed image scaling issue when image was smaller than desired
- QR Code
* Fixed reading of second format region. Thanks DCNick3 for finding the issue!
* Fixed UTF8 issued when guessing the encoding. C2 was incorrectly marked as invalid
Thanks gerripeach for finding the issue and helping debug it!
- Image Processing
* Re-ordered loops to speed up vertical convolution for inner image. 1.2x to 3x faster. Except for U8_I16
* Added Scharr Gradient 3x3
* Added Template Squared Difference Normed. Thanks rthaenert for the feature request
* Wolf and Niback Binarization
- Image Features
* Fast Corners are now concurrent
* SIFT the entire scale space is computed at once. This might result in a net ~10% increase memory.
* SIFT fixed bug where it was not respecting maximum feature detections.
* SIFT concurrent implementation is running. Single thread is about 3% slower.
- Image Recognition
* Added: Bag-of-Words Nearest Neighbor search with Inverted Files
* Added: Nister, Stewenius, "Scalable recognition with a vocabulary tree", CVPR 2006
- Scene Reconstruction
* Added high level implementations which break down sparse and dense reconstruction down to their bare inputs
* Multiview Stereo has better center view selection which reduces amount of redundant views
* Added SimilarImages implementations that use Image Recognition, i.e. loop closure
* Instead of a single seed for the metric reconstruction multiple seeds are spawned, grown, then merged.
* Improved pairwise scoring. It can differentiate between planar scenes and pure rotations.
- SFM
* Triangulate 2-views in homogenous coordinates
* Switched several 2-view triangulation classes over to using homogenous coordinates so that
points at or near infinity are no longer a failure mode
- MultiViewOps
* compatibleHomography
* homographyToFundamental given 2 points
- PerspectiveOps
* isBehindCamera(homogenous) handles the more nuanced case of determining if a homogenous point is behind
- Misc
* Added ConfigGenerator for easily creating a set of Configurations when parameter tuning
* Added PointTracker.getImageType() so you know what type of image it requires
---------------------------------------------
Date : 2020/Dec/21
Version : 0.37
- Build
* Switch to Java 14 syntax. Still generating Java 1.8 byte code
* Removed auto generated F32 files from the build
* Can now generate code from some Generate*.java files with a gradle command.
- Generated source is still in repo to make submitting PR's easier but stale files will now be caught quickly
* Uses Error Prone and Null Away
* Modified sub-projects to stream line build process and to be more logical
* Moved `calibration` into `geo`
* Created `ip-multiview` and moved disparity code and a few classes in `geo` in to it
* All functions are checked for stdout spam
* Added lint checks for how "var" is used and for-each style loops in performant code
- Random Dot Markers
* Created GUI for generating markers. Print or save to disk
* Fully integrated into Applications
* Rectangular markers are now fully supported
* Small runtime speed improvement by recycling memory
- PointTracker
* Orientation is now configurable using the new interface
* Added back in or added for the first time association with sets using `AssociateDescriptionSets`
* Added PointTrack.lastSeenFrameID field
- Color
* Added support for YUYV color format used in webcams
- Image Processing
* PixelMath now supports Lambdas
* Median blur supports kernel radius independently along x and y. Thanks thhart for the request.
- GUI: Swing Point Cloud Viewer
* Added clip and fog controls
* Holding control slows down translation and switches mouse to doing roll
* Might have fixed halting issue
- Features
* Removed BrightFeature since dark/white has been moved into the detector in all situations
- Feature Sets
* Created FeatureSets interface that specifies how sets are handled by feature detectors
* This makes it easier and less complicated to only associate "dark" or "bright" features with each other
* Added functions to UtilFeatures to simplify adding sets to association algorithms
- Feature Association
* Greedy 2D now can do all the validation tests that the regular one can do
* Greedy 2D now has a concurrent version
- Visual Odometry
* Updated to take advantage of new 'sets' API in PointTracker
* DDA and Hybrid have been updated to use the new 2D association API
* Updated code to take advantage of better data structure/functions since they were first created
* Uses common SBA code now. Supports more configurations than before.
- Examples
* Updated ExampleImageEnhance to include color images
- Demonstration Applications
* Examples are no longer added to recent file list
* openFile() now works again with relative file paths
* Clear recent item list
* Discrete image pyramid can now be configured with both min pixels and levels
* Updated Hybrid Tracker's GUI controls
* Updated Hough Binary and Hough Gradient to allow clicking in transformed image and more
- FeatureSelectLimit
* Supports multiple point types
* Variant with and without intensity information
* Spatial approaches work when there are no images and intensity is derived from features
- PKltTracker
* Maximum tracks is now ConfigLength to make it easier to tune once across image sizes
- FAST Corner feature detector
* Configurable in the GUI
* More efficient storage of candidate corners
- RegionOrientation
* Can now specify feature orientation approach using Configuration class
- PointTrackerKltPyramid
* It now manages the track limit itself instead of letting the detector handle it
- General Feature Detector
* Exclude list is no longer subtracted from requested detections
* Single exclude list for max and min
* When both max and min are detected excluded is correctly handled now
* Feature limit is split between max and min
- FAST corners
* Fixed rounding issue in F32 variant
- SURF Feature Detector
* Moved computation of dark/white feature into detector
* Added support for limiting the total number of features returned with SelectLimit
- SIFT Feature Detector
* Added support for limiting the total number of features returned with SelectLimit
- PerspectiveOps
* Fixed a bug in one of the renderPixel() functions (used fy instead of fx)
- Scene Reconstruction
* Fixed bug in CompatibleProjectiveHomography when using camera matrices only
* Projective from arbitrary images using PairwiseImageGraph
* Projective to Metric for arbitrary number of views
* PointTrackerToSimilarImages uses a tracker to match features for reconstruction
- Multi-View Stereo
* Added MultiViewToFusedDisparity to combine multiple disparity images into one
* Added MultiViewStereoFromKnownSceneStructure which computes a dense cloud from multiple disparity images
* Added an application which down samples the frames in an image sequence based on quality of 3D geometry
- Sparse Bundle Adjustment
* Fixed bug in how pixels are scaled in ScaleSceneStructure.
* A view's pose can now be specified relative to other views. Can be a known or estimated parameter
- MultiViewOps
* Fixed decomposeMetricCamera() so that it doesn't change the scale of T. This messed up common frames
* Triangulate N-points using calibrated homogenous coordinates
- Stereo
* Speckle noise removal algorithm. Supports U8 and F32 image types.
- Calibration
* Stereo calibration now performs a join bundle adjustment after estimating the stereo baseline
- Concurrency
* Removed WorkArrays since they were poorly designed
---------------------------------------------
Date : 2020/May/18
Version : 0.36.1
- Fixed loading Uchiya Marker description from a jar in the Example
- Fixed Uchiya Marker Demonstration when running from a jar
- Fixed Stereo Visual Odometry demonstration when running from a jar
* This should also fix anything in the future which uses file sets
---------------------------------------------
Date : 2020/May/17
Version : 0.36
- Build
* Created integration/boofcv-pdf module to contain code for reading/writing PDF documents
* If stable release, fail uploadArchives if dirty
- Android
* Changed a sort function in ChessboardCornerClusterFinder for Android compatibility
- Using Java 11 syntax (e.g. var) but still will produce Java 1.8 byte code
* https://github.com/bsideup/jabel
- Misc
* Change the definition of a floating point value to be inside image bounds if it's less than width or height
before it was < width-1, and < height-1. This conforms to rounding down standard.
* Created FiducialTracker interface
* Updated for DDogleg's FastAccess, FastArray, and FastQueue
* Config's now all implement setTo() and this is enforced with a unit test
* Planar images now update the number of bands in ImageType when the number of bands is reshaped
- Added Project Lombok for auto generating setters/getters
- Kotlin
* Initial release with specialized support for Kotlin
* Extensions provided for converting between image types
* Operator overloading for PixelMath
- Image Processing
* Fixed ImageDistort crashing if an invalid region is specified. It simply does nothing now.
* FDistort now supports SKIP border. Thanks Nico Stuurman for reporting the issue!
* Created ContourOps
* Deterministic non-max block concurrent algorithm
* Discrete image pyramids can now be dynamically defined based on input image size
* Added a proper config for discrete image pyramid levels
* Deterministic non-max suppression block candidate concurrent
* ImageMiscOps.copy() with border for input image
* ImageMiscOps now has concurrent code
* ImageMiscOps.findAndProcess()
* Split mean filter into BlurImageOps.mean() and BlurImageOps.meanB()
* BlurImageOps.meanB() requires a border to be specified, if null is specified then just the inner portion is processed
* Created Histogram2D_S32 to easily create and process 2D histograms
* Created ImageCoverage which is used to compute the fraction of an image covered by features
- DeformPointMLS
* Massive reduction in memory usage. 20k control points: 800 MB to 3.4 MB
See BMemoryImageDeformPointsMLS
* Thanks olegvakulenko for finding the problem and submitting the initial fix!
- Moved KLT from boofcv-geo to boofcv-feature
* No idea what it was doing in geo originally but it didn't belong there!
- QR Code
* More informative error message when encoding a QR Code
* Fixed incorrect conversion from bits to bytes. Can sometimes store more data!
* Thanks phillip-fry for reporting the problem
- Added Random Dot Marker (Uchiya Marker)
* First pass implementation. Plenty of room for improving speed
- PointTracker
* Added frameID for each processed frame
* Added spawnFrameID to tracks
* Tracks and similar data structures no longer extend Point2D. Serious unintended consequences from that.
Point2D overloads equals and hashcode which broke trackers.
- FeatureSelectLimit
* When the number of detected corners/features exceeds a specified limit these are used to resolve the ambiguity
* Most of this code existed in some form but was not formalized and centrally implemented
* Four different variants are provided
- Shape Detectors
* BinaryEllipseDetectorPixel will use external only contour detector when it doesn't detect internal contours
- PerspectiveOps
* Added two types of point invariants
- Association
* Added score ratio test to Greedy
* Added Configuration for Greedy
- Scene Reconstruction
* Better cropping on rectified image using bounding box instead of rotation matrix
- Visual Odometry
* Re-wrote VisualizeStereoVisualOdometryApp. Much better visualization and more configurable
* All stereo visual odometry algorithms now support multiple key frames and bundle adjustment
* Note all approaches lost 2D spatial association, ability to feature handle sets, and two pass tracking.
* While this simplified the code the loss of 2D association did degrade runtime performance significantly for Quad.
* Those are all scheduled for consideration in the next release with a cleaner interface
- Stereo
* Added sparse disparity with Census and NCC
* Added Census support for F32 images
* Changed how correlation texture check is done. Before two identical peaks didn't get filtered.
* Added sparse forwards-backwards validation
- Android
* Changed image workspace from byte[] to GrowQueue_I8 so that it can be dynamically computed.
* Fixed issues with visualizing disparity
* SimpleCamera2Activity::cameraIntrinsicNominal() returns false if it fails
* Added Bitmap processing example
- Applications
* Fixed calibration detector apps bug where scale got missed up when playing a movie
- OpenKinect: Removed integration package since it hadn't been used in years
- Demonstrations
* Demonstration recent file list is now in YAML format and supports multiple files
* Added settings
* Added the ability to switch between different swing themes; darklaf and material-ui
* It will default to JCodec if all else fails when trying to load a movie.
- JCodec
* Finally fully integrated and MP4 videos can be read on all systems!
* Updated to latest release and fixed bad code in BoofCV.
- Color
* Can convert YUV, HSV, and YCbCr to 32-bit RGB color
* Fixed conversion between XYZ/LAB and RGB by applying Gamma correction.
- Thanks Jairo Rotava for finding/showing/helping to fix the XYZ/LAB bugs!
* Added XYZ/LAB to RGB conversion.
* Added ColorDiff - Computes metrics for the difference between colors
- Thanks Jairo Rotava for the code contribution!
---------------------------------------------
Date : 2019-Dec-23
Version : 0.35
- ImageType now as predefined types, e.g. SB_U8, IL_F64, PL_S32, ... etc
- Build
* Fixed some dependencies not being included in the library zip (Thanks changbaishan)
- Mean Shift
* Even kernel sizes
* Configuration class
* Ignore negative values
- Image Processing
* Added Hessian determinant direct from input image
* Added sumAbs() to ImageStatistics
* Added histogramScaled() to ImageStatistics
* Added Census transform
* Added stdev to Pixelmath
* Added fillBorder(x0,y0,x1,y1) to ImageMiscOps
* Created ImageNormalization for normalizing input images to be zero mean with values around 1
* Added blur where you can select a different radius along each axis
- Mean and Gaussian
* PixelMath.log() no longer has the 1 + hard coded. Any arbitrary value can be put there.
* Created ConvertImageMisc and added code to convert F32 to U16 images
* Hough Polar Gradient type casted a float to an int when it shouldn't have
* Added generalized function for copying rows and columns from images
* Added the ability to make a copy of an ImageBorder
* Mean filter now supports different image border methods
* Added ImageMiscOps.growBorder() to create a new image that is the src image plus a border
* Added GrowBorder for extracting rows and columns from images with borders added
* Rectified images can now be adjusted using the rectified rotation for better usage of space
* ConvolveImageMean can now handle non symmetric regions
- Template Match
* Fixed bug where if the template matched the input image it would not be processed
* Thanks waicool20 for reporting this bug
* Functions which maximize and minimized have specialized code
* Fixed edge cases where having a border of zero messed things up
* Sum Squared Error (SSE) produces similarly scaled numbers for U8 and F32 now
* Added Sum Absolute Difference (SAD) error
* Updated error names to make them more common
- Concurrency
* PixelMath now only uses concurrent algorithm when input image is more than 10,000 pixels.
Going MT on small images caused Circulant tracker to slow down.
- Demonstrations
* Updated DenseFlowApp
* Updated VisualizeRegionDescriptionApp
* Updated VisualizeAssociationScoreApp
* Updated VisualizeImageSegmentationApp
* Updated VisualizeStereoDisparity
* Three view handles 90 degrees out of orientation images much better
- Fixed bugs related to processing 1-band planar images
- Stereo
* Improved high level API
* Concurrent block matching disparity
* Support for U16 images
* Block Matching can now be scored using Census and NCC
* Added Semi-Global Matching (SGM) with several options for score functions
- SFM
* Projective camera with lens distortion
- Chessboard Detector
* Renamed previous detector to ChessboardBinary since it uses a binary image
* Created a new XCorner based method which is much more robust but slower
* Removed the old new detector based on Shi-Tomasi Corner + Binary Threshold
- About the same speed and as reliable as Chessboard Binary. Maybe it just needed more development
---------------------------------------------
Date : 2019-July-07
Version : 0.34
- Applications
* Added batch QR Code scanner
- Examples
* Added corner detector
- BinaryImageOps
* Added concurrent implementations
* Modified edge so that outside pixels can be treated as 0 or 1
* Block threshold can now handle images smaller than the block size
* Global threshold algorithm can now have the threshold scaled
- Line Detectors
* Created a new interface which takes in image gradient
* Improved merging algorithm for hough polar where it was pruning any line that interested inside the image
* Hough Line Foot now parameterizes using a soft rule
* Added mean-shift refine to foot
* Added a binary input variant on Hough Polar
- Removed some reflection code for image gradient
- Concurrent code for ImageDistort
- Demonstrations
* modernize mosaic and stabilize
* modernized hough polar and foot
- Examples
* Android example disables threads if SDK is prior to 24 due to lack of Java 1.8 support
- ImageStatistics
* Added support for Planar images. Thanks thhart for the suggestion
- Feature Association
* Concurrent version of Greedy Association
* Concurrent version of Nearest Neighbor Association
* Concurrent version of Random Forest Association
- Feature Descriptors
* Concurrent SURF, SURF Color
- Added configuration for Harris and Shi-Tomasi corner detectors
- Average Down Sample has concurrent versions
- PixelMath added logSign to handle images with positive and negative values
- Split apart calibration detector configuration and shape configuration
- Chessboard Detector 2
* Rewritten from scratch using a new type of corner detector
* Better handling of blurred and fisheye images
- Simulation
* Concurrent version of SimulatePlanarWorld
- Concurrent version of template matching
- Android
* Thanks sergiuchuckmisha for fixing a bug/type-o in FOV estimation
* Possible fix for a failed resolution change
- Geometric
* Added Projective N-Point (PRnP) algorithm using DLT
---------------------------------------------
Date : 2019/03/18
Version : 0.33.1
- Fixed QR panel list in demo app
- FileBrowser now lists directories first
- Demonstrations
* Removed redundant association apps
* Updated association so that you can select your own pair of images
* Worked around a bug in mimetype in JDK 1.8 in OS X
* Error reporting if image failed to load
* Modernize contour edge
---------------------------------------------
Date : 2019/03/14
Version : 0.33
- Fixed JavaDoc issue. Was not copying over doc-files
- Renamed PinholeRadialTangent camera model to PinholeBrown
* More concise name which resulted in class names being more consistent without abbreviations
- Sparse Bundle Adjustment
* Added calibrated homogenous coordinates
* Added support for rigid objects
* Added universal omni camera model (fisheye)
* Made Brown camera model complete (e.g. N radial, tangential, force params to zero)
* Added support for quaternions
- Dense Bundle Adjustment
* Added for degenerate systems which are small enough to be solved with a dense method
* Note: This statement seems to be a bit hit or miss. Not sure why, but it doesn't always converge when sparse does.
- Geometry
* HomographyDirectLinearTransform has been updated to take 2D points, 3D points, and conics as inputs.
- Fixed Rodrigues Jacobian for zero rotation
- Camera Calibration
* Renamed radial-tangential model to Brown for consistency and brevity
* Fixed type-o in Omni Universal math. Recalibration does not appear to be necessary
* Non-linear optimization is now performed using sparse bundle adjustment
- This appears to be slightly worse than the original dense method in nearly degenerate geometry
- Improved Support for U16 images
* Convolution, blur, ... etc
* Requested by Nico Stuurman
- Resize Output Images Instead of Exception
* PixelMath
- Image Thresholding
* Added Li
* Added Huang
* Ported from ImageJ by Nico Stuurman
- ImageBandMath
* Added by Nico Stuurman
- QR Code
* Added support for ECI, i.e. more character sets
* Changed default BYTE mode encoding to default to UTF-8, but attempts to see if it could be another encoding
* Ability to change byte encoding. UTF-8 is the default now
* Add perspective data set to regression.
* Improved handling of high version QR Codes. Thanks Prabu for discovering this problem and providing examples!
* Fixed location of alignment patterns along the y-axis. This mostly affected higher version QR
- PerspectiveOps
* Fixed bug in convertPixelToNorm() where it called distort instead of undistort. Thanks Tianyi
- Demonstration
* Modernized VideoTrackerPointFeaturesApp
* Modernized FFT Demo
* Modernized Blur Demo
* Modernized Image Derivative Demo
* Three View Stereo
- Using AverageDownSampleOps to avoid aliasing and drastically improves performance
- Selects best pair automatically for stereo processing. Before it was always image 0 and 1.
- Tracking
* Detect-Describe-Associate (DDA) tracker would let the number of tracks grow unbounded.
It now randomly selects unassociated tracks if there are too many.
- Swing
* Touch pad "wheel" controls are less spastic in OS X
- Gradle
* Fixed how dependencies are referenced and Jars built. Thanks H1Gdev for pointing out this problem!
- Image Distortion
* Changed interface for PixelTransform and PointTransform to support concurrency
- Concurrency
* Added support for concurrency. On by default. Can be turned OFF using BoofConcurrency.USE_CONCURRENT = false
* Created AutocodeConcurrentApp for generating threaded code from single thread algorithms
* Created IntRangeConsumer for parallel code that processes a range of numbers in a block
* Convolution: general, sum, mean, gradient
* Threshold: Local, Block
* Color: HSV, LAB, RGB, XYZ, YUV, NV21, YV12
* Misc: PixelMath, ImageStatistics, Non-Max, Non-Max Candidate, ConvertImage, ConvertBufferedImage,
EhanceImageOps
* Feature Intensity: SURF, SSD Corner
- Examples
* Removed Lena as default image since that image is no longer considered appropriate by some journals.
- https://en.wikipedia.org/wiki/Lenna
---------------------------------------------
Date : 2018/12/26
Version : 0.32
- Internally using URL to load resources (e.g. images, videos) to enable running inside of jars
- Demonstrations / Examples
* Colorized code
* Updated detect line demo
* Updated image enhance demo
* Two view uncalibrated stereo re-written from scratch
* Three view uncalibrated stereo
* Visualization for three view associations
- Fiducials
* Several implementations were not properly performing sparse undistort of contours.
* This was fixed but might cause a noticeable performance hit, e.g. 5% to 25%.
* If radial + tangential terms are close to zero you can just remove them and not experience this slow down.
- Applications
* All applications have a GUI
* Centralized GUI for launching
- QR Code
* QrCodeDetectorPnP can estimate 6-DOF pose from a QR
* Encoder does a better job of rejecting invalid QR configurations
* Detector can optionally estimate in undistorted image coordinates
- Changed Fiducial stability calculation to use 4 synthetic corners as way to improve speed
- InterleavedU8 and Planar<GrayU8>
* Added set32/get32 and set24/get24
- ConvertImage reshapes output instead of throwing an exception
- LensDistortion
* Fixed transformChangeModel() it was undistorting twice when it should have undist then dist
* Split some of the code between F32 and F64
* Bound now works on arbitrary distortions
- ImageDistort
* Can compute a mask that indicates which pixels were outside of the source image
- Geometry
* Fixed bug in Linear Trifocal Tensor estimator
* Robust trifocal tensor estimation
* Decompose absolute quadratic
* Convert projective to metric camera matrix
* Fixed bug in decomposeMetricCamera
* Refine triangulation for projective geometry
* Improvements to factory methods
* Fundamental matrix from camera matrix
* Consistent camera matrices from three fundamental matrices
* Cleaned up naming scheme for triangulation algorithms
* Refine three view camera matrix (i.e. trifocal tensor)
* Many more new functions/algorithms added
- Rectification
* Can apply a mask to disparity to remove false matches caused by image border in rectified images
- Self Calibration
* Plane at infinity given intrinsic parameters
* SelfCalibrationGuessAndCheckF based on "Pratical Autocalibration" 2010
* Linear rotation with different values in each frame
- SFM
* Improvements to projective bundle adjustment
* Projective scene structure pruning
- ImageInterleaved
* setTo() changes number of bands if needed
* Improved speed of Interleaved to Gray average
- Android
* Bunch of bug fixes
* Extracts the full pinhole calibration matrix from camera characteristics
---------------------------------------------
Date : 2018/10/16
Version : 0.31
- VisualizeCamera2Activity
* Fixed example
* Removed lock from bitmap in VisualizeCamera2Activity for performance
- ImageMiscOps
* Added extractBand()
- Updated gversion to fix problem when built from a directory other than project base
- Fixed problem with Java applications
* Can't use implementation when specifying dependency in this situation
* Thanks Andy Thoma for reporting the problem
- ImageMiscOps
* Added interleaved support for copy, rotateCW, rotateCCW
* Thanks Frank Jakop for the suggestion
- Geometry
* Projective triangulation for uncalibrated cameras
* Added EssentialResidualSampson for computing sampson error in pixels for calibrated cameras
* EpipolarMinimizeGeometricError
* Trifocal transfer functions
- Sparse Bundle Adjustment
* Most basic version using DDogleg and EJML sparse LM solver
* Works with calibrated pinhole camera
- Scene Reconstruction
* Matches images and provides an initial estimate of geometry
* Support for calibrated. Still a work in progress
* EstimateSceneUnordered for image sets which are unordered
- Visualization
* JavaFX based point cloud viewer
* Greatly improved BoofCV's built in point cloud viewer. Runs better than JavaFX
- Thresholding
* Added NICK thresholding for old documents
- SimulatePlanarWorld
* Only renders surface when the normal is facing the camera
* Added unit tests to ensure that all flipping/mirroring is handled correctly
- Switched to JUnit5
- QR Code
* When scanned it now indicates if multiple modes were used
---------------------------------------------
Date : 2018/05/21
Version : 0.30
- Renamed HomographyLinear4 to HomographyDirectLinearTransform
* More consistent with the literature
- Added HomographyTotalLeastSquares
* Computes the homography gives a set of associated 2D points
* About 4x faster than DLT
* Mathew Harker and Paul O'Leary "Computation of Homographies"
- PNP
* Added IPPE; Collins, Toby, and Adrien Bartoli. "Infinitesimal plane-based pose estimation."
- QR Code
* QrCodeGeneratorImage automatically has a white border
* Fixed crash bug if it estimated a version 0 QR
* If possible, it will recycled binary image instead of creating a copy internally
- Square Fiducials
* If possible, it will recycled binary image instead of creating a copy internally
- ImageType
* Added setTo() and isSameType()
- ImageMultiBand
* Added reshape(width,height,numberOfBands)
- Android
* Support for camera2 API
- ImageConvert
* Added convert between planar and interleaved of different data types
- Fast Corner
* Improved efficiency by changing how points are sampled
* Added a variant which doesn't compute feature intensity
- PointTracker
* Can handle multiple sets of detected features, e.g. min and max features
- Stoppable
* An interface for gracefully exiting a long running process
* MeanShiftSuperPixel, SLIC
- ColorFormat added to specify different formats for visible light
- Calibration
* Fixed issue with chessboard patterns when they are very close
- AdjustPolygonForThresholdBias
* Handles case where a point is shifted and becomes a duplicate
- ImageZoomPanel
* Saving the view saves what you see exactly now
- Binary Contour
* New external only contour algorithm
* About 1.35x faster on average and in some situations 10x faster
* Contour finding now has two high level interfaces
* Optional interface for implementations which provide access to padding settings.
- PolylineSplitMerge
* Minimum side length is enforced fully now
- Simplified transforms to equirectangular images
---------------------------------------------
Date : 2018/03/18
Version : 0.29
- Changed minimum Java version from 1.7 to 1.8 since Android now supports 1.8
- Manual zoom added to ImagePanel
- QrCodeDetector
* Fixed crash bug in position pattern detector. Complex B&W patterns could cause OOB
- Image Thresholding
* general otsu specifies pixel min/max with a double not an int
- Stereo Calibration
* Moved detector to be outside of the main calibration class
- Demonstrations
* Moved menubar to the correct location
* Tweaks for Mac OS X
* Improved several applications
- Images
* Gray images support createSameShape(type)
* Added matchShape() to replace the more verbose reshape(image.width,image.height)
- Contours
* Created an interface for finding contours in a binary image
* Provided a way to override Chang2004
- GImageMiscOps
* fillUniform wasn't actually inclusive on upper limit for integer values
- ShowImages
* showWindow() adjusts preferred size to handle the case where the image is larger than the monitor
- QuadPoseEstimator
* Can specify if input is in pixels or normalized coordinates
* Deleted unused code that was sketchy
* Added function to go from a pixel to a point in the marker frame
- Added GVersion class that is automatically generated and contains build related information
- PolylineSplitMerge
* Added support for segments which don't loop
* Fixed Bug where if a segment was the minimum length exactly it could still be split
- SplitMergeLineFit
* Deprecated and will be removed soon
* PolylineSplitMerge now has all of its functionality and out performs it
- FFMPEG
* Suppressed warning message that has been spamming stderr
- Camera Calibration
* Tweaked API so that you process the image outside and pass in the results
* GUI: For universal omni the undistorted window is automatically scaled based on image size
- ImageConvert
* Faster technique to convert between interleaved and planar
- MultiCameraToEquirectangular
* Correctly handles NaN in equiToCam transform
- Started using @Nullable and @Nonnull
* Primarily in factories where if a config can be null or not is confusing
- ConvolveImage* refactoring