Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разреженная линейная система с выбросами, sparse linear system 
:(
    Опции темы
mrgloom
Дата 31.5.2013, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



по мотивам http://forum.vingrad.ru/forum/topic-361629/view-all.html
Итак на входе имеем N картинок, можем посчитать попарные соответствия и получить относительный сдвиг(dx,dy).

1.Вариант с решением линейной системы 
тут предлагают решить систему линейных уравнений
http://users.soe.ucsc.edu/~davis/panorama/...es/slide011.jpg
http://scien.stanford.edu/pages/labsite/20...t13/global.html  тут подробней, но непонятно как они получили систему уравнений, где матрицы как элементы, т.е. как её развернуть в нормальный вид http://scien.stanford.edu/pages/labsite/20.../Images/eq3.gif
кол-во переменных= 2*кол-во изображений
кол-во уравнений= 2*кол-во пар изображений
по идее можно составить разреженную переопределенную линейную систему уравнений
Только вот я не понимаю решиться ли она, если там есть выбросы?т.е. проблема в том, что мы туда запихиваем все связи, даже те которых не существует.
Вообщем нужен какой то метод решения, который умеет работать с выбросами.

Пример берем 3 изображения которые у нас соединены как полоска.
1-2 dx=100 dy=0
1-3 нет связи
2-3 dx=100 dy=0

код на opencv
Код

double m_a[6][6] = 
    {   {1,0,-1,0,0,0},
        {0,1,0,-1,0,0},
        {1,0,0,0,-1,0},
        {0,1,0,0,0,-1},
        {0,0,1,0,-1,0},
        {0,0,0,1,0,-1} };
    Mat A= Mat(6, 6, CV_64F, m_a);
int dx12= 100;
    int dy12= 0;
    int dx13= 0; //связь которой на самом деле нет,т.е. выброс
    int dy13= 0;
    int dx23= 100;
    int dy23= 0;
    double m_b[6][1]={{dx12},{dy12},{dx13},{dy13},{dx23},{dy23}};
    Mat b= Mat(6, 1, CV_64F, m_b);
    Mat x;
    solve(A,b,x,DECOMP_SVD);
    cout<<x<<endl;



2.Вариант с минимизацией целевой функции.
Есть еще вариант поставить задачу как предлагают тут (но тут для 1 картинки похоже).
http://cns.bu.edu/~brumberg/CS580/mosaic/MAIN/mosaic.html
кол-во переменных= 2*кол-во изображений
Только непонятно будет ли это работать, ибо целевая функция будет как я понимаю не непрерывная функция, т.к. внутри функции будет искаться кол-во пересечений изображений и суммироваться разность пикселей на границе и непонятно как выбирать начальное приближение и сойдется ли вообще.

Это сообщение отредактировал(а) mrgloom - 31.5.2013, 15:31
PM MAIL   Вверх
mrgloom
Дата 3.6.2013, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



решил попробовать на простом примере, 4 картинки и только реально существующие связи, но что то не работает.
Связи 1-2,1-3,2-4,3-4.
10 уравнений, 8 неизвестных:
x1=0
y1=0
x2= 522+x1
y2= 4+y1
x3= 0+x1
y3= 480+y1
x4= 0+x2
y4= 486+y2
x4= 530+x3
y4= 4+y3

Код

double m_a[10][8] = 
    {   {1,0,0,0,0,0,0,0},//
        {0,1,0,0,0,0,0,0},//
        {-1,0,1,0,0,0,0,0},// 1-2
        {0,-1,0,1,0,0,0,0},
        {-1,0,0,0,1,0,0,0},// 1-3
        {0,-1,0,0,0,1,0,0},
        {0,0,-1,0,0,0,1,0},// 2-4
        {0,0,0,-1,0,0,0,1},
        {0,0,0,0,-1,0,1,0},// 3-4
        {0,0,0,0,0,-1,0,1}
    };
    Mat A= Mat(10, 8, CV_64F, m_a);
    int dx12= 522;
    int dy12= 4;
    int dx13= 0;
    int dy13= 480;
    int dx24= 0;
    int dy24= 486;
    int dx34= 530;
    int dy34= 4;
    double m_b[10][1]={{0},{0},{dx12},{dy12},{dx13},{dy13},{dx24},{dy24},{dx34},{dy34}};
    Mat b= Mat(10, 1, CV_64F, m_b);
    Mat x;
    solve(A,b,x,DECOMP_SVD);
    cout<<x<<endl;


Добавлено через 3 минуты и 20 секунд
возможно из-за противоречия в цепочках 1-2-4 и 1-3-4
PM MAIL   Вверх
mrgloom
Дата 4.6.2013, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



в итоге я ошибся решение правильное, оно как бы размазывает ошибку по всей панораме.
но всё равно непонятно как быть с ложными связями.


тут вот они предлагают сначала обрубить слабые связи, а потом получают систему уравнений с весами пропорциональными силе связи из матриц и не очень понятно как её интерпретировать(по причине того что состоит из матриц).
user posted image
просто если её построчно разложить, то получиться
u1*I*P1=u1*I => P1=I
u2*I*P2=u2*A21*P1 =>P2=A21*P1 и т.д. т.е. коэффициенты ui сокращаются

т.е. как составить систему уравнений из 
user posted image
понятно, но тут не участвуют эти коэффициенты и соответсвенно ложны связи перетягивают на себя одеяло и портят решение.

Это сообщение отредактировал(а) mrgloom - 4.6.2013, 10:25
PM MAIL   Вверх
mrgloom
Дата 5.6.2013, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



вообщем стало ясно, остался вопрос как быть с выбросами.


Допустим у меня есть переопределённая разреженная система линейных уравнений.
m уравнений и n неизвестных (m>n)
k уравнений из этой системы мусор\выбросы.

можно было бы взять из m все комбинации размера n и потом взять лучший вариант, но это как то не оптимально, возможно есть вариант лучше?

например LMEDS, но я не уверен подходит ли это тут?
PM MAIL   Вверх
Mirkes
Дата 5.6.2013, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Система переопределена, это так. А она совместна? Каков ранг расширенной матрицы? Может не надо ничего выкидывать, оно само решится?
Например, начинаете решать методом Гаусса и отслеживаете момент возникновения противоречий.

Дело в том, что переопределенные системы могут быть двух типов - с единственным решением или без решений. Второе возникает когда есть противоречивые уравнения. Например х+у=5 и х+у=2. В этом случае нормального решения нет. 


--------------------
Mirkes
PM MAIL   Вверх
Pavia
Дата 5.6.2013, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(Mirkes @  5.6.2013,  18:34 Найти цитируемый пост)
А она совместна? Каков ранг расширенной матрицы?

В виду того что исходные данные с ошибками. И то что в процессе вычислений как правила есть ошибки. То ранг матрицы невозможно определить.
PM MAIL   Вверх
Mirkes
Дата 5.6.2013, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Все примеры в теме с целочисленными коеффициентами. Ицпользуйте целочисленный вариант Гаусса и накопления ошибок не будет. Так что в этой ситуации ранг всегда можно посчитать smile


--------------------
Mirkes
PM MAIL   Вверх
mrgloom
Дата 6.6.2013, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Цитата

А она совместна? 

думаю да, если выкинуть уравнения-выбросы.
хотя не очень понимаю корректен ли этот вопрос для переопределенной системы.
Цитата

Каков ранг расширенной матрицы? 

не считал, но я так понимаю что это всё к вопросу о совместности?
Цитата

В силу отсутствия точного решения переопределённых систем, на практике принято вместо него отыскивать вектор, наилучшим образом удовлетворяющий всем уравнениям, то есть минимизирующий норму невязки системы в какой-нибудь степени. Этой проблеме посвящён отдельный раздел математической статистики - регрессионный анализ. Наиболее часто минимизируют квадрат отклонений от оцениваемого решения. Для этого применяют так называемый метод наименьших квадратов.

так вот я попробовал МНК, и взвешенный МНК, но это работает плохо, т.к. есть выбросы, т.е. это работает вполне себе хорошо если у меня все связи между изображениями настоящие (каждая связь это 2 уравнения в системе уравнений).
Еще раз под выбросами я подразумеваю не то что в коэффициентах системы есть погрешности(хотя они тоже есть), а то что как будто к нормальной системе уравнений(которая может быть и переопределенная) добавили дополнительные неправильные уравнения.

если рассмотреть пример
Цитата

x1=0
y1=0
x2= 522+x1
y2= 4+y1
x3= 0+x1
y3= 480+y1
x4= 0+x2
y4= 486+y2
x4= 530+x3
y4= 4+y3

то получиться 
x1=0 y1=0
x2=522 y2=4
x3=0 y3=480
x4= 522 y4=490 или x4= 530 y4=484
это мы получаем 2 возможных решения?(или несовместную систему?), на графе это связи 1-2,1-3,2-4,3-4 ,т.е. пути 1-2-4 и 1-3-4 дают разный ответ.(но в этом примере все связи настоящие и применение тут МНК нам только размазывает ошибку усредняя)   

тут вот вроде как пишут о переопределенных системах которые несовместны
http://www.pereplet.ru/obrazovanie/stsoros/988.html

по идее меня бы удовлетворило бы даже всё множество решений, я бы потом просто выбрал лучшее.
если m уравнений и n неизвестных (m>n)
можно было бы взять из m все комбинации размера n и посчитать все варианты и потом взять лучший вариант, но это какой то брутфорсный вариант в лоб, я думаю есть лучше.


и я наконец то понял, что они делают тут http://scien.stanford.edu/pages/labsite/20...t13/global.html
сначала считаем все попарные связи между изображениями, потом по порогу обрубаем слабые связи, потом методом взвешенных наименьших квадратов считаем решение системы, потом смотрим ошибки для каждой связи и до тех пор пока сумма ошибок не упадёт до определенного порога мы итеративно обрубаем связь с самой большой ошибкой.
но в такой процедуре участвует аж 2 порога.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.