Перейти к содержанию
    

2d согласованная фильтрация

Всем доброго дня.

Прошу помочь с математикой. Пытаюсь повторить эксперимент:

http://www.nazim.ru/2269

- согласованный 2d фильтр. Приведенный код, по-моему бесполезен, усугубляет все отсутствие знаний питона. Поэтому пробовал сделать в Labview.

С виду все просто - делаем 2d FFT от картинки, затем 2d FFT от паттерна, который хотим найти на картинке, делаем комплексное сопряжение спектра паттерна, перемножаем комплексно-сопряженный спектр паттерна на спектр картинки, делаем IFFT - и должны получить чудо. В точке совпадения паттерна со своим местом в картинке должны получить максимум.

Сходу чуда не получилось.

Первый и основной вопрос - разные размерности картинки и паттерна. Пробовал делать так: делать большое окно, размером с картинку, в угол ставлю паттерн, остальное заполняю нулями - не катит, пробовал размножить паттерн по вертикали и горизонтали - тоже совсем не то. Пробовал сделать FFT паттерна, а затем уже спектр "растянуть" до размерности спектра картинки - тоже не то. 

Ну, думаю, тогда проверю свертку - без преобразований фурье. Т.е. просто в каждой точке картинки "накладываем" паттерн и находим сумму произведений пикселей. В этом случае получаю адекватную картину - есть явный максимум в той точке, где паттерн накладывается на свое место в картинке.

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

 

 

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


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

4 часа назад, alexPec сказал:

Пробовал делать так: делать большое окно, размером с картинку, в угол ставлю паттерн, остальное заполняю нулями - не катит

Должно катить, во всяком случае в Matlabe точно катит:) Может быть, не в тот угол паттерн ставили?:)

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


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

24 minutes ago, Самурай said:

Должно катить, во всяком случае в Matlabe точно катит:) Может быть, не в тот угол паттерн ставили?:)

А размерность то как правильно выравнивать? Все-таки паттерн ставить в пустую картинку такого же размера? Там какая-то готовая функция для поиска паттерна таким методом или все прозрачно, как я описывал?

Пробовал паттерн и в центр и в угол ставить. Бред конечно, но так, от безнадеги. Конечно же разницы нет...

Код можете выложить? Может сверим результаты поэтапно?

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


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

Код тривиальный, красоту и изящество не наводил:

Im_scene_fft = fft2(Im_scene);
Im_ref_fft = fft2(Im_ref,310,431);

Im_corr1 = ifft2(Im_scene_fft.*conj(Im_ref_fft));
Im_corr1_norm = (Im_corr1-min(min(Im_corr1)))*255/(max(max(Im_corr1))-min(min(Im_corr1)));

 

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


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

6 hours ago, alexPec said:

 

Чтоб проверить метод с Фурье, Вы попробуйте без оного в лоб умножением матрицы на вектор и поиском максимума. Когда это будет работать, можно фурье отлаживать. Понятно, что вычислительная сложность метода без Фурье N*N в отличие от 5/2N Log_2 N. Но для того, чтоб проверить можно и подождать чуток.

 

Другое дело, если у Вас паттерн слегка повернут вокруг оси или соскалирован, то этот метод не катит. Тут надо градиентные фильтры на исходное изображение делать и потом аффинную трансформацию по пикам этих градиентов.

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


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

Just now, iiv said:

Чтоб проверить метод с Фурье, Вы попробуйте без оного в лоб умножением матрицы на вектор и поиском максимума. Когда это будет работать, можно фурье отлаживать. Понятно, что вычислительная сложность метода без Фурье N*N в отличие от 5/2N Log_2 N. Но для того, чтоб проверить можно и подождать чуток.

 

Другое дело, если у Вас паттерн слегка повернут вокруг оси или соскалирован, то этот метод не катит. Тут надо градиентные фильтры на исходное изображение делать и потом аффинную трансформацию по пикам этих градиентов.

Да без фурье-то работает, я же написал, без фурье  (просто "двигаю" паттерн по картинке и вычисляю взаимнокореляционную функцию при каждом сдвиге) получаю один четкий максимум. Паттерн не повернут, он прямо вырезан из картинки. 

Quote

Код тривиальный, красоту и изящество не наводил:

Вроде все так и делал...

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

Спасибо всем за помощь!

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


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

55 minutes ago, Самурай said:

Тогда показывайте Ваш код...

 

Там labview, там не код, там типа схемы, и в модулях выставляются параметры. У меня эта схема вся в экран-то не влазит чтобы скриншот сделать. Если кому надо - могу файл .vi прицепить. 

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...