Я получил два изображения, показывающих точно такое же содержание: пятна 2D-гауссовой формы. Я называю эти два 16-битных png-файла «left.png» и «right.png». Но поскольку они получены с помощью немного другой оптической установки, соответствующие пятна (физически одинаковые) появляются в немного разных положениях. Это означает, что правая часть слегка растянута, искажена или что-то в этом роде нелинейным образом. Поэтому я хотел бы получить преобразование слева направо.
Итак, для каждого пикселя на левой стороне с его координатами x и y мне нужна функция, дающая мне компоненты вектора смещения, который указывает на соответствующий пиксель с правой стороны.
В предыдущем подходе я пытался получить положения соответствующих пятен, чтобы получить относительные расстояния deltaX и deltaY. Эти расстояния затем я приспособил к расширению Тейлора до второго порядка T (x, y), дав мне x- и y-компоненты вектора смещения для каждого пикселя (x, y) слева, указывая на соответствующий пиксель. (x ', y') справа.
Чтобы получить более общий результат, я хотел бы использовать нормализованную взаимную корреляцию. Для этого я умножаю каждое значение пикселя слева на соответствующее значение пикселя справа и суммирую эти произведения. Преобразование, которое я ищу, должно соединять пиксели, которые увеличивают сумму.Итак, когда сумма максимизирована, я знаю, что умножил соответствующие пиксели.
Я очень много пробовал с этим, но не вышло. Мой вопрос в том, есть ли у кого-нибудь из вас идея или когда-либо делал что-то подобное.
import numpy as np
import Image
left = np.array(Image.open('left.png'))
right = np.array(Image.open('right.png'))
# for normalization (http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross-correlation)
left = (left - left.mean()) / left.std()
right = (right - right.mean()) / right.std()
Пожалуйста, дайте мне знать, могу ли я прояснить этот вопрос. Мне все еще нужно проверить, как задавать вопросы, используя латекс.
Большое спасибо за ваш вклад.
[left.png] http://i.stack.imgur.com/oSTER.png [right.png] http://i.stack.imgur.com/Njahj.png
Боюсь, в большинстве случаев 16-битные изображения выглядят просто черными (по крайней мере, в системах, которые я использую): (но, конечно, там есть данные.
Я пытаюсь прояснить свой вопрос. Я ищу векторное поле с векторами смещения, которые указывают от каждого пикселя в left.png до соответствующий пиксель в right.png . Моя проблема в том, что я не уверен в имеющихся ограничениях.
где вектор r (компоненты x и y) указывает на пиксель в left.png и вектор r- prime (компоненты x-prime и y-prime) указывает на соответствующий пиксель в right.png. для каждого r существует вектор смещения.
То, что я сделал раньше, заключалось в том, что я вручную нашел компоненты векторного поля d и подогнал их до полинома второй степени:
Итак, я подобрал:
Имеет ли это смысл для вас? Возможно ли получить все дельта-x (x, y) и дельта-y (x, y) с взаимной корреляцией? Взаимная корреляция должна быть максимальной, если соответствующие пиксели связаны друг с другом посредством векторов смещения, верно?
Итак, алгоритм, о котором я думал, выглядит следующим образом:
О деформации: можно сделать сначала сдвиг по осям x и y, чтобы максимизировать взаимную корреляцию, затем на втором этапе растяжения или сжать x- и y-зависимые и на третьем шаге деформировать квадратично x- и y-зависимые и повторить эту процедуру итеративно ?? У меня действительно проблема с целочисленными координатами. Как вы думаете, мне нужно было бы интерполировать картинку, чтобы получить непрерывное распределение ?? Я должен подумать об этом еще раз :( Спасибо всем за участие :)