alexPec 3 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Всем доброго дня. Прошу помочь с математикой. Пытаюсь повторить эксперимент: http://www.nazim.ru/2269 - согласованный 2d фильтр. Приведенный код, по-моему бесполезен, усугубляет все отсутствие знаний питона. Поэтому пробовал сделать в Labview. С виду все просто - делаем 2d FFT от картинки, затем 2d FFT от паттерна, который хотим найти на картинке, делаем комплексное сопряжение спектра паттерна, перемножаем комплексно-сопряженный спектр паттерна на спектр картинки, делаем IFFT - и должны получить чудо. В точке совпадения паттерна со своим местом в картинке должны получить максимум. Сходу чуда не получилось. Первый и основной вопрос - разные размерности картинки и паттерна. Пробовал делать так: делать большое окно, размером с картинку, в угол ставлю паттерн, остальное заполняю нулями - не катит, пробовал размножить паттерн по вертикали и горизонтали - тоже совсем не то. Пробовал сделать FFT паттерна, а затем уже спектр "растянуть" до размерности спектра картинки - тоже не то. Ну, думаю, тогда проверю свертку - без преобразований фурье. Т.е. просто в каждой точке картинки "накладываем" паттерн и находим сумму произведений пикселей. В этом случае получаю адекватную картину - есть явный максимум в той точке, где паттерн накладывается на свое место в картинке. А дальше тупик - не пойму что где не так делаю с преобразованиями фурье. Вроде как свертка эвивалентна должна быть описанному в статье алгоритму, но результаты совершенно разные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 4 часа назад, alexPec сказал: Пробовал делать так: делать большое окно, размером с картинку, в угол ставлю паттерн, остальное заполняю нулями - не катит Должно катить, во всяком случае в Matlabe точно катит:) Может быть, не в тот угол паттерн ставили?:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 24 minutes ago, Самурай said: Должно катить, во всяком случае в Matlabe точно катит:) Может быть, не в тот угол паттерн ставили?:) А размерность то как правильно выравнивать? Все-таки паттерн ставить в пустую картинку такого же размера? Там какая-то готовая функция для поиска паттерна таким методом или все прозрачно, как я описывал? Пробовал паттерн и в центр и в угол ставить. Бред конечно, но так, от безнадеги. Конечно же разницы нет... Код можете выложить? Может сверим результаты поэтапно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Код тривиальный, красоту и изящество не наводил: 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))); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 18 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 6 hours ago, alexPec said: Чтоб проверить метод с Фурье, Вы попробуйте без оного в лоб умножением матрицы на вектор и поиском максимума. Когда это будет работать, можно фурье отлаживать. Понятно, что вычислительная сложность метода без Фурье N*N в отличие от 5/2N Log_2 N. Но для того, чтоб проверить можно и подождать чуток. Другое дело, если у Вас паттерн слегка повернут вокруг оси или соскалирован, то этот метод не катит. Тут надо градиентные фильтры на исходное изображение делать и потом аффинную трансформацию по пикам этих градиентов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Just now, iiv said: Чтоб проверить метод с Фурье, Вы попробуйте без оного в лоб умножением матрицы на вектор и поиском максимума. Когда это будет работать, можно фурье отлаживать. Понятно, что вычислительная сложность метода без Фурье N*N в отличие от 5/2N Log_2 N. Но для того, чтоб проверить можно и подождать чуток. Другое дело, если у Вас паттерн слегка повернут вокруг оси или соскалирован, то этот метод не катит. Тут надо градиентные фильтры на исходное изображение делать и потом аффинную трансформацию по пикам этих градиентов. Да без фурье-то работает, я же написал, без фурье (просто "двигаю" паттерн по картинке и вычисляю взаимнокореляционную функцию при каждом сдвиге) получаю один четкий максимум. Паттерн не повернут, он прямо вырезан из картинки. Quote Код тривиальный, красоту и изящество не наводил: Вроде все так и делал... Все, разобрался. Все получилось. Проблема с нормировкой паттерна была. Спасибо всем за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Тогда показывайте Ваш код... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 55 minutes ago, Самурай said: Тогда показывайте Ваш код... Там labview, там не код, там типа схемы, и в модулях выставляются параметры. У меня эта схема вся в экран-то не влазит чтобы скриншот сделать. Если кому надо - могу файл .vi прицепить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться