Компьютерное зрение. Урок 33. Matching pursuit.
Автор megabax   
05.01.2018 г.
New Page 1

Компьютерное зрение. Урок 33. Matching pursuit.

Чтобы смотреть урок полностью, а также скачать исходники к уроку, подпишитесь на платный раздел.

В платном разделе статья находится здесь.


На прошлом уроке я рассказал о  том, что такое разряженное представление и словари и привел одну из методик получения представления по словарю& Matching pursuit. Сегодня мы реализуем этот алгоритм программно. Для начала нам надо написать некий инструментарий для работы с векторами. В C# есть класс для работы с векторами, но только с двумерными. У нас же мерность вектора может быть люба, поэтому придется реализовывать свой класс: ...

...

...

Всего готово. Теперь надо бы протестировать. Как мы это будем делать? Очень, просто, получим представление, а потом, воспользовавшись формулой (32.1) из прошлого урока, получим исходный сигнал. Он у нас должен совпасть с первоначальным. Итак, действуем:

        private void button2_Click(object sender, EventArgs e)

        {

            List<MultidimensionalVector> D = new List<MultidimensionalVector>();

            /*D.Add(create_vector(1, 1));

            D.Add(create_vector(1, 0));

            D.Add(create_vector(0, 1));*/

 

            D.Add(create_vector(1.5, 1));

            D.Add(create_vector(1, 0));

            D.Add(create_vector(0, -1));

            D.Add(create_vector(2, 2));

 

            MultidimensionalVector y = create_vector(-1, 3.5);

            MatchingPursuit mp = new MatchingPursuit(D);

            List<double> res=mp.calk(y, 0.01);

 

            //Проверим результат вычисления путем обратного вычисления сигнала

            MultidimensionalVector test=new MultidimensionalVector(2);

            int i = 0;

            foreach(double item in res)

            {

                test=test+D[i]*item;

                i++;

            }

 

            string s = "Исходный сигнал y="+y.ToString();;

            s = s + "\nПолученный вектор (";

            string sep="";

            foreach (double item in res)

            {

                s = s + sep + Math.Round(item, 4).ToString();

                sep = "; ";

            }

            s = s + ")\nПроверочное вычисление "+test.ToString();

 

            MessageBox.Show(s);

        }

И вуаля, все сходиться:

Компьютерное зрение. Урок 33. Matching pursuit.

Мы получили работающий код Matching pursuit. На следуем уроке попробуем применить его к изображениям.

Последнее обновление ( 05.01.2018 г. )