Jump to content
Compvision.ru
Sign in to follow this  
OmgZomg

Построить граф в виде матрицы

Recommended Posts

У меня в цикле строится гомография между парами снимков.

Как это оформить в граф? Желательно в матрицу смежности

for b in s.left_list[1:]:
        H = s.matcher_obj.match(a, b, 'left')

 

Share this post


Link to post
Share on other sites

По горизонтали точки левого изображения, по вертикали правого, если соединяются то в пересечении 1 если нет, 0. 

Получите матрицу смежности. Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес. 

  • Thanks 1

Share this post


Link to post
Share on other sites
12 hours ago, Smorodov said:

По горизонтали точки левого изображения, по вертикали правого, если соединяются то в пересечении 1 если нет, 0. 

Получите матрицу смежности. Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес. 

Благодарю! Можно пример кода? Желательно на Python   Особенно интересует этот момент "Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес. ". Не могу пока никак сообразить как это закодить:huh:

Share this post


Link to post
Share on other sites

Ну код крафтить мне лень )

Чтобы добыть ключевые точки, можно заюзать что то такое:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img1 = cv2.imread('box.png',0)          # queryImage
img2 = cv2.imread('box_in_scene.png',0) # trainImage

# Initiate SIFT detector
sift = cv2.SIFT()

# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

Есть 2 набора точек, у которых есть дескрипторы (многомерные точки), так вот, делаем двойной вложенный цикл.

И заполняем матрицу NxM, где N - количество точек первого изображения, а M - второго.

Элемент матрицы D[i,j] будет равен расстоянию между i-той и j-той точками (точнее их дескрипторами).

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Вот так сделал

 

	def match(self, i1, i2, direction=None):
		imageSet1 = self.getSURFFeatures(i1)
		imageSet2 = self.getSURFFeatures(i2)
		print("Direction : ", direction)
		matches = self.flann.knnMatch(
			imageSet2['des'],
			imageSet1['des'],
			k=2
			)
		good = []
		for i , (m, n) in enumerate(matches):
			if m.distance < 0.7*n.distance:
				good.append((m.trainIdx, m.queryIdx))

		if len(good) > 4:
			pointsCurrent = imageSet2['kp']
			pointsPrevious = imageSet1['kp']

			matchedPointsCurrent = np.float32(
				[pointsCurrent[i].pt for (__, i) in good]
			)
			matchedPointsPrev = np.float32(
				[pointsPrevious[i].pt for (i, __) in good]
				)

			H, s = cv2.findHomography(matchedPointsCurrent, matchedPointsPrev, cv2.RANSAC, 4)

			return H,sum(s) / len(s)

		return None

	def getSURFFeatures(self, im):
		gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
		kp, des = self.surf.detectAndCompute(gray, None)
		return {'kp':kp, 'des':des}
      
      
      
    N = len(img_list)
    adjacency_matrix = np.zeros((N, N))

        for i in range(N):
        for j in range(i + 1, N):
                out = s.matcher_obj.match(lst[i], lst[j], 'left')
                if out is not None:
                    H, s = out
                    if s >= 0.5:
                        adjacency_matrix[i, j] = 1
                        adjacency_matrix[j, i] = 1
    print('AM',adjacency_matrix)

 

Share this post


Link to post
Share on other sites

Только расстояние между дескрипторами обратно пропорционально схожести точек. 

  • Thanks 1

Share this post


Link to post
Share on other sites
1 hour ago, Smorodov said:

Только расстояние между дескрипторами обратно пропорционально схожести точек. 

Что Вы имеете ввиду? Где мне исправить?

 

Share this post


Link to post
Share on other sites

Да не, все вроде верно, просто не внимательно  прочитал. 

Я думал вы в сторону hungarian-algorithm клоните ) 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×