Jump to content
    

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

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

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

http://www.nazim.ru/2269

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

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

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

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

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

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

 

 

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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)));

 

Share this post


Link to post
Share on other sites

6 hours ago, alexPec said:

 

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

 

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

Share this post


Link to post
Share on other sites

Just now, iiv said:

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

 

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

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

Quote

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...