Рассчитать и использовать обратные параметры искажения OpenCVPython

Программы на Python
Ответить
Anonymous
 Рассчитать и использовать обратные параметры искажения OpenCV

Сообщение Anonymous »

Итак, в основном я хочу выяснить, каковы были бы параметры искажения инвертирования для калибровки, которую я делаю, как показано здесь. Затем используйте Remaping, чтобы сделать то, что я сделал ниже, но моя цель - иметь возможность выяснить фактические параметры инвертированного искажения и использовать их для искажения других изображений, а не просто вернуть то, что cv2.undistort () < /p>

Обзор: < /strong> < /p>
Я попытался пропустить отрицание Параметры искажения: < /p>

Код: Выделить всё

# _, mat, distortion, _, _ = cv2.calibrateCamera(...)
# undistorted_image = cv2.undistort(with distortion)
# redistorted_image = cv2.undistort(with np.negative(distortion))
Теоретически я думал, что если redistorted_image аналогична исходному изображению, то я ищу параметры np.negative (искажение) оказалось ложным. < /p>

фактический метод, который я использую: < /strong> < /p>

Код: Выделить всё

def save_undistorted_images(image, matrix, distortion):
test_image_su = cv.imread(image)
height, width = test_image_su.shape[:2]
new_camera_mtx, roi = cv.getOptimalNewCameraMatrix(matrix, distortion, (width, height), 1, (width, height))

distortion_u = np.negative(distortion)

# unsure if this line helps
new_camera_mtx_inv, roi = cv.getOptimalNewCameraMatrix(matrix, distortion_u, (width, height), 1, (width, height))

# undistort the image
undistorted_image = cv.undistort(test_image_su, matrix, distortion, None, new_camera_mtx)
cv.imwrite('undistorted_frame.png', undistorted_image)

# redistort trying to get something like original image (image_test_su)
distorted_image = cv.undistort(undistorted_image, matrix, distortion_u, None, new_camera_mtx_inv)
cv.imwrite('redistorted_frame.png', distorted_image)

Результаты:
(слева [/b]: Origin ). "src =" https://i.sstatic.net/dtr6b.png "/>
(слева c : искажено с использованием np.negative (искажение) ) (справа d : неискаженное изображение re искажено с помощью np.negative (искажение) )
< /p>
Изображение D Здесь в основном C выполняется на B, что, как я ожидал, было бы похоже на < /p>
Почему b < /strong> здесь подавляет эффект c < /strong>? < /P>

Другой способ расчета Обратно, что я попробовал:

Ниже приведен моя реализация Python в этой статье

Код: Выделить всё

    distortion_u = distortion

k1 = distortion_u[0][0]
k2 = distortion_u[0][1]
k3 = distortion_u[0][4]

b1 = -1 * k1
b2 = 3 * (k1 * k1) - k2
b3 = (8 * k1 * k2) + (-1 * (12 * (k1 * k1 * k1))) - k3

# radial:
distortion_u[0][0] = b1
distortion_u[0][1] = b2
distortion_u[0][4] = b3

# tangential:
#distortion_u[0][2] = -1 * distortion_u[0][2]
#distortion_u[0][3] = -1 * distortion_u[0][3]
Результаты применения искажения к неискаженному изображению с использованием вышеуказанных параметров искажения также не очень хорошие, они очень похожи на результаты, приведенные выше.

Итак, это подводит нас к следующему:
Почему эффект нормального искажения всегда подавляет np.negative(distortion) или что-то еще?
Все ли искажения работают таким образом? (отрицательные значения не соответствуют противоположному эффекту)
Как получить фактически противоположные параметры искажения?

Подробнее здесь: https://stackoverflow.com/questions/670 ... parameters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»