using System; /* using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Runtime.InteropServices; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; using System.ComponentModel; using System.Drawing.Imaging; using System.Globalization; using static System.Net.Mime.MediaTypeNames; using System.Diagnostics; using System.Net.NetworkInformation; using System.Net; using System.Management; using System.IO.Ports; using System.IO; using System.Security.Cryptography; using System.Windows.Forms.Design; */ namespace UTIL { #region Медианный фильтр public class GMedian where T : IComparable { private T[] buf; byte _count = 0; UInt16 _num = 0; public GMedian(UInt16 num) { buf = new T[num]; _count = 0; _num = num; } public T filtered(T newVal) { buf[_count] = newVal; if ((_count < _num - 1) && (buf[_count].CompareTo(buf[_count + 1]) > 0)) { for (int i = _count; i < _num - 1; i++) { if (buf[i].CompareTo(buf[i + 1]) > 0) { T buff = buf[i]; buf[i] = buf[i + 1]; buf[i + 1] = buff; } } } else { if ((_count > 0) && (buf[_count - 1].CompareTo(buf[_count])) > 0) { for (int i = _count; i > 0; i--) { if (buf[i].CompareTo(buf[i - 1]) < 0) { T buff = buf[i]; buf[i] = buf[i - 1]; buf[i - 1] = buff; } } } } if (++_count >= _num) _count = 0; return buf[_num / 2]; } } #endregion #region Медианный фильтр 2 public class GMedian3 { public UInt16 filtered(UInt16 value) { // возвращает фильтрованное значение bufUI16[_counter] = value; if (++_counter > 2) _counter = 0; return (Math.Max(bufUI16[0], bufUI16[1]) == Math.Max(bufUI16[1], bufUI16[2])) ? Math.Max(bufUI16[0], bufUI16[2]) : Math.Max(bufUI16[1], Math.Min(bufUI16[0], bufUI16[2])); } public Int16 filtered(Int16 value) { // возвращает фильтрованное значение bufI16[_counter] = value; if (++_counter > 2) _counter = 0; return (Math.Max(bufI16[0], bufI16[1]) == Math.Max(bufI16[1], bufI16[2])) ? Math.Max(bufI16[0], bufI16[2]) : Math.Max(bufI16[1], Math.Min(bufI16[0], bufI16[2])); } public UInt32 filtered(UInt32 value) { // возвращает фильтрованное значение bufUI32[_counter] = value; if (++_counter > 2) _counter = 0; return (Math.Max(bufUI32[0], bufUI32[1]) == Math.Max(bufUI32[1], bufUI32[2])) ? Math.Max(bufUI32[0], bufUI32[2]) : Math.Max(bufUI32[1], Math.Min(bufUI32[0], bufUI32[2])); } public Int32 filtered(Int32 value) { // возвращает фильтрованное значение bufI32[_counter] = value; if (++_counter > 2) _counter = 0; return (Math.Max(bufI32[0], bufI32[1]) == Math.Max(bufI32[1], bufI32[2])) ? Math.Max(bufI32[0], bufI32[2]) : Math.Max(bufI32[1], Math.Min(bufI32[0], bufI32[2])); } public float filtered(float value) { // возвращает фильтрованное значение buff[_counter] = value; if (++_counter > 2) _counter = 0; return (Math.Max(buff[0], buff[1]) == Math.Max(buff[1], buff[2])) ? Math.Max(buff[0], buff[2]) : Math.Max(buff[1], Math.Min(buff[0], buff[2])); } public Double filtered(Double value) { // возвращает фильтрованное значение bufd[_counter] = value; if (++_counter > 2) _counter = 0; return (Math.Max(bufd[0], bufd[1]) == Math.Max(bufd[1], bufd[2])) ? Math.Max(bufd[0], bufd[2]) : Math.Max(bufd[1], Math.Min(bufd[0], bufd[2])); } UInt16[] bufUI16 = new UInt16[3]; Int16[] bufI16 = new Int16[3]; UInt32[] bufUI32 = new UInt32[3]; Int32[] bufI32 = new Int32[3]; Double[] bufd = new Double[3]; Single[] buff = new Single[3]; Byte _counter = 0; }; #endregion }