Нахождение и исправление непропорционально масштабированных изображений с использованием метода наименьших квадратов - PullRequest
0 голосов
/ 25 февраля 2020

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

Используя OpenCV, я написал небольшой скрипт, чтобы найти точки интереса на чертежах. Евклидово расстояние между этими точками соответствует измерениям, которые были выполнены на исходном объекте, т.е. используя точки a и b, я могу найти дельту измерения:

(1) delta = math.sqrt((ax - (alpha * bx)) ** 2 + (ay - (beta * by)) ** 2)

, где альфа и бета - соответственно коэффициенты для x а оси у и неизвестны. Поскольку измерения не совсем точны, мой подход заключается в том, чтобы найти наилучшие альфа и бета с использованием метода наименьших квадратов. Из (1) я получаю следующее уравнение:

(2) -2 * ax * bx * alpha - 2 * ay * by * beta + epsilon = delta ** 2 - (ax ** 2 + bx ** 2 + ay ** 2 + by ** 2)

Вот мой код:

def least_square(self):
    rows = []
    y = []
    for key, value in self.known_dimensions.items():
        a = self.points[value["pts"][0]]
        b = self.points[value["pts"][1]]
        delta_cm = value["cm"]
        y.append(delta_cm ** 2 - (a[0] ** 2 + a[1] ** 2 + b[0] ** 2 + b[1] ** 2))
        rows.append([-2 * a[0] * b[0], -2 * a[1] * b[1], 1])
    y = np.array(y)
    m = np.array(rows)
    result = np.linalg.lstsq(m, y, rcond=None)

У меня есть два вопроса:

  1. Этот подход Имеет ли смысл?
  2. Как вы, возможно, заметили, мои измерения в сантиметрах, но расстояние между точками в пикселях. Как я могу включить отношение см к пикселю в этом уравнении? Поскольку пропорции не соблюдаются, я думаю, что у меня другое соотношение для осей x и y. Альфа и бета уже включают это соотношение?

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...