You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.8 KiB
132 lines
4.8 KiB
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<T> where T : IComparable<T> |
|
{ |
|
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 |
|
|
|
}
|
|
|