Advertisement
Botlarakla

Azadov Nadirbek 13praktika

Nov 22nd, 2024 (edited)
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.30 KB | Source Code | 0 0
  1. import cv2
  2. import numpy as np
  3. import time
  4.  
  5. # Укажите полный путь к файлам изображений
  6. path = '/Users/Texnik/Downloads/Новая папка 2/'
  7. image1_path = path + 'tom ford.jpg'  # Замените на имя первого изображения
  8. image2_path = path + 'tom ford.jpg'  # Замените на имя второго изображения
  9.  
  10. # Загрузка изображений
  11. image1 = cv2.imread(image1_path, cv2.IMREAD_GRAYSCALE)
  12. image2 = cv2.imread(image2_path, cv2.IMREAD_GRAYSCALE)
  13.  
  14. # Проверка, загрузились ли изображения
  15. if image1 is None or image2 is None:
  16.     print("Ошибка загрузки изображений. Проверьте путь.")
  17.     exit()
  18.  
  19. # Применение гауссового размытия к изображению 2
  20. image2_blurred = cv2.GaussianBlur(image2, (5, 5), 0)  # Размер ядра (5, 5)
  21.  
  22. # Инициализация детектора ORB
  23. orb = cv2.ORB_create()
  24.  
  25. # Детектирование ключевых точек и вычисление дескрипторов для исходного изображения
  26. keypoints1, descriptors1 = orb.detectAndCompute(image1, None)
  27. # Детектирование ключевых точек и вычисление дескрипторов для размытых изображений
  28. keypoints2, descriptors2 = orb.detectAndCompute(image2_blurred, None)
  29.  
  30. # Проверка, были ли найдены дескрипторы
  31. if descriptors1 is None or descriptors2 is None or len(descriptors1) == 0 or len(descriptors2) == 0:
  32.     print("Ошибка: не найдены дескрипторы в одном из изображений.")
  33.     exit()
  34.  
  35. # 1. Brute-Force Matcher
  36. start_time_bf = time.time()  # Засекаем время начала для Brute-Force
  37.  
  38. bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
  39. matches_bf = bf.match(descriptors1, descriptors2)
  40.  
  41. # Сортировка совпадений по расстоянию
  42. matches_bf = sorted(matches_bf, key=lambda x: x.distance)
  43.  
  44. # Отображение совпадений методом Brute-Force
  45. image_matches_bf = cv2.drawMatches(image1, keypoints1, image2_blurred, keypoints2, matches_bf[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
  46.  
  47. # Засекаем время окончания для Brute-Force и вычисляем разницу
  48. end_time_bf = time.time()
  49. time_bf = end_time_bf - start_time_bf
  50. print(f"Время выполнения метода Brute-Force: {time_bf:.4f} секунд")
  51.  
  52. # 2. FLANN Matcher
  53. start_time_flann = time.time()  # Засекаем время начала для FLANN
  54.  
  55. # Параметры FLANN
  56. index_params = dict(algorithm=6,  # FLANN_INDEX_LSH
  57.                     table_number=6,  # 12
  58.                     key_size=12,  # 20
  59.                     multi_probe_level=1)  # 2
  60. search_params = dict(checks=50)  # Увеличьте для большей точности
  61.  
  62. # Создание FLANN матчера
  63. flann = cv2.FlannBasedMatcher(index_params, search_params)
  64. matches_flann = flann.knnMatch(descriptors1, descriptors2, k=2)
  65.  
  66. # Применение теста Лоу
  67. good_matches_flann = []
  68. for m, n in matches_flann:
  69.     if m.distance < 0.7 * n.distance:
  70.         good_matches_flann.append(m)
  71.  
  72. # Отображение совпадений методом FLANN
  73. image_matches_flann = cv2.drawMatches(image1, keypoints1, image2_blurred, keypoints2, good_matches_flann[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
  74.  
  75. # Засекаем время окончания для FLANN и вычисляем разницу
  76. end_time_flann = time.time()
  77. time_flann = end_time_flann - start_time_flann
  78. print(f"Время выполнения метода FLANN: {time_flann:.4f} секунд")
  79.  
  80. # Вывод количества совпадений для каждого метода
  81. print(f"Количество совпадений (Brute-Force): {len(matches_bf)}")
  82. print(f"Количество хороших совпадений (FLANN): {len(good_matches_flann)}")
  83.  
  84. # Отображение результатов
  85. cv2.imshow('Brute-Force Matches', image_matches_bf)
  86. cv2.imshow('FLANN Matches', image_matches_flann)
  87.  
  88. cv2.waitKey(0)
  89. cv2.destroyAllWindows()
  90.  
Tags: 13 praktika
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement