Мне трудно сопоставить характеристики с прикрепленными изображениями.
Обычно я был успешно с другими изображениями с помощью SIFT. Соответствующий код приведен ниже. Вы можете увидеть переданные мной параметры, связанные с прикрепленным совпадающим изображением.
Возможно, я использую неправильный подход... но мне действительно нужно сопоставление с инвариантом вращения.
Ищу помощь или предложения о том, как действовать иначе.
Я попробовал множество различных операций предварительной обработки (расширение/расширение, контрастность, шумоподавление, коррекция гистограммы, края, контрастность, размытие, пороговое значение). ....).
Я пытался отфильтровать шум на изображении и по-настоящему выделить темные области, чтобы SIFT мог найти что-то более конкретное.
Я посмотрел на сопоставление изображений, но, как я уже говорил, мне нужно вращение.
Благодарю за помощь!
изображение 1:

изображение 2:

Вот код, который можно скопировать с изображениями выше:
import cv2
img_obj_raw = cv2.imread('b3KDF_01.png')
output_cropped = img_obj_raw[93:(93+185),121:(121+237)]
img_obj = output_cropped
img_scn_raw = cv2.imread('b3KDF_02.png')
output_cropped = img_scn_raw[68:(68+235),96:(96+287)]
img_scn = output_cropped
img_obj = cv2.cvtColor(img_obj, cv2.COLOR_BGR2GRAY)
img_scn = cv2.cvtColor(img_scn, cv2.COLOR_BGR2GRAY)
# Adaptive Histogram equalization
clahe = cv2.createCLAHE(clipLimit=5, tileGridSize=(20, 20))
img_obj = clahe.apply(img_obj)
img_scn = clahe.apply(img_scn)
# create SIFT feature extractor
sift = cv2.SIFT_create(nfeatures = 0, nOctaveLayers = 3, contrastThreshold = 0.04, edgeThreshold = 10, sigma = 1.6)
# detect features from the image
keypoints_obj, descriptors_obj = sift.detectAndCompute(img_obj, None)
keypoints_scn, descriptors_scn = sift.detectAndCompute(img_scn, None)
# create feature matcher
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)
matcher = cv2.FlannBasedMatcher(index_params,search_params)
matches = matcher.knnMatch(descriptors_obj, descriptors_scn, k=2)
# Apply ratio test
good_matches = []
ratio = 0.5
for m,n in matches:
if m.distance < ratio*n.distance:
good_matches.append([m])
img_obj_rawkp = cv2.drawKeypoints(img_obj, keypoints_obj, None)
img_scn_rawkp = cv2.drawKeypoints(img_scn, keypoints_scn, None)
# draw matches
img_matched = cv2.drawMatchesKnn(img_obj_rawkp, keypoints_obj, img_scn_rawkp, keypoints_scn, good_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
cv2.imshow('img_matched', img_matched)
cv2.waitKey(0)
cv2.destroyAllWindows()
Подробнее здесь: https://stackoverflow.com/questions/792 ... ast-images
Мобильная версия