प्रौद्योगिकी साझेदारी

Opencv fisheye इमेज सुधार (गतिशील पैरामीटर समायोजनम्)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1: शतरंजफलकस्य मापनमापदण्डानां (आन्तरिकमापदण्डानां) वर्णनम्

शतरंजफलकस्य मापनार्थं बहवः पद्धतयः, कोडाः च सन्ति, अन्ये लिङ्कानि पश्यन्तुfisheye/01.checkerboard/main.py at master · HLearning/fisheye (github.com) इति वृत्तान्तः । इति वृत्तान्तः ।

1: आन्तरिक पैरामीटर् आकृतिः

2: विकृति गुणांक

मत्स्यनेत्रकॅमेरा कृते अत्र ४ मापदण्डाः सन्ति, ये तस्य मापनसङ्केते अपि ज्ञातुं शक्यन्ते ।

  1.       data.camera_mat = np.eye(3, 3)
  2.        data.dist_coeff = np.zeros((4, 1))

द्वौ: उत्पन्नमापदण्डानां D तथा K इत्यस्य आधारेण समायोजनं कुर्वन्तु

केवलं कोडं प्रत्यक्षतया अपलोड् कुर्वन्तु।

  1. import os
  2. import numpy as np
  3. import cv2
  4. #下面的值是来自棋盘格校准后的内参矩阵K
  5. initial_camera_matrix = np.array([[389.3455401867884, 0.0, 630.3678577531273],
  6. [0.0, 388.5686773894828, 361.167452606629],
  7. [0.0, 0.0, 1.0]])
  8. camera_mat = np.array([[302.116935,0.0,521.926531],
  9. [ 0.0, 358.512097, 363.652721],
  10. [ 0.0, 0.0, 1.0 ]])
  11. #下面的值是来自棋盘格校准后的D
  12. dist_coeff = np.array([[0.05648235312901486],[-0.024826520405491565],[-0.002416551582982325],[0.0010672440368159684]])
  13. def adjust_parameters(x):
  14. # 获取当前滑动条的值
  15. fx = cv2.getTrackbarPos('fx', 'Parameters')/ 100.0
  16. fy = cv2.getTrackbarPos('fy', 'Parameters')/ 100.0
  17. cx = cv2.getTrackbarPos('cx', 'Parameters')/ 100.0
  18. cy = cv2.getTrackbarPos('cy', 'Parameters')/ 100.0
  19. k1 = cv2.getTrackbarPos('k1', 'Parameters') / 2000000 # 调整范围以便于滑动条控制
  20. k2 = cv2.getTrackbarPos('k2', 'Parameters') / 2000000
  21. p1 = cv2.getTrackbarPos('p1', 'Parameters') / 2000000
  22. p2 = cv2.getTrackbarPos('p2', 'Parameters') / 2000000
  23. # 更新相机矩阵和畸变系数
  24. new_camera_matrix = np.array([[fx, 0.0, cx],
  25. [0.0, fy, cy],
  26. [0.0, 0.0, 1.0]])
  27. new_distortion_coeff = np.array([[k1], [-k2], [-p1], [p2]])
  28. map1, map2 = cv2.fisheye.initUndistortRectifyMap(
  29. initial_camera_matrix, new_distortion_coeff, np.eye(3, 3), new_camera_matrix,
  30. (args.width * args.sizescale, args.height * args.sizescale), cv2.CV_16SC2)
  31. img = np.load("./calibrate_img/img_cam5.npy")
  32. print(new_camera_matrix)
  33. print(new_distortion_coeff)
  34. undistort_img = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)
  35. undistort_img=cv2.resize(undistort_img,(img.shape[1],img.shape[0]))
  36. cv2.imshow("undistort_img",undistort_img)
  37. cv2.imshow("src_img",img)
  38. def main():
  39. cv2.namedWindow('Parameters')
  40. # 添加相机矩阵的滑动条
  41. cv2.createTrackbar('fx', 'Parameters', int(camera_mat[0, 0]* 10000), 90*100000, adjust_parameters)
  42. cv2.createTrackbar('fy', 'Parameters', int(camera_mat[1, 1]* 10000), 90*100000, adjust_parameters)
  43. cv2.createTrackbar('cx', 'Parameters', int(camera_mat[0, 2]* 10000), 90*1000000, adjust_parameters)
  44. cv2.createTrackbar('cy', 'Parameters', int(camera_mat[1, 2]* 10000), 90*100000, adjust_parameters)
  45. # 添加畸变系数的滑动条
  46. cv2.createTrackbar('k1', 'Parameters', int(dist_coeff[0, 0] * 100000), 4000000, adjust_parameters)
  47. cv2.createTrackbar('k2', 'Parameters', int(dist_coeff[1, 0] * 100000), 4000000, adjust_parameters)
  48. cv2.createTrackbar('p1', 'Parameters', int(dist_coeff[2, 0] * 100000), 4000000, adjust_parameters)
  49. cv2.createTrackbar('p2', 'Parameters', int(dist_coeff[3, 0] * 100000), 4000000, adjust_parameters)
  50. while True:
  51. key = cv2.waitKey(1) & 0xFF
  52. if key == ord('q'):
  53. break
  54. cv2.destroyAllWindows()
  55. if __name__ == '__main__':
  56. main()