БПФ изображение для измерения сходства - PullRequest
1 голос
/ 04 апреля 2011

Хорошо, я пишу небольшое Java-приложение, которое принимает два изображения в качестве входных данных, сравнивает их, а затем выдает количественный результат в качестве меры сходства (например, 50% -ное сходство).

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

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

Может кто-нибудь помочь мне с этим? Мне бы очень хотелось увидеть некоторые примеры кодов, если не хотя бы точку в правильном направлении. Большое спасибо заранее.

Ответы [ 4 ]

2 голосов
/ 04 апреля 2011

Сходство не является точным термином.Например: если у вас есть круг и эллипс, они похожи?Они оба являются круглыми объектами, так что в этом смысле они есть - но если мы хотим отфильтровать круги, то это не так.Вам нужно будет определить меру (или меры - например, округлость, распределение интенсивности, размер, ориентацию, количество объектов, число Эйлера и т. Д.), А затем рассчитать ее для каждого изображения.Сходство двух изображений будет (своего рода) расстоянием между двумя рассчитанными значениями.Это может быть евклидово расстояние (для двух действительных мер) или какая-то функция ошибки (среднеквадратическое значение для распределений интенсивности).

Вам нужно будет выбрать, какие преобразования должны оставаться неизменными (если повернутое изображение похожек оригиналу? Если да, простое преобразование Фурье не подходит).

Измерение подобия изображения затруднительно, если бы вам пришлось это сделать, я бы прочитал о сшивании изображения .Если вам просто нужно различить BLOB-ы, сначала попробуйте рассчитать несколько простых мер (я рекомендую рассчитать моменты - площадь, ориентация; читайте K-означает кластеризацию ) или 1D-преобразование Фурье расстояния контура.от центра масс (что немного сложнее).

1 голос
/ 04 апреля 2011

Прежде чем пытаться закодировать 2DFT, вы должны полностью понять математику, стоящую за ним.flolo правильно, что вы можете вычислить его, сначала выполнив 1D FFT для строк и столбцов, а затем объединив результаты, но у меня нет оснований полагать, что норма L_inf - лучший способ преобразовать их в метрику, поскольку она полностью пропускаетобычный шаг объединения для создания полного 2DFT.Взгляните на http://fourier.eng.hmc.edu/e101/lectures/Image_Processing/node6.html в самом низу страницы.

Тем не менее, могут быть более эффективные способы сравнения изображений, которые не требуют сравнения 2D-массивов информации.Например, PCA (Анализ основных компонентов, который является просто вопросом запуска SVD {Singular Value Decomposition} на ваших изображениях после их центрирования по центру, хотя я бы сначала взглянул на статью в Википедии об этом) даст вам1D вектор, к которому вы могли бы затем применить некоторую норму L_p для непосредственного сравнения, хотя в этом случае я бы использовал что-то вроде sum (min (a_i / b_i, b_i / a_i)) / length (a), где a и b - это1D векторы, которые вы получили от преобразования.

0 голосов
/ 26 июня 2011

Если вы просто хотите проверить, вероятно ли, что одно изображение является быстрым редактированием другого для чего-то вроде DRM стоковой фотографии, то проверьте процент нормализованной цветовой палитры в пределах вероятных областей.Если они совпадают в пределах THRESHOLD для NUMBER_OF_TEST_COLORS в любом из множества TEST_REGIONS на изображении, то у вас есть «подозреваемый» ... вам все равно нужен человек для проверки подозреваемых.Но это быстрый и грязный способ найти много изменяющих размеры изображений, горизонтальные / вертикальные флипперы и фоновые чейнджеры, форматы файлов и другие тонкие вариации ... конечно же, "нормализуя цвета" в квантованной палитре.это искусство само по себе.Я бы порекомендовал квантовать изображения в ближайшие «безопасные для сети» цвета для практичности.

Я - мусорщик с синим воротничком по сравнению с математиком, но мусорщики довольно практичны!У меня был хороший успех с таким подходом к группировке похожих изображений и поиску по цветным приложениям.

0 голосов
/ 04 апреля 2011

Есть много хороших сайтов с кодом для FFT на одномерном массиве значений. Вы просто применяете эту FFT строку за строкой на вашем изображении. А потом вы делаете FFT по столбцам на результаты.

Теперь вам нужна метрика, чтобы получить полученное преобразованное изображение, я предлагаю попробовать max-norm (L_inf). То есть max_ {x, y} {fft2d (imag1) [x, y] - fft2d (imag2) [x, y]}.

...