ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
171034 Топик полностью
Ксения (02.11.2009 16:30 - 19:00, просмотров: 176) ответил AlexandrY на Ну хоть и нелинейный, но АЧХ с него снять можно и тут открываются интересные вещи.
То, что я давала, это именно вычисление медианы, а сортировка из этого делается так: for( int i=0; i < length - gap; i++) array[i] = median( &array[i], gap); где: array[] - массив данных, подвергаемый медианной фильтрации, length - число элементов в нем, gap - ширина окна фильтра. Здесь используется один и тот же массив с той хитростью, что медиана сперва укладывается не на середину интервала, внутри которого она была найдена, а в первый элемент этого интервала. Это делается для того, чтобы исправленное (отфильтрованное) значение элемента массива не участвовало в расчете медианы соседней с ним точки. Когда же фильтрация полностью завершена, данные в массиве сдвигаются вправо (в сторону старших адресов) ровно на 1/2 gap, благодаря чему они окажутся на своих местах. Например, как-нибудь так: memmove( &array[gap/2], array, gap/2*sizeof(*array)); А "хвостики" в 1/2 gap с каждой стороны заполняю размножением крайних отфильтрованных значений, т.к. точки на хвостах отфильтровать этим способом все равно нельзя.