forked from andrewkirillov/AForge.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Release notes.txt
2085 lines (1309 loc) · 86.5 KB
/
Release notes.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
AForge.NET Framework 2.2.5 release notes
----------------------------------------
17.07.2013.
!!!IMPORTANT!!!
The version updates licensing of AForge.Video.FFMPEG component, which is now released
under GPL v3 license (due to dependency on GPL build of FFMPEG library). The rest of
the framework remains LGPL v3 licensed.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 159: IAMCameraControl support and Microsoft LifeCam frame size fix
- Issue 293: FilterInfo properties modifier change
- Issue 296: AForge.Imaging.Filters mono support
- Issue 297: OtsuThreshold Filter problem
- Issue 302: Sobel filter crashes on 228x240 32bit PNG
- Issue 304: Building AForge.Video.ffmpeg.dll with spaces in path names. Fix included.
- Issue 311: add support for 32bpp RGB to motion processing
- Issue 314: IActivationFunction implementing ICloneable
- Issue 317: Screen capture IVideoSource
- Issue 326: Camera Control to set focus, exposure, and manual control
- Issue 329: Support for keeping aspect ratio in VideoSourcePlayer
- Issue 331: AForge.Math.Geometry.GrahamConvexHull FindHull
- Issue 337: UnmanagedImage should call AddMemoryPressure and RemoveMemoryPressure
- Issue 341: ContrastCorrection wrong if factor == 1
- Issue 349: Implement Serializable for Matrix and Vector classes
* AForge
- Added SquaredDistanceTo() method to Point/IntPoint/DoublePoint, which returns square of Euclidean distance.
- Small fix to AForge.Parallel.For() - don't keep reference to for-loop's delegate, so GC could collect when needed.
* AForge.Math
- Fixed GrahamConvexHull so it handles correctly lists with 1 point only. Unit test is added.
- Added [Serializable] attribute to Vector3/4 and Matrix3x3/4x4 structures.
* AForge.Imaging
- Set minimum allowed value for ColorFactor, ColorPower, SpatialFactor and SpatialPower properties of
BilateralSmoothing to 1.
- Added ProcessGapsWithImageBorders property to Horizontal/Vertical Run Length Smoothing filter, which
allows to set if gaps between image borders and objects should be also filled or skipped.
- Fixed setting DPI resolution of result image which was failing before on Mono.
- Fixed OtsuThreshold bug, which was leading to wrong threshold calculation for images with highest intensity
maller than 255.
- Fixed blobs' color standard deviation calculation for 8bpp grayscale images.
- Fixed Sobel edge detector so it does not write beyond image buffer when doing intensity scaling step.
- Added 32 bpp RGB pixel format to the list of supported formats for motion processing classes.
- Minor fix for HSL to RGB conversion to make sure Alpha byte is always set to 255.
- Allow creating instance of replace channel filters without specifying image for the channel to replace.
- Added usage System.GC.RemoveMemoryPressuró()/AddMemoryPressure() to UnmanagedImage allocate/deallocation code.
- Fixed factor check in Contrast Correction image processing filter.
* AForge.Neuro
- Added implementation of ICloneable interface to activation functions.
* AForge.Video
- Increased buffer size for JPEG/MJEPG stream reader classes.
- Added ScreenCaptureStream class which captures specified rectangle of the screen. Added demo of its
usage to Player sample application.
* AForge.Video.DirechShow
- Updated FilterInfo class, so Name and MonikerString are no longer read only fields but read only properties.
- Added locking for access to video/snapshot capabilities cache and available inputs cache, so those are
not access simultaneously from multiple threads.
- Fixed setting crossbar's video input for devices which may have multiple inputs of the same type (like capture boards).
- Refactoring setting of video/snapshot resolution in VideoCaptureDevice, so user can specify only values
from the list of supported.
- A workaround introduced for Windows 8 issues when ICaptureGraphBuilder2::RenderStream() fails on 12 bpp format.
Such formats are simply ignored for now.
- Added code for setting/getting camera properties.
* AForge.Video.FFMPEG
- Fixed post build step for AForge.Video.FFMPEG, so it builds fine when path name contains spaces.
- Updating version of FFMPEG library being used to 2012-01-27 - the last version before API got changed.
* AForge.Controls
- Merged the fix which adds property allowing to keep aspect ratio in VideoSourcePlayer.
* AForge.Robotics.TeRK
- The Qwerk class is marked as deprecated.
* AForge.Robotics.Lego
- The RCXBrick class is marked as deprecated.
AForge.NET Framework 2.2.4.1 release notes
----------------------------------------
28.02.2012.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 290: Very noticeable video flicker/blinking using multiple different devices
* AForge.Video.DirechShow
- Resetting flag which requires update of crossbar input right after the input type was set. There was a bug
in the code which was resulting setting crossbar input type again and again causing flickering.
AForge.NET Framework 2.2.4 release notes
----------------------------------------
23.02.2012.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 53: Video Capture
- Issue 76: Can?t open video camera tv card
- Issue 271: Complex.Phase is slightly incorrect (or at least non-standard)
- Issue 272: Patch for /trunk/Sources/Neuro/Neurons/ActivationNeuron.cs
- Issue 273: static Random doesn't work in multi threading without locking...
- Issue 275: Resilient Backpropagation Learning
- Issue 277: Test if videoCapabilities is null
- Issue 279: Blob and BlobCounter cannot be extended as their constructors are internal. It would be good if we can extend these class.
- Issue 280: DisplayCrossbarPropertPage method for CaptureVideoDevices.
- Issue 281: GetPixel in UnmanagedImage class
- Issue 282: Image is not capturing from Capture Card
- Issue 283: Bilateral filter
* AForge.Math
- Fixed Complex.Phase property, so it provides proper value for cases when real part is less than zero.
* AForge.Imaging
- Blob'c constructor is made public, so could be reused by using inheritance.
- Blob.CenterOfGravity property is changed to have AForge.Point type, which is float, so now calculated CoG is more accurate.
- Added UnmanagedImage.GetPixel() method, which allows to get pixel out of 8/24/32 bpp image.
- Added UnmanagedImage.SetPixel(int, int, byte) method, which allows setting pixel with all color component set to same value
(for grayscale image this method is more intuitive since there is no RGB-to-grayscale conversion).
- Added support of 32 bpp RGB (not ARGB) images for BlobCounter.
- Added implementation of Bilateral smoothing image processing routine.
- Changing BrightnessCorrection and ContrastCorrection filter to use RGB color space instead of HSL:
1) It makes those filters faster;
2) It removes HSL related artifacts related to Hue;
3) It makes those filters simpler and more straight forward to users.
If someone is unhappy by this change, he can still use HSLLinear filter to get the effect as before.
* AForge.Neuro
- Replaced Neuron's static random numbers generator with its thread safe version.
- Exposed Neuron.Weights, Layer.Neurons, Network.Layers properties instead of using [] accessors.
- Optimized access to arrays to eliminate bound-checking.
- Added implementation RProp (Resilient Back Propagation) neural network learning algorithm contributed by Cesar Souza.
* AForge.Video.DirechShow
- VideoCaptureDevice is updated to never provide null for VideoCapabilities property. If device does not support video
capabilities or it failed providing them, then the property will return 0 length array, but not null.
- Added VideoCaptureDevice.DisplayCrossbarPropertyPage() method, which allows showing property page of a crossbar for
the currently running video source (if it provide crossbar configuration).
- Added VideoCaptureDevice.AvailableCrossbarVideoInputs property, which lists available video inputs of the capture card.
This can be used to select video input to use before running video device using your own UI.
- Added VideoCaptureDevice.CrossbarVideoInput property, which allows setting video input to use by the video device.
- VideoCaptureDeviceForm is updated to allow selecting video input for capture cards.
* AForge.Video.FFMPEG
- Fixing VideoFileReader and VideoFileWriter classes so they convert file name to UTF8 string before opening file.
- Fixing signing of AForge.Video.FFMPEG.dll assembly, so now it has valid signature.
* AForge.Video.Kinect
- Updating libfreenect library with newer version which is checked out from master branch and built on February 20 2012.
- Updated Kinect cameras' stopping routines, so they don't block when device was disconnected and user tries to stop cameras.
- Added Kinect disconnection routine, so when Kinect device gets disconnected, cameras will stop automatically and
specify DeviceLost as a reason.
- KNOWN ISSUES: It seems like libfreenect's freenect_process_events_timeout() function still blocks when device gets lost
causing some issue on the USB side, making it hardly possible to gracefully stop managed Kinect's status thread.
As a workaround the AForge.NET's code sets thread type to "background", so it does not stop application from exiting.
* AForge.Controls
- Updated Chart control so it does not check if points coordinates are in X/Y range of the control when drawing them.
Instead of this the control sets clipping rectangle, so unwanted point/lines are not drawn.
- Updated VideoSourcePlayer.GetCurrentVideoFrame() method so it returns complete copy of the current frame rather than
the object produced by Bitmap.Clone().
AForge.NET Framework 2.2.3 release notes
----------------------------------------
12.12.2011.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 217: Support for Alpha component in Image.Drawing methods
- Issue 238: Build errors and warnings under VS 2010
- Issue 251: Cannot build from SVN
- Issue 252: Rotate filter incorrectly calculates the size of the image after rotation
- Issue 261: VideoFileWriter should implement IDisposable
- Issue 262: Convolution filter generating AccessViolationException for 640x480 16bpp gray scale image
- Issue 264: Support for the alpha channel in convolution filters
- Issue 266: GA: Donate thread-safety to chromosomes
- Issue 269: Support basic authentication when connecting to IP Cameras
* General
- Updated project/solution files of the framework's sources, tool and unit tests to VS.NET 2010 (C#/C++ express 2010).
- Updated project/solution files of all sample to use C# express edition 2010.
* AForge
- Added ThreadSafeRandom class which is a wrapper for the System.Random class providing thread safety for random numbers
generation methods.
* AForge.Imaging
- Added implementation of Run Length Smoothing Algorithm (horizontal and vertical versions).
- Improved performance of grayscale filters so those are about ~4.5 times faster doing conversion of 24/32 bpp color
images to 8 bpp grayscale images, which is achieved by replacing floating point calculation with integer calculation.
- Fixing Convolution filter so it processes correctly 16bpp grayscale images. Previously there was a bug causing 16 bpp
grayscale images to be processed as 24/32 colour image.
- Adding Width and Height properties to IntegralImage.
- Added IntegralImage.GetHaarXWavelet() and IntegralImage.GetHaarYWavelet(), which calculate horizontal and vertical Haar wavelets.
- Convolution filter is extended to support processing of alpha channel for 32 bpp and 64 bpp images, which is controlled
by ProcessAlpha property (set to false by default). For filters like Blur, Mean and GaussianBlur the property is set to
true by default, so the alpha channel gets blurred also.
- Fixed rotation filters, so those don't shift image by one pixel, which was easy to notice when rotating by -90/90 angles.
The bug was caused by the fact that for edge pixels source position was calculated one pixel out of image's bounds.
- Added support for alpha blending for methods of AForge.Imaging.Drawing class.
* AForge.Math
- Updated classes of AForge.Math namespaces to use new ThreadSafeRandom class, so random numbers generation in those
classes becomes thread safe.
* AForge.Genetic
- Updated classes of AForge.Genetic namespaces to use new ThreadSafeRandom class, so random numbers generation in those
classes becomes thread safe.
* AForge.Video
- Changing IVideoSource.BytesReceived property type from int to long, so it may fit higher values.
- Fixing AsyncVideoSource so it does full deep cloning of bitmap provided by nested video source instead of using
System.Drawing.Image.Clone(), which does not seem to be reliable.
- Added ForceBasicAuthentication property for MJPEGStream and JPEGStream classes, which allows to force HTTP basic
authentication by adding required HTTP header.
* AForge.Video.FFMPEG
- Allow specifying of video stream bit rate when open video file using VideoFileWriter, so user could trade between
video quality and file size.
- Implemented IDisposable interface for VideoFileReader and VideoFileWriter classes.
- Updating external FFMPEG library to version from November 30 2011. Updated AForge.Video.FFMPEG to build fine with
the new FFMPEG build.
* AForge.Video.DirectShow
- Fixed BytesReceived property of FileVideoSource and VideoCaptureDevice, so those provide number of provided bytes.
* Samples
- Fixing few bugs in Blobs Explorer sample application:
+ If convex hull contain 3 point or less, then don't try finding its quadrilateral;
+ If object's edge contains only one pixel, then need to draw it individually instead of using Graphics.DrawLines() method.
AForge.NET Framework 2.2.2 release notes
----------------------------------------
16.09.2011.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 173: 16bpp greyscale Masked Filter
- Issue 228: Resolution of Bitmap returned by BaseTransformationFilter.Apply is default
- Issue 241: HuePicker control it's not shade color
- Issue 244: Error in BlobCountingObjectsProcessing constructor
- Issue 245: Chart control crashes sample applications for AForge.Neuro
- Issue 246: special character (line 394) Video.VFW\win32.cs
- Issue 249: memory leak in ToManagedImage
- Issue 253: Problem with StDev that return NAN
* AForge.Imaging
- Fixing AForge.Imaging.RGB class, so by default alpha channel is initialized with 255 (not transparent). Also updated HSL
and YCbCr converters to set alpha to 255.
- Added optimized version of Bayer filter, which is optimized for GRBG and BGGR patterns. Compared to generic version, the
optimized version is about 10 times faster.
- Adding try/catch block into UnmanagedImage.ToManagedImage(), so it handles possible exceptions and disposes managed image
if it was already created.
- Added ApplyMask image processing routine which applies mask to the specified image - keeps original pixels' values or
sets them to 0 depending on corresponding value in the mask image/array.
- Added MaskedFiler image processing routine, which allows to apply filter only the part of image specified by mask
(0 values of mask tell that original pixel's value must be kept; otherwise - filtered).
- Fixed flood fill classes to avoid conversion of pointer to Int32 so they should work fine on 64 bit systems.
- Setting horizontal/vertical resolution of result image to the same values as source image has. The fix is applied to filters
and image processing routines which accept Bitmap as parameter and return Bitmap as result. Obviously it can not copy DPI
settings when image processing routine is applied to BitmapData or UnmanagedImage.
* AForge.Math
- Added fix to PointsCloud.FindQuadrilateralCorners() so it does provide 2 same corners in the case when both 3rd and 4th
potential corners are very close to the line connecting 1st and 2nd corner.
- Fixed bug in Matrix3x3 add operator, so it adds instead of doing subtraction (silly bug).
- Adding addition and subtraction operators/methods for Matrix4x4.
- Exposing FocalLength property for POSIT and CoplanarPosit classes so it could be set not only using constructor.
- Added Histogram.TotalCount, which represents total count of values contributed to the histogram.
- Marked both Histogram and ContinuousHistogram as serializable.
- Changing algorithm for standard deviation calculation from single-pass to two-pass in order to minimize numerical errors.
* AForge.Vision
- Fixed one of the constructors for BlobCountingObjectsProcessing so it passes its parameter (highlighting motion detection)
further to another constructor.
- Extended motion detectors to support 8 bpp grayscale image for motion detection.
* AForge.Video.DirectShow
- Moving VideoCaptureDeviceForm from Player sample application to AForge.Video.DirectShow namespace and beautifying it a bit.
Now the form can be reused in other applications, which require selection of local video devices.
- Updating COM interop definition for few interfaces of DirectShow (should get more stable in some cases).
* AForge.Video.Ximea
- Added additional camera parameters/enumerations for XIMEA cameras.
* AForge.Controls
- Updating some AForge.Controls classes to use AForge.Imaging instead of internal tools since this assembly references
AForge.Imaging.dll anyway.
- Fixing few bugs in Chart control: fixed cloning of data input data and fixed drawing of dots series type.
- Added PlayingFinished event to VideoSourcePlayer, so users could track video stopping directly through the control
without subscribing to video source events.
* Tools
- Adding AForge.DebuggerVisualizers tool assembly, which allows visualizing Image, BitmapData, UnmanagedBitmap
and Histogram objects during debugging.
* Samples
- Fixing Motion Detector sample to perform safe update of UI (avoid cross thread access).
AForge.NET Framework 2.2.1 release notes
----------------------------------------
03.08.2011.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 236: Compile time warnings related to bad XML comments
* AForge.Math
- Fixing == operator for Line and LineSegment classes, so it does not cause exception when line is compared with null.
AForge.NET Framework 2.2.0 release notes
----------------------------------------
28.07.2011.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 140: Proxy support for JPEGStream\MJPEGStream
- Issue 164: Converting an Image between Rectangular and Polar Coordinates
- Issue 176: Image Statistics (histogram) mask
- Issue 180: Mode function for Aforge.Math Statistics class
- Issue 184: using IPPrototyper plugins in other applications
- Issue 185: Equals method
- Issue 187: Fix grouping of video capabilities
- Issue 188: VideoCaptureDevice.DesiredFrameSize Behaves Inconsistently
- Issue 189: Point Grey camera support
- Issue 191: Add VLC support to MJPEGStream class
- Issue 192: File locked in AForge.Imaging.Formats.ImageDecoder.DecodeFromFile
- Issue 193: Lego NXT HiTechnic color and compass sensor
- Issue 194: Please provide type converters for NXTBrick internal structs
- Issue 195: Provide constructor with arguments allowing to initialize NXTBrick internal structs
- Issue 196: Provide a way to listen to raw protocol (NXT brick)
- Issue 197: MJPEGStream.cs enhancements
- Issue 198: mjpegstream not stoping
- Issue 199: Conversion operators for IntRange and DoubleRange objects
- Issue 200: Add support for microsoft lifecam (and potentially other webcams) - directshow wrapper
- Issue 201: Consider merging HuePicker from IPLab into AForge.NET Framework
- Issue 207: Debugging issues in Horizontalintensitystatistics and verticalintensitystatistics
- Issue 209: VerticalIntensityStatics.cs IsGrayScale property
- Issue 210: Improve NXTBrick.SensorType documentation
- Issue 211: Improve NXTBrick.SensorMode documentation
- Issue 212: Enable reset motor relative position
- Issue 213: Avoid PInvokeStackImbalance errors
- Issue 215: Current trunk has build errors
- Issue 216: Camera is not working
- Issue 218: Undocumented InvalidImagePropertiesException throw
- Issue 219: Provice additional (fast) methods to communicate with NXT brick
- Issue 222: Add MPEG-2 encoding to Video.FFMPEG.VideoWriter
- Issue 223: Marking {Int|Double}Range as Serializable
- Issue 226: FFmpeg - write video frames with a specific timestamp
- Issue 227: AccessViolationException when PictureBox displaying 16bpc image
- Issue 229: 16-bit greyscale/48-bit RGB support in CanvasMove
- Issue 230: 16-bit greyscale/48-bit RGB support in RotateNearestNeighbor.cs
- Issue 231: Misspelled comment
* General
- Adding AForge.Video.FFMPEG namespaces, which provides classes allowing to read/write video file through
FFmpeg library API. The code is experimental so far and is going to be extend. When extended it is supposed to
become replacement for AForge.Video.VFW namespace someday.
- Adding AForge.Video.Kinect namespaces containing classes to get access to Microsoft Xbox Kinect device.
- Adding AForge.Video.Ximea namespace, which provides access to XIMEA video camera through their native
API (m3api.dll)
- Removing all use cases of lock(this) and replacing them with locking a dummy object.
- Updated interoping of memcpy() and memset() to use Cdecl calling convention.
- Avoiding casting of IntPtr.ToPointer() to (int), which causes issues on 64 bit systems. Instead of it is casted to (byte*).
- Updated "Build All.sln" solution file, so it has "Release" and "Release Complete" configuration. "Release" is aimed
for most users who want to build the framework. It will build all except AForge.Robotics.TeRK, which requires installation
of ICE framework. "Release Complete" is aimed only for those who build release or do something with TeRK.
* AForge
- Adding Point structure, which contains X/Y coordinate of float type. Adding Range structure, which is range between
min/max of float type. Changing all AForge.NET framework classes and samples to work with Point/Range instead of
DoublePoint/DoubleRange, which are left for some applications requiring higher precision.
- {Int|Double}Range as well as {Int|Double}Point are marked [Serializable].
- Added AForge.DeviceBusyException exception, which could be thrown in cases when multiple access to the same device is not allowed.
- Added AForge.DeviceErrorException exception to report about possible errors in some devices.
* AForge.Imaging
- Added TransformToPolar image processing routine which transforms source image to polar coordinates. Produced effect is
similar to the one available in GIMP as "Polar Coordinates" distortion filter. The new class provides similar properties
as configuration options in GIMP.
- Added TransformFromPolar which does transformation from polar coordinates to rectangle.
- Improving performance of EuclideanColorFiltering image processing routine.
- Added UnmanagedImage.CollectActivePixels() method, which returns list of pixels' coordinates having none black color.
- Adding UnmanagedImage.SetPixel() and UnmanagedImage.SetPixels() methods, which are nice to have is some case for visualization
of some points. SetPixel() sets single pixel, but SetPixels() sets list of pixels.
- Statistics classes now throw InvalidImagePropertiesException exception if user access invalid histogram - gray histogram
for color image or color histograms for grayscale image.
- Fixed IsGrayscale property for VerticalIntensityStatistics, HorizontalIntensityStatistics and ImageStatistics classes,
so it returns correct value.
- Added Ordered Color Dithering image processing routine as described on Wikipedia: http://en.wikipedia.org/wiki/Ordered_dithering
- Updated ImageStatistics, ImageStatisticsHSL and ImageStatisticsYCbCr classes so they can gather statistics over image area,
which can be specified with a mask (8bpp image or byte[,] array).
- Updating documentation of BlobCounter mentioned that InvalidImagePropertiesException exception can be thrown if provided
image is 1 pixel wide only. It should be 2 pixels wide at least.
- Updated UnmanagedImage.ToManagedImage() method to copy entire image at once if the source and destination strides are equal.
- Adding UnmanagedImage.ToManagedImage(bool) which allows specifying if user wants to get managed copy of the unmanaged
image or just a wrapper which depends on the managed image.
- Added Bayer filter routine, which creates color image out of grayscale image produced by image sensor built with
Bayer color matrix.
- RotateNearestNeighbor image processing routine is extended to support 16 bpp grayscale images and 48 bpp color images.
- CanvasMove is extended to support 16 bpp grayscale and 48/64 bpp color images.
* AForge.Imaging.Formats
- Updated ImageDecoder.DecodeFromFile() to load load standard image formats (BMP, JPG, PNG, etc.) through memory stream
instead of using standard .NET's FromFile( string fileName ) to avoid locking of the file.
* AForge.Math
- Adding Math.Vector3 structure which provides some operations on 3D vectors.
- Adding Vector4 structure, which provides some operation with 4D vectors.
- Adding Matrix3x3 structure which provides some operations on 3x3 matrices.
- Adding implementation of POSIT algorithm - 3D pose estimation algorithm described by Daniel DeMenthon and Larry Davis in
the "Model-Based Object Pose in 25 Lines of Code".
- Adding CoplanarPosit algorithm's implementation, which is an algorithm for estimating 3D pose of a model described by coplanar points.
- Added AForge.Math.Statistics.Mode() method to calculate mode value of the specified histogram array.
- Added equality and inequality operator for Line and LineSegment classes, as well as Equals() and GetHashCode() methods.
- Fixing a bug in GrahamConvexHull, which was modifying input list of points. Some unit tests were added for GrahamConvexHull.
- Fixed Mean(), StdDev() and Entropy() methods of AForge.Math.Statistics, so they don't return NaN when empty histogram (with 0 hits) is provided.
- Fixing ContinuousHistogram class, so Mean and StdDev equals to zero if empty histogram (with zero hits) is provided.
* AForge.Video
- Minor update to AsyncVideoSource class - changing manual reset event to auto reset.
- Added Proxy property to both JPEGStream and MJPEGStream classes, which allow user to specify proxy server to use.
- Added support for "application/octet-stream" content type into MJPEGStream class, so it is possible to get access to VLC
streaming of web camera, for example (in the case MJPEG transcoding is used in VLC).
- Setting stream's read time-out to the same value as request's time-out in MJPEGStream and JPEGStream.
- Report to clients about every exception occurred in JPEGStream and MJPEGStream classes. Only ApplicationException is hidden in
MJPEGStream class, which is thrown internally only in one case. All the rest will be sent to user for notification.
- Added AFore.Video.VideoException exception, which will be used further by some video classes instead of ApplicationException.
- Improving a bit reaction on thread aborting for JPEGStream and MJPEGStream classes, so they return faster when ThreadAbortException
exception is received.
- Added one extra reason of video finishing, which is ReasonToFinishPlaying.VideoSourceError.
- Improving frame interval processing if a pause needs to be done between video frames.
* AForge.Video.DirectShow
- Updating VideoCapabilities class to provide multiple supported FPS rates for a particular resolution.
- Adding try/catch blocks around getting IAMStreamConfig interface, which fails on Point Grey cameras. So with this extra
guard these cameras should work fine now.
- Added monitoring for EC_DEVICE_LOST event in VideoCaptureDevice, so it stops video capturing when device is unplugged.
User is notified through PlayingFinished event.
- Updating media event's DirectShow wrapper, so events are correctly detected on 64-bit systems (eventû like device lost
and end of video file).
- VideoCaptureDevice is extended to support still image snapshots, which can be made using camera's shutter button or by
simulating the trigger. The snapshots are provided through the new SnapshotFrame event. Capabilities of snapshots can be checked
using SnapshotCapabilities property and desired snapshot size can be set using DesiredSnapshotSize property.
- When desired video size is set, perform search of complete media type structure and set it as it is configured when enumerating
capabilities (fixes thes issue with Microsoft's LifeCam).
- Added try/catch block around retrieving IAMVideoControl interface, since it seems like some USB camera drivers don't support this interface.
- Updated signature of memcpy() in AForge.Video.DirectShow so it uses byte* instead of int. Also ToPointer() is used
with IntPtr instead of ToInt32(). Should get better on x64 systems now.
* AForge.Video.VFW
- Updating exception types thrown by AVIReader and AVIWriter, so they are different for different type of exceptions.
* AForge.Robotics.Lego
- Added constructor for NXTBrick.MotorState structure, so it is "easer" to initialize it from user's code.
- Turned NXT structures into classes and provided properties for them (many of them are read-only since those are supposed to
be set by framework, not by user).
- NXTBrick.SendCommand() is made public, so users may send their own custom messages.
- Added NXTBrick.MessageRead and NXTBrick.MessageSent events, so a communication listener could be implemented.
- NXTBrick class is extended with 3 extra method: ReadHiTechnicColorSensor(), ReadHiTechnicCompassSensor() and
ReadHiTechnicAccelerationTiltSensor(), which read HiTechnic's color, compass and acceleration sensors.
- NXTBrick.ResetMotorPosition() method is extended with extra parameter, which allows to reset either relative or absolute
motor's position.
- Updated documentation of NXTBrick.SensorType enumeration.
- Improved documentation for NXTBrick.SensorMode enumeration.
- Some improvements for communication with Lego NXT brick, see ticket #219
- Added overloads for PlayTone(), SetMotorState(), ResetMotorPosition(), SetSensorMode(), ClearSensor() and LsWrite() methods
of NXTBrick class, which can send commands without waiting for reply - faster versions.
* AForge.Controls
- VideoSourcePlayer is extended to support cameras providing 16 bpp grayscale or 48/64 bpp color image.
- Merged HuePicker control from IPLab project into the AForge.NET framework. Some polishing of the class and its documentation
was done.
- Making sure VideoSourcePlayer control gets resized if image from video source changes its size.
- Fixing VideoSourcePlayer so it does not cause dead lock if user does access to UI using Invoke() in NewFrame event handler
(moving NewFrame event firing out of lock block).
- Making sure that Chart control displays only data which are in the configure x/Y range. Also updating Y range if required
when new X range is set.
* Tools
- Added check for IPPrototyper's window position stored in configuration file. If window outside of the screen, then use its
default location. Window may get outside if the application was used on a system with multiple screens last time and the it
is started again when one of the screens got disconnected.
- Created separate AForge.Imaging.IPPrototyper assembly, which holds interfaces for image processing prototyping and default
implementation of IImageProcessingLog interface. Updated IPPrototyper tool and sample application to accommodate these changes.
* Samples
- Adding Snapshot Maker sample application, which demonstrates recently added feature for making snapshots using DirectShow
device (USB camera).
- Adding new sample applications, which demonstrate usage of Posit and CoplanarPosit algorithms recently added to
AForge.Math.Geometry namespace.
- Adding Kinect Capture sample application which demonstrates access to MS Xbox Kinect device.
- Updated NXT sample application to demonstrates MessageSent and MessageRead events provided by NXT brick.
- Adding sample application demonstrating access to XIMEA camera.
- Improving FPS counter for "Player" and "Two Camera Test sample" applications.
AForge.NET Framework 2.1.5 release notes
----------------------------------------
11.01.2011.
!! This version has backward incompatibility with the previous version (see details below) !!!
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 20: Color Reduction functionality
- Issue 151: Add support for 32-bits ARGB images in the CornersMarker filter
- Issue 152: Slow performance of PermutationChromosome.CreateChildUsingCrossover
- Issue 154: PointedColorFloodFill causing Stack Overflow
- Issue 155: Deadlock with out-of-order calling of VideoSourcePlayer.WaitForStop and VideoSourcePlayer.SignalToStop.
- Issue 157: MJPEGStream could handle incorrect boundary values
- Issue 158: XML documentation files are not included on default installation
- Issue 160: Blob Detection problem with certain aspect ratio rectangles
- Issue 166: Find line intersections
- Issue 167: Math.Tools.IsPowerOf2 returns true when given 0
- Issue 169: Distance and Similarity metrics
- Issue 174: More Line construction options
- Issue 175: LineSegment.DistanceToPoint and GetIntersectionWith functions
- Issue 178: HueModifier does not work with 32bpp images
- Issue 181: Bicubic resize kernel is badly implemented
- Issue 182: Make PointsCloud accept a wider variety of arguments
* AForge
- Fixing bug in IntRange.IsOverlapping() and DoubleRange.IsOverlapping(), when these methods report
"false" (no overlapping) in the case if specified range completely covers and wider than the range
of the instance which method is invoked.
- Added equality and inequality operators for IntPoint and DoublePoint.
*AForge.Math
- Added a check for greater than 0 in IsPowerOf2() function. It will return false for everything which is <= 0.
- Introducing Line class in AForge.Math.Geometry, which is supposed to keep lines' related methods.
- Committing contributed code, which is about distance and similarity metrics. New classes are placed into
AForge.Math.Metrics namespace.
- Fixing PointsCloud.FindQuadrilateralCorners() so it does not return 4 corners in some cases, where 2 of them are the same.
- Fixes to PointsCloud.FindQuadrilateralCorners():
1) Fixing the issue of detecting flat rectangles with high aspect ratio between adjacent sides;
2) Adding PointsCloud.QuadrilateralRelativeDistortionLimit static property, so user could tweak distortion limit
if he understands what he does.
- Changed methods of PointsCloud class to accept IEnumerable<IntPoint> instead of List<IntPoint>. Only Shift()
method is changed to accept IList<IntPoint>.
* AForge.Imaging
- Adding support for custom blobs' filtering routines, which implement IBlobsFilter interface.
- Improved automatic calculation of new image's size which is the result of quadrilateral transformation.
- Image.FormatImage() is marked as deprecated and Image.Clone() should be used instead with specifying desired pixel format.
- Fixing Convolution image processing filter to copy alpha channel values as they are for 32 bpp images.
- Added support of 32-bit images to CornersMarker and MoravecCornersDetector.
- Changing implementation of PointedColorFloodFill to use queue instead of stack, so the image processing routine
will not generate stack overflow any more. It is speed is a bit reduced as a result of this, but it may get
noticeable only when processing thousands of images (depends on image size of course).
- Adding FillHoles image processing routine, which allows to fill black holes in white objects in binary images.
- Added median cut color quantization algorithms. Also added helper ColorImageQuantizer class, which simplifies calculation
of reduced color table for images or their re-coloring.
- Adding color dithering image processing routines, which are placed into AForge.Imaging.ColorReduction namespace.
- Small improvement in Integral Image calculation for minor calculation speed-up.
- Adding local thresholding routine described by Derek Bradley and Gerhard Roth in the "Adaptive Thresholding Using
the Integral Image" paper (see BradleyLocalThresholding class).
- Adding ThresholdedDifference and ThresholdedEuclideanDifference, which calculate threshold difference of two images
(one class uses Manhattan distance to calculate difference between pixel values, but another class uses Euclidean distance).
- Changing bicubic kernel for resize and rotation image processing routines to the one described on Wikipedia
(coefficient "a" is set to -0.5).
- !! Backward compatibility breaking change !! Changing type of Blob.Image from Bitmap to UnmanagedImage, since in
most cases extracting of blob's image is required for its further processing, but not just for displaying
(.NET's Bitmap type does not make any sense doing image processing).
- Fixed HueModifier image processing routine to process correctly 32 bpp images (using correct pixel size value).
* AForge.Video
- Updating MJPEGStream video source class to remove double quotes from start/end of boundary, which can
be added by some IP cameras.
- Adding AsyncVideoSource, which is a proxy video source for asynchronous processing of another nested video source.
- Improving boundary parsing in MJPEGStream video source class, so it accepts more cameras which tend to have their
own specifics in MJPEG stream.
* AForge.Video.DirectShow
- Fixed bug in disposing of DirectShow AMMediaType structure. The bug was introduced in 2.1.4 version.
* AForge.Genetic
- Modified PermutationChromosome.CreateChildUsingCrossover() to use arrays for fast lookup of genes'
indexes in parents' chromosomes.
* AForge.Controls
- Added check for cross-thread access to most methods/properties (those which are not allowed to be accessed
from another thread) of VideoSourcePlayer class. Lock is still kept in some methods/properties, which access
video frame (this must be protected anyway).
* IPPrototyper
- Adding AutoSize size mode for picture box, which is nice to have when processing big images, which may need scrolling.
- Recent folders list size is increased to 7.
AForge.NET Framework 2.1.4 release notes
----------------------------------------
01.09.2010.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 139: Possible Type Improvement in CannyEdgeDetector.cs
- Issue 142: Behaviour mismatch between SobelEdgeDetector.Apply and SobelEdgeDetector.ApplyInPlace
- Issue 143: Off-by-one error in PointsCloud.GetCenterOfGravity
- Issue 147: Perform SimpleQuadrilateralTransformation on entire image.
- Issue 149: Round DoublePoint to IntPoint, rather than truncating.
* General
- Adding some unit test based on Gallio Automation Platform. The unit tests mostly cover new
recently added features for now. See "Unit Tests\Read Me.txt" for additional information.
- Adding initial version of IPPrototyper application (Image Processing Prototyper) - a tool which is
aimed to help prototyping/testing of image processing and computer vision routines.
* AForge
- Added IntPoint.EuclideanNorm() and DoublePoint.EuclideanNorm() methods, which calculate point's
distance to (0, 0) point.
- Added DoublePoint.Round() method to round point to IntPoint using Math.Round().
* AForge.Math
- Switching GeometryTools class to be public, which contains few tool methods to calculate angle
between two vectors and angle between two lines.
- Fixing bug of GetCenterOfGravity(), where first point was not taken into account.
* AForge.Imaging
- Fixing an old somehow survived typo - changing "FormatTransalations" to "FormatTranslations".
This change may affect those users, who use the property.
- Fixing a bug in line drawing (Drawing.Line()) - avoiding division by zero.
- Adding UnmanagedImage.Collect8bppPixelValues() and UnmanagedImage.Collect16bppPixelValues() methods
to collect pixels' values from the list of specified coordinates.
- Adding SimpleQuadrilateralTransformation as replacement of QuadrilateralTransformationBilinear and
QuadrilateralTransformationNearestNeighbor filters. The new filter does transformation as with
interpolation, as without.
- QuadrilateralTransformationBilinear and QuadrilateralTransformationNearestNeighbor are marked as deprecated
and generate warning if used. But still work.
- BaseQuadrilateralTransformationFilter is removed as no longer required.
- Adding QuadrilateralTransformation - an implementation of quadrilateral transformation based on homogeneous
transformation.
- Adding BackwardQuadrilateralTransformation - an image processing routine to transform given source
image into specified quadrilateral area of destination image.
- Putting black rectangle around processing area, so result of edge detectors look the same in the case
if Apply() or ApplyInPlace() methods are called (ApplyInPlace() was leaving some garbage from original image).
- Extending DocumentSkewChecker and HoughLineTransformation to allow processing of specified rectangle only,
so lines could be searched only in the area of interest.
- DocumentSkewChecker: Replacing MinBeta and MaxBeta properties with single MaxSkewToDetect property,
which covers both. Also removing cycled checking of lines' angles, since it is not required due to
limited range of detection.
* AForge.Video.DirectShow
- Fixing disposing of AMMediaType.
- Improving FileVideoSource, so it can play video files which have audio stream as their first stream
(which becomes first output pin of IBaseFilter). First output pin was always taken before and used for
connection with input pin of sample grabber. However it was failing in those cases, when first output pin
had audio type. Now the code is changed to iterate through source's output pins searching for one, which
can be connected with sample grabber.
- Changing DirectShow related classes to use IMediaControl::Stop() method instead of IMediaControl::StopWhenReady()
which allows data queuing, which does not seem to be required.
* AForge.Controls
- Adding addition "request to stop" volatile boolean variable in VideoSourcePlayer to avoid trying
handle NewFrame event when WaitForStop() is already invoked, so rare deadlock is avoided.
* Samples
- Adding "IPPrototyper Sample" application - demonstrates usage of IPPrototype tool.
AForge.NET Framework 2.1.3 release notes
----------------------------------------
01.07.2010.
Version updates and fixes:
* Fixed registered issues/requests:
- Issue 132: Adjustable Threshold for blob counter
- Issue 135: Convert from Format16bppGrayScale to Format8bppIndexed is missing
- Issue 136: Enhancement to disable reference clock on DirectShow graphs
- Issue 137: Improvement request for svs
- Issue 138: Enable amendment of Population size on the fly
* AForge.Math
- Adding interface for shape optimizers its 3 implementations:
1) FlatAnglesOptimizer - shape optimizer, which removes obtuse angles (close
to flat) from a shape;
2) LineStraighteningOptimizer - shape optimizer, which removes points within
close range to shapes' body;
3) ClosePointsMergingOptimizer - shape optimizer, which merges points within
close distance to each other.
- Added SimpleShapeChecker class for checking simple geometrical shapes.
- Bug fix in GrahamConvexHull - don't process points with same coordinates as the first point.
- Few updates to PointsCloud.FindQuadrilateralCorners():
1) Bug fix - wrong points were used to compare distances between points;
2) Using relative distortion limit instead of hard-coded constants for checking if certain
points are far away enough;
3) Searching first point as the furthest from shape's centre, instead of from (0, 0) point
of coordinates system.
* AForge.Imaging
- Fixing SusanCornersDetector - don't dispose internal grey image in the case if
greyscale image was given as input.
- Increasing size limits for convolution's kernel size and structuring element of
morphological operators. The limit is set to 99. The benefit of such big kernels
is not clear, but if users want it and ready to wait until such lengthy image processing
is done, then why not to give it to them.
- Added background threshold property to blob counters, so thresholding step could be
skipped in many cases.
- Adding LevelsLinear16bpp image processing filter, which is similar to LevelsLinear,
but designed for images with 16 bpp planes - 16 bpp grayscale or 48/64 bpp images.
- Added two methods into AForge.Imaging.Image class: Convert16bppTo8bpp() and Convert8bppTo16bpp()
which perform conversion of images with 16 bpp color planes to images with 8 bpp color planes
and vice versa.
- Few minor improvements to CannyEdgeDetector: changed from double to int type for those
variables, which are really integer; removed incrementing index variable, which is not used
inside of a loop; clarified documentation about hysteresis.
* AForge.Video
- Putting check of IsRunning property into Start() method of all video sources, so
it checks if video source is really running or not. Checking thread variable for null
was not a good check if user calls SignalToStop() without further WaitForStop().
* AForge.Video.DirectShow
- Merging the code contributed by Jeremy Noring, which allows to disable reference clock