-
Notifications
You must be signed in to change notification settings - Fork 257
/
change.txt
1722 lines (1652 loc) · 79.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 : 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
* Removed WithBorder from class name for simplicity
* Made naming more consistent in general
- BackgroundModel
* Added a combined function for update and segment
* Added new algorithm. Gaussian Mixture Models (GMM)
- FiducialDetector
* Added an optional function which can return the fiducial's boundary
* Updated demo app to visualize all the information it can return
* setLensDistortion() now takes in image width and height. This is done to enable precomputing of distortion
- ThresholdLocalOtsu
* Fixed bug where it was always trying to use a region of size 0
- BOverride
* Added more overrides and improved API
* Used by BoofCPP to call C++ Code
* https://github.com/lessthanoptimal/BoofCPP
---------------------------------------------
Date : 2018/01/20
Version : 0.28
- Black Polygon Detector
* Can detect polygons using contour, then on an individual basis refine them now. Before it was all or nothing.
* Prune contours based on edge intensity earlier
* Removed refine corner for black polygon detector
- Was complex, didn't fit the new API, and calibration residuals got better once removed.
* Added option to optimize by fitting lines to the contour
- Chessboard Detector
* Improved performance on larger image by making thresholding region relative to image size
* Has known issue on larger images where a little bit of blur can join squares together.
- Background Model
* Fixed a weird edge case that happened when you passed in a 1x1 pixel image
- Removed Asymmetric Circle Grid
* Less space efficient than Hexagonal Grid
- Added Hexagonal Grid
* Similar to asymmetric but in Y direction is now (x spacing)*2.0*sin(60 degrees).
* Asymmetric was the same along both axises
- Demonstrations
* Open files will remember the last directory it opened
* Added list of recently opened files
* Dialog for opening a webcam
* Added fisheye calibration
* Added background removal
- Examples
* Added ExamplePointDeformKeyPoints
* Added QR Code Detector
* Added QR Code Encoder
- Application: Calibration Target Generator
* Added circle hexagonal
* Output is a PDF document now
* Has a GUI
- Application: Camera Calibration
* Support for omni universal model
* Can choose to save output in OpenCV format
* GUI for configuring calibration
- DetectPolygonFromContour
* Fix a bug where labeled image was not being resized if the height of input image changed
- BinaryEllipseDetectorPixel
* Adjusted detected ellipse to remove bias caused by fitting to a binary image.
- BOverrideClass
* Provides a framework for overriding some functionality in BoofCV with an external implementation without changing your code
- DetectCircleAsymmetricGrid
* Fixed issue where it picked the wrong circle for the initial corner
- Gradle
* fixed gradle not copying over doc-files
- Changed directory structure to gradle standard to better integrate source code from other languages
- FiducialDetectors
* Provide access to detected points in PNP detector. Thought this was done a while ago...
- Binary Thresholding
* Region size is now specified using ConfigLength and as a width instead of a radius
- Width makes more sense and is less restrictive. Can be specified as a relative to image size now too.
* Renamed classes/functions to remove redundancy and clarify
* Changed ImageToBinary to remove pointless bounds list and simply code
* Added BLOCK_MEAN
* Added BLOCK_OTSU
* Added LOCAL_OTSU
- OTSU Threshold
* Added Otsu 2
- Also seeks a threshold which maximizes the distance between the two distributions
- Can handle binary images much better when Otsu fails to select a reasonable threshold
- Created ConfigMinimumSize
* Provides a way to specify the size of an object as based on input image size or an exact pixels
- ImageZoomPanel
* Draws to a buffer first which fixes a major problem on some JVM implementations have a very slow render
- LinearContourLabelChang2004
* Added ability to stop recording contours which exceed a maximum size
* Added ability to not record internal contours
- Added HistogramStatistics
* Thanks Marius Orfgen for the idea and code
- TrackerObjectQuad
* Added ability to provide a hint for where the object is now
- JavaCV
* Provided support for reading webcams using JavaCV. Seems to work better than Webcam Capture in some ways
- Created interface for contour to polyline. PointsToPolyline
* Added ability to set min/max number of sides. convex
- DecomposeHomography
* Can now handle the case where the scale factor is not equal to one
- QR Code Support
* Detector and Decoder
* Renderer and Encoder
* Application for creating documents and images
- Android
* Faster RGB to Boof Image. Suggested by giulionf
---------------------------------------------
Date : 2017-08-16
Version : 0.27
- ImagePanel: Expanded click middle mouse to save image
* Was a secret new feature in the last release
* Added to ImageZoomPanel
* Opens a dialog letting the user know what just happened with option to be silent
- ImagePanel: Now has a function for just calling repaint around the image
- Renamed module visualize to visualize-swing
- Added integration/visualize-javafx
- camera distortion models
* Unrolled matrix inverse in pinhole and radtan
- Equirectangular
* Added PinholeRadialToEquirectangular
* Fixed the meaning of latitude and longitude being swapped. Thanks xzfinet
- Updated generics to take advantage of Java 7 more
- Image Pyramids
* PyramidDiscreteSampleBlur supports generic images
- ConvolveDown
* Added an interface
* Added planar image support
- Support for Interleaved Images Added to
* ConvolveWithBorder
* ConvolveNormalized
- AverageDownSample
* Made image generic
- Renamed for consistency
* Kernel2D_I32 -> Kernel2D_S32
* Kernel2D_I32 -> Kernel2D_S32
- GConvolveImageOps actual works for all image types now not just gray
- Changed behavior of ConvertBufferedImage
* When converting to interleaved and planar images the number of bands is adjusted to match the buffered image
* Buffered -> BoofCV: output images are reshaped to match input
* Removed references to private sun classes for Java 9 compatibility
- ImageInterleaved
* Added a nicely formatted toString()
- BlurImageOps - Fixed bug where for planar imges it was apply a median instead of mean filter
- FactoryBlurFilter - Can now handle image types other than gray scale images
- LensDistortionOps
* New function which lets you re-render an image with an arbitrary camera model
* Removed the imageRemoveDistortion() and relation functions since the new function is better.
- Demonstrations
* Added RenderSyntheticCamerModelApp which shows you the effects of re-rendering the camera model
* Removed ShowLensDistoriton since it is now redundant
- Added image distortion based on "Image Deformation Using Moving Least Squares"
* See ImageDeformPointMLS
- Planar Images
* setTo will adjust the number of bands
- Updated for full support of F32 data type in dependent libraries
* EJML -> ddoglog -> GeoRegression
- Fixed calibration target generator app from printing out the wrong target type for asymmetric circles
- Fixed and updated Android example
- Android
* ConvertBitmap will reshape BoofCV images to match the input Bitmap when converting
* Refactored functions names with multi to planar
- Fixed visual odometry path viewer so that the camera behaves in a same fashion when the window is resized
- Multi View
* Split EnumEpiloar into EnumFundamental and EnumEssential to make it clearer
* Updated functions in FactoryMultiViewRobust for change
- Calibration Targets
* Added support for circle grid pattern in generator app
* Added support for detection of circle grid patterns
* Calibration targets with circles now specify circle size with diameter instead of radius
- Gradle
* Change directory structure to avoid jar naming conflict on maven central. Idiotic that this is even possible...
- Imaga Data Types
* Fixed ImageInterleaved.setNumBands() NOT correctly setting the stride and growing the data array
- Removed XML all serialization
* Changed old XML files into YAML files
- YAML format for camera calibration
* Added version parameter. Assumed to be 0 if not present
- Fixed histogram in ImageStatistics
* For unsigned data types minimum value was being ignored
* Thanks André Ambrósio Boechat for reporting the problem
- ApplicationLauncherApp
* Thanks Jalal Khan for completing and going beyond what was required in the Bounty!
* Displays source code, GitHub button, search, and various other improvements
- ConvertNV21 and ConvertYV12
* Speed up conversion from NV21 to RGB by about 1.9x by converting if statements into bitwise operations
* Refactored functions names with multi to planar
- Split FFMPEG and JavaCV into separate dependencies
- You can now specify which native architectures you wish to support
* See native_arch gradle parameter
- ImageMultiBand added setNumberOfBands()
---------------------------------------------
Date : 2016/12/07
Version : 0.26
- Fixed a long standing unit test issue where convolve unit test would some times on some systems erratically fail
* Appears that sometimes the random numbers caused a numerical overflow for U8 images
* Now why it didn't have the exact same numbers every time when it has a fixed seed is disturbing...
- Renamed EquirectangularTo* to *ToEquirectangular
* Those classes convert pixels in * coordinates into their location in the equirectangular image
* They are used to generate a * image from equirectangular
- Float 32bit auto coding switched over to using auto64fto32f library
- TypeInterpolate is now InterpolationType for consistency
- Examples
* InterpolatePixel added
* Image blur added
* Non-Maximum Suppression added
- Demonstrations
* Improved DemonstrationInterpolateScaleApp (renamed also)
* Added DetectBlackEllipseApp
- Gradle
* Will fail on dependency version conflict now
* Will fail when building release with SNAPSHOT dependencies
* Resolved xstream version conflict
- Updated DeepBoof
* This is to get around an issue with a java wget library where it would hang instead of giving up
* New code is also much more informative and prints out size info and download status
- Visualization
* Removed a bad +PI/2 from ellipse rendering.
- SnapToEllipseEdge - Fixed bug where it was only performing one iteration no matter what
- Circle Asymmetric Grid Target
* Fixed issue which was causing clusters not to form by not limiting number of neighbors within X distance
* When clustering ellipses orientation and major/minor axis size is now taken in account.
* Significant net improvement in regression tests, only drop in performance in blurred images
---------------------------------------------
Date : 2016/12/01
Version : 0.25
- Black Circle Detector
* Binary image
* Subpixel edge for gray scale images
- Circular Asymmetric Grid Pattern
* For calibration
* As a general fiducial
- Histogram of Oriented Gradient
* Provided another implementation which is more faithful to original paper, but much slower
* Can now independently configure block size along each axis
- VideoTrackerObjectQuadApp
* Can now open webcams and videos
* Improved UI
- Association
* Added helpful error messages when src and dst are not set
- Added support for F64 to F32 autocoding from regular F64 classes
- 360 / Spherical camera support
* Equirectangular image support
* Equirectangular to pinhole
* Equirectangular to cylinder
* Equirectangular rotate
- Dirty flag was not being set to false for cached image distort single band
- Changed minimum Java language level from 6 to 7
- Camera Model
* Renamed IntrinsicParameters to CameraPinhole
* Broke distortion off into a separate class which extends CameraPinhole
- CameraPinholeRadial
* Added a new camera for wide FOV cameras: Universal Omnidirectional
* Created new transforms to handle non-pinhole cameras
- YAML
* Changed save format to YAML for camera model parameters.
* This should allow saved files to be independent of internal refactoring in BoofCV and cross platform, I hope.
- Deleted BoofAndroidFiles because you can now simply use yaml format
- Deep Learning
* Integrated in DeepBoof to provide support for deep artificial neural networks (ANN)
- Image Classification
* VGG trained on CIFAR10 (10 categories at 89.9%)
* Network-in-Network trained on ImageNet (1000 categories at 62.6%)
- FiducialDetector
* Takes in a distortion factory instead of camera parameters
* Added getIntrinsics()
* Added getImageLocation()
* Fixed bug where if a lens model with distortion was used then exchanged for one without the old distortion was not fully removed.
* Fixed bug where if intrinsic was not set it would still claim it could estimate the target's pose
- Binary Fiducial
* When decoding the image it now ignores border pixels of inner squares. These tend to be very noisy.
* 7% improvement in regression test. Idea taken from ArUco
- Commandline Fiducial Generator
* Can specify custom document size
- Added command line application for calibration fiducials
* Supports chessboard, square grid, square binary grid, circle asymmetric grid
- OpenCV Integration
* can read and write camera calibration for pinhole cameras with radial + tangential distortion
- FancyInterestPointRender
* Fixed addString() being a no-op. Thanks R-Gerard for the bug report!
- Generate Square Fiducial Applications
* The post script format has been tweaked so that the page size is specified with the /PageSize command also
* A printing company was having issues correcting sizing the document until this change was made.
- Refactored FactoryCalibrationTarget -> FactoryFiducialCalibration
- FactoryMotion2D
* Removed image type specific functions and updated code for more recent API
- Fixed bug in StitchingFromMotion2D where reset() could cause a null pointer exception
- Android
* work around for a crash bug in Marshmallow
- Removed applet module in integration
- Template Matching
* Added correlation using FFT
* Tweaked API so that preprocessing of image can be performed
- TypeInterpolation renamed to InterpolationType for consistency
- Changed behavior of AssociateSurfBasic
* no longer throws an exception if src or dst features are empty
---------------------------------------------
Date : 2016/06/13
Version : 0.24.1
- Previous stable release accidentally referenced a SNAPSHOT of georegression
---------------------------------------------
Date : 2016/06/04
Version : 0.24
- Confusion Matrix Visualization
* Fixed bug where a row/column was being lopped off
* Added labels
* Added ability to highlight one category
* Added ability to query what's at a specific location
- Local Image Normalization for use in machine learning
- Added weighted RGB to Gray conversion with example
- Convolve
* Better support for 64-bit float images
- Module "core" (formally "all") can be used to import everything in boofcv/main
- Module "all" can be used to import everything in boofcv/main AND boofcv/integration
- Adjusted assisted calibration so that it's possible to provide a custom output directory
- Video
* Xuggler's Maven repository was taken down. Effectively killing the zombie project
* JavaCV has been integrated in as a replacement.
---------------------------------------------
Date : 2016/03/27
Version : 0.23
- Refactored image data structure names for consistency and brevity
* Sorry for the massive refactoring
* ImageUInt8 -> GrayU8
* MultiSpectral -> Planar
* Interleaved is unchanged
- Removed Alpha from version name since it was pointless and non-informative
* Will hit 1.0 once a (good) face detector is added
- Updated dense descriptor configurations to include a default sampling period
* SIFT, Fast SURF, Stable SURF
- FactoryDescribeImageDense
* Now accepts null for configuration and creates a default
- FactoryOrientation
* SIFT now accepts a null argument. Thanks pcmoen for pointing out this bug.
- ImplOrientationImageAverageIntegral
* Fixed internal null pointer exception
* Fixed bad unit test
* Thanks pcmoen for pointing out this bug
- Hamming Distance
* New algorithm from Sean Eron Anderson Bit Twiddling Hack
* 68 times faster than equivalent older code
* 8 times faster than a lookup table!
* Thanks pcmoen for finding this gem and the pull request
- FactoryDerivative
* Deleted type-specific functions
- BorderType.VALUE is now ZERO because it always defaulted to zero
---------------------------------------------
Date : 2016/03/04
Version : Alpha 0.22
- Deleted MedianImageFilter
* Use BlurStorageFilter instead. Create with FactoryBlurFilter
- Applications package now uploaded to Central
- CameraCalibration
* Made internal data structures and function protected to make it easier to extend by an external class
* Fixed bug where visualization artifacts were being saved to disk
- Implementation of ImageGradient for MultiSpectral images
- FactoryDerivative
* Can now create derivatives using enum type
- Added Histogram of Oriented Gradient (HOG) dense image descriptor
- DescribeImageDense
* Removed configure() since it couldn't be generalized to HOG
* Created config classes for all dense descriptors
- No argument constructor in most image types
* Fixed bug where defaultType was not being set. Thanks pcmoen for reporting the bug
- Fixed bug in ConvertBufferedImage.extract where number of bands in interleaved images was not being set in ImageType
* Fixed bug where defaultType was not being set. Thanks pcmoen for reporting the bug
- PixelMath
* Added partial support for Interleaved images
* GPixelMath supports more than just single band images
- ImageStatistics
* Added partial support for Interleaved images
* GImageStatistics supports more than just single band images
---------------------------------------------
Date : 2016/01/24
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 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
* Any single band into into ImageUInt8 with the specified pixel value range
- Chessboard detector
* Links squares together using corners instead of two independently detected grids
* Can now detect targets in which the outer squares have been clipped by the image's 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
- Image Thresholding: LocalSquareBlockMinMax Added
* Breaks the image up into a grid and computes the min and max pixel value, which is used to compute a threshold
* Enabled the detection of black objects partially outside the view
* Is very fast
- Android
* Will automatically detect if image needs to be rotated 180 degrees and then does it. Needed for the Nexus 5x
---------------------------------------------
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