IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Метод медианной фильтрации (https://www.imho.ws/showthread.php?t=103593)

SteFF 12.05.2006 10:22

Метод медианной фильтрации
 
Пожалуйста помогите сделать вот такое задание:
Разработать программу сглаживания экспериментальных данных по методу медианной фильтрации, суть которого заключается в том, что значение каждого элемента массива Yi заменяется на среднее по величине значение из ряда Yi-1, Yi и Yi+1. Использовать функции ввода данных, сглаживания, вывода результатов.
Это надо сделать в Visual C++ 6.0, в которой я ничего не понимаю.. надеюсь - пока.
Помогите пожалуйста кто может!! Буду очень благодарен!
:молись:

_Lynx_ 12.05.2006 12:26

Вообще-то суть немного другая:
http://www.chip-news.ru/archive/chipnews/199908/29.html

Тогда:
Цитата:

vector<float> input_arr, output_arr;
//Заполняем входной массив
for (...) {
input_arr.push_back(f);
}
int len=input_arr.size();
for(i=0;i<len+2;++i){
int a1=0, a2=0, a3=0, g;
if(i>1)a1=input_arr[i-2];
if(i>0&&i<len+1)a2=input_arr[i-1];
if(i<len)a3=input_arr[i];
g=(a1>a2)?((a3>a1)?a1:(a3>a2)?a3:a2):((a3>a2)?a2:(a3>a1)?a3:a1);
output_arr.push_back(g);
}
...

SteFF 12.05.2006 19:17

А можно с каментариями плз.
:молись:
Что такое: f,g,push_back, и еще если можно строку g=(a1>a2)... объясни.
:idontnow:

Rundll 14.05.2006 17:10

С позволения _LYNX_, я допишу комментарий к его программе :)
Надеюсь я не нарушу его авторских прав :)


vector<float> input_arr, output_arr;
/*входной и выходной вектор (массив), способный изменять количество элементов, во время выполнения программы, см. подробнее STL */

//Заполняем входной массив
for (...) {
input_arr.push_back(f);
/*функция push_back, является функцией-членом класса vector, и добавляет в конец вектора новый элемент f.*/
}
int len=input_arr.size();
/*size - также является функцией-членом класса vector и определяет размер вектора*/
for(int i=0;i<len+2;++i){
int a1=0, a2=0, a3=0, g;
if(i>1)a1=input_arr[i-2];
if(i>0&&i<len+1)a2=input_arr[i-1];
if(i<len)a3=input_arr[i];
/*Надеюсь выше всё понятно :)*/
g=(a1>a2)?((a3>a1)?a1a3>a2)?a3:a2)(a3>a2)?a2a3>a1)?a3:a1);
/*А в этой строке переменной g присваивается значение, вычисляемое на базе логических сравнений. оператор '?' трактуется следующим образом:
"если выражение (a1>a2) истино, тогда переменной g присвоить значение находящееся до символа ':', если выражение ложно - после символа ':' "

Короче говоря:
результат = выражение ? выражение1 : выражение2

если результат == true, тогда результат=выражение1
иначе - результат=выражение2

ИМХО очень удобная конструкция!*/
output_arr.push_back(g);//Здесь я думаю всё ясно
}
...

//Дерзай :cool:

SteFF 15.05.2006 00:01

Цитата:

Rundll:
если результат == true, тогда результат=выражение1
иначе - результат=выражение2
Только тут кажется вместо результат должно быть выражение.

Пасибо. ЩАс вот поставил VC++.. мож че и выйдет :))
Буду стараться ;)
:yees:

Rundll 15.05.2006 17:56

Да, очепатался :)

SteFF 16.05.2006 22:51

Вопрос:
Как мне построчно читать из Edit'а (в Visual C++) числа (в каждой строке одно число) и записывать их в массив, колво элементво которого = количеству строк в Edit'е. :confused:

2Visual C++, у меня слов нет: какой ты странный... :idontnow: брррр

_Lynx_ 17.05.2006 12:05

textBox.Text

SteFF 17.05.2006 19:01

Ничего не получается.. в списке нету Text.
Я объявляю какунить переменную типа:
char a[20];
a=m_Edit1. {тут ничего подобного на TExt не возникает}
:confused:

SteFF 17.05.2006 22:24

Вложений: 1
Ничерта не получается..
Завтра собирался сдавать.. в пятницу уже уезжаю.. в воскресенье уже вылет... так что - пипец..
:молись:
ПОмогите пожалуста!! Очень прошу!!!
Я создал форму.
Осталось только чтоб при нажатии на кнопку1 заполнялся ListBox1 случайными числами и соответственно - массив.
При нажатии на вторую кнопку этот массив сортировался.. и выводился в ListBox2.
Очень прошу. Помогите!!
:молись: :молись: :молись:

Я MFC использую... это чтото меняет?
:idontnow:

_Lynx_ 18.05.2006 13:13

Что-то вроде
Код:

vector<int> input_arr, output_arr;
======
void CMy3_1Dlg::OnAddBut()
{
        char buf[20];
        input_arr.clear();
        m_WasList.DeleteAllItems();
//Заполняем массив
        for(int i=0;i<10;i++){
                input_arr.push_back(i);
                itoa(i,buf,10);
                m_WasList.InsertItem(i,buf);
        }
}

void CMy3_1Dlg::OnSortBut()
{

      /* Как-то сортируем */

        output_arr.clear();
        m_NowList.DeleteAllItems();
        char buf[20];
        int len=output_arr.size();
        for(int i=0;i<len;i++){
                itoa(output_arr[i],buf,10);
                m_NowList.InsertItem(i,buf);
        }
}



Часовой пояс GMT +4, время: 09:57.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.