Суть задачи в следующем, есть массив чисел (скажем 70 элементов), все типа byte (от 0 до 255), проблема в том что данные отличаются недостаточно сильно, то есть к примеру минимальное 1, максимальное 20 (но может быть и 255 в конкретном случае), хотелось бы увеличить "контрастность" чисел так чтобы максимальное осталось таким как было (не увеличилось) а остальные изменились, маленькие стали еще меньше средние уменьшились, но не слишком сильно, чтобы это было равномерно. Пытался сообразить какие манипуляции с этими данными, чтобы такое провернуть, но не могу математически сформулировать, тут скорее всего нужно применить тригонометрические функции, но с ней у меня плоховато) В гуглах ничего похожего не встретил, если кто знаком или хорошо в этом разбирается, есть идеи как можно массив обработать?
Не углубляясь в математическую сторону вопроса, первое же решение, приходящее в голову — построить карту для элементов массива, чем меньше элемент, тем выше индекс для него в этой карте, тем сильнее последующее изменение этого элемента.
сработало) Теперь данные настолько контрастны, что по ним хоть ноты строить можно если захочется) (там был спектр звука)
если кому пригодится сделал так:
код spdata.Sort(); - сортировка массива
y = GetValue(y, GetIndex(ref spdata, y)); - получение нового значения, более "контрастного"
Увеличение динамического диапазона. Ищем min/max в массиве Приводим все числа из диапазона [min...max] в диапазон [0..max] (или, если нужен максимальный размах в [0..0xFF]), ну нормализуем то есть.
не совсем так, увеличение диапазона можно сделать но относительно друг друга числа будут различаться в той же пропорции, а нужно чтобы маленькие стали еще меньше, при том что max остался равным max, тригонометрию можно и не использовать, тогда уменьшать нужно равномерно, но это не так красиво получится, задачу решил по совету Алексей Рахе, посчитал индексы для каждого числа и изменял значение в соответствии с коэфициентом, который зависит от индекса, методом тыка отлично подошла функция tanh https://msdn.microsoft.com/en-us/library/system.ma... значения получились на порядок более контрастными