Как я могу эффективно исказить и неискренние точки изображения?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу эффективно исказить и неискренние точки изображения?

Сообщение Anonymous »

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

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

# Given a set of distorted image points, I can use cv2.undistortpoints
def undistort_points(points, kmat, distcoeff):
undistorted_pts_normed = cv2.undistortPoints(points, kmat, distcoeff).squeeze()
cx = kmat[0,2]
cy = kmat[1,2]
fx = kmat[0,0]
fy = kmat[1,1]
undistorted_uv = np.empty(undistorted_pts_normed.shape)
undistorted_uv[:,0] = fx * undistorted_pts_normed[:,0] + cx
undistorted_uv[:,1] = fy * undistorted_pts_normed[:,1] + cy
ret = [Point(x=int(pt[0]),y=int(pt[1])) for pt in undistorted_uv]

# To distort the points I use the distortion equations
def distort_points(points, kmat, distcoeff):
cx = kmat[0,2]
cy = kmat[1,2]
fx = kmat[0,0]
fy = kmat[1,1]
k1,k2,p1,p2,k3 = distcoeff

# Convert to normalized points
normed_points = np.empty(points.shape)
normed_points[:,0] = (points[:,0] - cx)/fx
normed_points[:,1] = (points[:,1] - cy)/fy

# Apply distortion
r2 = normed_points[:,0]**2 + normed_points[:,1]**2 # r squared
radial_dist = (1 + k1*r2 + k2*(r2**2) + k3*(r2**3))[...,np.newaxis]
tangential_dist = np.empty(normed_points.shape)
tangential_dist[:,0] = p2 * (r2 + 2 * (normed_points[:,0]**2)) + 2 * p1 * normed_points[:,0] * normed_points[:,1]
tangential_dist[:,1] = p1 * (r2 + 2 * (normed_points[:,1]**2)) + 2 * p2 * normed_points[:,0] * normed_points[:,1]
distorted_points = radial_dist * normed_points + tangential_dist

# Return points in uv space
distorted_uv = np.empty(distorted_points.shape)
distorted_uv[:,0] = fx * distorted_points[:,0] + cx
distorted_uv[:,1] = fy * distorted_points[:,1] + cy
return distorted_uv
Я столкнулся с cv2.initundistortrectifymap , который я могу запустить один раз для хранения картирования для каждого пикселя в Undertort, что делает беспрецедентное значение очень эффективным. Тем не менее, я не уверен, как использовать MAPX и MAPY для точек изображения вместо полных изображений. Ниже показано, как я вычисляю отображения MAPX и MAPY. < /P>
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(kmat, distcoeff, (1920, 1080), 0, (1920, 1080))
mapx, mapy = cv2.initUndistortRectifyMap(kmat, distcoeff, None, newcameramtx, (1920, 1080), 5)
< /code>
Я также хотел бы узнать, возможно ли использовать те же сопоставления для преобразования из неискаженных точек в искаженные точки. Любая помощь будет очень оценена!

Подробнее здесь: https://stackoverflow.com/questions/788 ... age-points
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Opencv: исказить обратно
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как я могу исказить определенные значения оси Y на линейном графике в ECharts?
    Anonymous » » в форуме Javascript
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • С OpenGL, как я могу исказить только один угол вида [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как исказить изображение в любой четырехугольник?
    Anonymous » » в форуме Android
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Точки объекта и точки изображения в OpenCV калибровать камеру
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

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