Форум программистов, компьютерный форум CyberForum.ru

Медианний фильтр на С - C++

Восстановить пароль Регистрация
 
firewave
 Аватар для firewave
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 49
17.05.2009, 18:23     Медианний фильтр на С #1
Помогите создать пример медианного фильтра на С. Принцип такой: дано одномерний масив(например arr[10]={ 3,5,2,4,7,3,9,12,1,7}).Нужно взять "рамку" с трех елементов и пустить через масив. В результате нужно получить такое: с первих трех елементов вибирается середний (в даном случае 3) и записивается в новий массив, потом етой "рамкой" берем второй, третий и четвертий ел. массива (5,2,4)--вибираем середнее значения(4) и вписиваем вторим елементом нового массива. Помогите пожалуйста, нужно на завтра!!!!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jabberwock
 Аватар для Jabberwock
3 / 3 / 1
Регистрация: 05.01.2009
Сообщений: 23
17.05.2009, 18:32     Медианний фильтр на С #2
Т. е. нужно переписать числа в новый массив, "откусив" первый и последний элемент? А в чём проблема ? Или по условию задачи нужно именно что заморачиваться с рамкой?
firewave
 Аватар для firewave
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 49
17.05.2009, 18:43  [ТС]     Медианний фильтр на С #3
да именно с рамкой, как ее создать, через массив указателей или как?

Добавлено через 5 минут 29 секунд
Цитата Сообщение от Jabberwock Посмотреть сообщение
Т. е. нужно переписать числа в новый массив, "откусив" первый и последний элемент?
ето будет типа так: 3, 4, 4, 4, 7, 9 и т.д
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
17.05.2009, 19:04     Медианний фильтр на С #4
Если так?
C++
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
#include "stdafx.h"
#include <iostream>
#include <ctime> //time()
#include <cmath> //ceil()
using namespace std;
//--------------описание ф-ций-------------------------------
void out(int *a,int n);//вывод массива
void vin(int *a,int n);//ввод в массив чисел с помощью псевдогенератора случайных чисел
void med(int *a,int *b,int n);//медиальный поиск
//----------------------------------------------------------
int main(int argc, char* argv[])
{
    setlocale(0,"");//консоль понимает русский
    int n,    //количество элементов
        *a,*b;//массивы a - првичный, b - искомый
    cout << "Введите количество элементов  в массиве: ";
    wcin >> n;
    _flushall();
    //---------динамические массивы -----------------------
    a = new int[n];
    b = new int[n-2];
    //---------основной массив------------------------------
    vin(a,n);
    out(a,n);
    //--------производим поиск------------------------------
    for(int i = 0;i < n-2;i++)
        med(a,b,i);
    //-------результат поиска------------------------------
    out(b,n-2);
    getchar();
    return 0;
}
//---------------ввод---------------------------------------
void vin(int *a,int n){
    srand(time(0));
    for(int i = 0;i < n;i++)
        a[i] = rand()%401-200;
}
//----------------вывод--------------------------------------
void out(int *a,int n){
    cout << "Массив:" << endl;
    for(int i = 0;i < n;i++)
        cout << a[i] << "  ";
    cout << endl;
}
//-----------------поиск----------------------------------------
void med(int *a,int *b,int n){
    float x;
    x = (a[n]+a[n+1]+a[n+2])/3;//находим среднее арифметическое
    b[n] = ceil(x);//округляем и заносим в искомый массив
}
firewave
 Аватар для firewave
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 49
17.05.2009, 19:13  [ТС]     Медианний фильтр на С #5
а что ето за первая инклуда? нам не нужно среднее арифметичное, а только новий массив типа в предидущим сообщении
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
17.05.2009, 20:10     Медианний фильтр на С #6
Сорри не дочитался.Измени тело ф-ции med на
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//-----------------поиск----------------------------------------
void med(int *a,int *b,int n){
    int x;
    if((a[n] > a[n+1]) && (a[n] > a[n+2]))
        if(a[n+2] < a[n+1])
            x = a[n+1];
        else x = a[n+2];
    if((a[n+1] > a[n]) && (a[n+1] > a[n+2]))
        if(a[n+2] < a[n])
            x = a[n];
        else x = a[n+2];
    if((a[n+2] > a[n]) && (a[n+2] > a[n+1]))
        if(a[n] < a[n+1])
            x = a[n+1];
        else x = a[n];
    b[n] = x;
}
stdafx.h - в нем хранятся все "основные" include-ы проекта, но, как правило, не входящие в сам проект, т.е. файлы типа windows.h, stdio.h, afxwin.h включаются.
firewave
 Аватар для firewave
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 49
17.05.2009, 20:45  [ТС]     Медианний фильтр на С #7
а не можна задать ф-цию med так, чтоб в ней сортувались три елемента "бульбашками" и в новий массив вставлялся второй елемент?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
17.05.2009, 20:51     Медианний фильтр на С #8
Цитата Сообщение от firewave Посмотреть сообщение
а что ето за первая инклуда?
То студия свою подставу вечно хочет впихнуть.
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
17.05.2009, 21:18     Медианний фильтр на С #9
Цитата Сообщение от firewave Посмотреть сообщение
"бульбашками"
Вроде сортируют по убыванию или возрастанию.
firewave, а чем тебе не понравилась моя криворукая реализация нахождения среднее элемента???;
firewave
 Аватар для firewave
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 49
17.05.2009, 21:57  [ТС]     Медианний фильтр на С #10
думал как иначе придумать, а то мне кажется слишком запутано...Я хотел спросить, можно ли зделать, чтоб сравнивать 1 с 2 и если 1- больше, то менять местами, потом сравнивать 2 и 3, и если 2 больше-ставить его третьем елементом. И в конце брать ел.2 как среднее знач.))
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
17.05.2009, 23:40     Медианний фильтр на С #11
Ну можешь поэкспериментировать - про результат опишешь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2009, 23:58     Медианний фильтр на С
Еще ссылки по теме:

Фильтр Калмана C++
C++ Фильтр ввода на конкретные символы
C++ Медианный фильтр изображения С++
Звуковой фильтр с++ C++
Задача: массив, фильтр, выбор среднего числа C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
firewave
 Аватар для firewave
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 49
17.05.2009, 23:58  [ТС]     Медианний фильтр на С #12
Кароче говоря... спасибо insolent за помощь..., но дело в том, что мне надо сделать ее интуитивно понятной и елементарно простой(так на уровне первого курса института) и чтоб компилировалася на Turbo C или Borland C++ 3.1. Я ето задания понимаю так: создаю массив(arr[10]={ 3,5,2,4,7,3,9,12,1,7}. Потом создаю ф-цию med(), в которой обявляю указатели на первие три елемента массива arr[], тобто создаю "рамку", организовую сортировку и беру средний(второй) елемент, забрасиваю ето в цикл и печатаю в новом массиве средние значения...
..............я так себе решил, ясли я в чем не прав, то исправте и если кто может реализовать ету прогу на "старом" Turbo C, буду очень вдячний.
Yandex
Объявления
17.05.2009, 23:58     Медианний фильтр на С
Ответ Создать тему
Опции темы

Текущее время: 21:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru