Перейти к содержимому
Compvision.ru
_AliEn_

параметры ядра в OpenCV

Recommended Posts

Доброго времени суток.

Мне поручено за короткий срок разобраться с задачкой на OpenCV, но при выполнении задачки возникли недопонимания..

Вот, собственно, само задание

Дано изображение А(W x H) и B (W x H), причем известно, что B = A*G, где * -

операция свертки A с ядром G (матрица NxN). Задача, найти ядро G (как

матрицу коэффцициентов NxN).

Процедура тестирования алгоритма должна выглядеть так.

1. Пользователь задает изображение А как аргумент программы, и параметры

ядра (скажем как гауссиана),

2. система автоматически расчитывает изображение B. выводит его на экран (и

А тоже).

3. затем ищется оценка G (используя только А и B) и выводится на экран

Предполагается, что для поиска G используется линейная регрессия, а не

преобразование фурье.

Непонятен (пока) один момент, как в OpenCV задаются параметры ядра? Что такое гауссиан (знаю есть в физике распределение Гаусса)?

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я ознакомился со статьями,спасибо!

Осталось понять,как реализуется линейная регрессия в OpenCV. Я делал в поисковике соответствующий запрос, но ничего не нашел по OpenCV. Направьте меня пожалуйста на путь истинный)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поисковый запрос "linear regression normal equation" - вам в помощь.

Матричные операции в opencv вполне удобоваримые.

А можно подробнее, какие переменные подсовываются регрессии ?

PS: Задача Blind Deconvolution ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Думаю, что для того чтобы разобраться с линейной регрессий надо прочитать

http://en.wikipedia.org/wiki/Linear_regression

Решается всё просто.

eb0de828166d7fd99bd31babdfc97dcc.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

с линейной регрессией разобрался,я думал там что то очень хитрое

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тема приняла неожиданный поворот.. Изложу пожалуй свои мысли, чтобы развеять сомнения.

Пусть у меня есть изображение А, я применяю к нему размытие по Гауссу 3х3, получаю картинку B. Чтобы определить матрицу ядра, мне нужно составить матричное уравнение, B = A*g, где * - уже обычная операция умножения матрицы на вектор, а g - вектор столбец элементов матрицы ядра (в данном случае 9 элементов выписанных в столбец), тогда B - вектор столбец пикселей (тоже 9 штук), А - матрица пикселей исходного изображения (9х9 штук).

1. Можно такую модель применить для того, чтобы решить эту задачу? Например, применив метод наименьших квадратов (линейная модель), как вы и предлагали?

2. Чтобы найти N неизвестных, нужно иметь N линейно независимых уравнений. У меня же их получается больше, чем N. Как выбирать нужные уравнения (пиксели)? Это имеет отношение к моему вопросу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему через DFT не хотите ? Это наиболее естественный метод работы со свертками (через умножение и деление, что может быть проще?).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Smorodov, дело в том, что эту задачу меня попросил решить человек из отдела кадров :)я ранее подобные задачи не решал,поэтому обращаюсь к вам за помощью..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А - матрица составленная из пикселей исходного изображения

1. Можно такую модель применить для того, чтобы решить эту задачу? Например, применив метод наименьших квадратов (линейная модель), как вы и предлагали?

2. Чтобы найти N неизвестных, нужно иметь N линейно независимых уравнений. У меня же их получается больше, чем N. Как выбирать нужные уравнения (пиксели)? Это имеет отношение к моему вопросу?

1) Да. У вас в условии это так и прописано.

2) Не имеет. При линейной зависимости будет множество решений из которых выбирается минимальное, а оно единственное. Формулу я вам привел там матрицы не квадратные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Матрица 9х9 (точки одного изображения (блок 3х3 вокруг каждого из пикселей блока 3х3). Один блок - одна строка) умножается на вектор (ядро) 9х1 и получается вектор 1х9 (точки другого изображения).

Порисуйте на листе в клетку, выпишите уравнения.

У меня получилось, если ничего не выйдет изображу, а то лень столько цифр вбивать :)

Есть только одна загвоздка - если матрица 9х9 сингулярная, то её не получится обратить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×