1

ImageC에서 설명한 것처럼 OpenCV의 goodFeaturesToTrack을 사용하여 얻은 점이있는 이진 이미지가 있습니다.임의의 점 구름에 점 격자를 맞추는 방법

Image1 : Cloud of points

이미지 2에 표시에 내가 등으로 그것에 4 * 25 점의 그리드에 맞게 싶습니다 (모든 점은 이미지를 볼 수 있습니다,하지만 정규 4 * 25 점입니다 구형).

4 * 25 도트 내 모델 격자에 의해 매개 변수화된다

Image2 : Model grid of points

: 1 - 좌측 상단 코너의 위치는 2 - 수평선 와 사각형의 기울기 아래 코드 기능을 보여준다 그러한 모델을 만듭니다.

이 문제는 체스 판 코너 문제에 가까울 것으로 보입니다.

필자의 모델 클라우드를 입력 이미지에 맞추고 구름의 위치와 각도를 얻는 방법을 알고 싶습니다. 두 이미지 (입력란 하나와 모델 격자가있는 곳) 사이의 거리를 쉽게 측정 할 수 있지만이 거리의 최소값을 찾기 위해 이미지의 모든 픽셀과 각도를 확인하지 않아도됩니다.

첫째, 난 그냥 이미지를 겪고, 모든 긍정적 인 픽셀의 위치 인덱스를 생성 :

def ModelGrid(pos, angle, shape): 

    # Initialization of output image of size shape 
    table = np.zeros(shape) 

    # Parameters 
    size_pan = [32, 20]# Pixels 
    nb_corners= [4, 25] 
    index = np.ndarray([nb_corners[0], nb_corners[1], 2],dtype=np.dtype('int16')) 
    angle = angle*np.pi/180 

    # Creation of the table 
    for i in range(nb_corners[0]): 
     for j in range(nb_corners[1]): 
      index[i,j,0] = pos[0] + j*int(size_pan[1]*np.sin(angle)) + i*int(size_pan[0]*np.cos(angle)) 
      index[i,j,1] = pos[1] + j*int(size_pan[1]*np.cos(angle)) - i*int(size_pan[0]*np.sin(angle)) 

      if 0 < index[i,j,0] < table.shape[0]: 
       if 0 < index[i,j,1] < table.shape[1]: 
        table[index[i,j,0], index[i,j,1]] = 1 

    return table 

답변

0

상대적으로 잘 작동 내가 찾은 해결책은이 다음이다. 나는이 픽셀 코너라고 부를 것이다.

다음이 색인을 사용하여 평균 경사각을 계산합니다. 각 모서리에 대해 교차를 정의 할 때 특정 영역에서 충분히 근접한 다른 모퉁이를 찾습니다. 각 픽셀에 대해 왼쪽, 오른쪽, 위쪽 및 아래쪽에 직접있는 픽셀을 찾습니다. 이 십자 기호를 사용하여 경사각을 계산 한 다음 얻은 모든 경사각의 중앙값을 모델 격자의 각도로 사용합니다.

일단이 각도를 사용하면이 각도와 각 모서리의 위치를 ​​사용하여 표를 작성하기 만하면됩니다. 최적화 함수는 두 이미지의 일치하는 픽셀 수를 측정하고 최상의 위치를 ​​반환합니다.

이 방법은 대부분의 예제에서 잘 작동하지만 반환 된 '최적의 위치'는 모서리 중 하나 여야하며 이는 최상의 위치에 해당 함을 의미하지는 않습니다 ... 주로 그리드의 왼쪽 위 모서리 모퉁이 구름 안에