2017-10-22 2 views
0

입력 이미지를 기반으로 유사한 이미지 집합을 검색하려고합니다. 시퀀스와 함께 배열 요소를 설정하고 있습니다. 시퀀스로 배열 요소를 설정. 도중 Python에 대해서는 OpenCV입니다. 내 전략은 이미지 데이터베이스의 SURF 기능을 얻은 다음 k-NN 모델에 넣으므로 SURF 기능을 사용하여 이미지를 쿼리하고 유사한 항목 집합을 찾을 때마다 k-NN을 사용할 수 있습니다. 가장 가까운 이웃을 구하십시오. 문제는 모델을 에 넣고 SURF 개의 설명자를 배치 한 다음 평평하게 만드는 것입니다. 그러나이 오류는 모델을 훈련 시키려고 할 때마다 계속 나타납니다. setting an array element with a sequence.setting an array element with a sequence.SURF를 사용하여 k-NN을 학습 할 때 오류가 발생했습니다.

내가 뭘 잘못하고 있니? 나는 특징을 대표해야 어떻게 k-NN

UPDATE와 함께 사용할 수 있도록 : 여기에 내 코드

SURFObject = cv2.SURF(hessianThreshold = 400, extended = 0) 
image_names = [] 
image_descriptors = [] 
for i in range(1, 4001): 
    print("Image Number: " + str(i)) 
    filename = 'cat.'+ str(i) +'.jpg' 
    img = cv2.imread(filepath + filename) 
    keypoints, descriptors = SURFObject.detectAndCompute(img, None) 
    image_descriptors.append(descriptors.tolist()) 
    image_names.append(filename) 

neighbors = NearestNeighbors(10, 0.5) 
neighbors.fit(np.array(image_descriptors).reshape(-1,1)) 
+0

코드를 게시하십시오. –

+0

@LakshyaKejriwal 게시물을 업데이트했습니다. 감사합니다. – Jessie

답변

0

의 당신이 얻을 오류 메시지가 정확히 모르겠지만 확실히 당신이에 문제가 설명자 차원

서핑은 먼저 이미지에 대한 키 포인트를 찾은 다음 각 키 포인트에 대해 고정 된 크기의 설명자를 생성합니다. 각 이미지에 대해 키 포인트 수가 다르면 "descriptors.tolist()"를 실행하면이 키 포인트에 대한 모든 설명자를 연결하지만 각 이미지마다 다른 크기가됩니다.

이런 종류의 문제를 다루기 위해 단어 가방이나 더 나은 피셔 벡터에 대해 읽으십시오.

+0

SURF와 k-NN이 비슷한 이미지를 검색하는 데 적합하지 않다는 뜻입니까? – Jessie

+0

서핑 + 단어 + k-NN 작업 –

+0

가능할 수도있는 각 이미지에 대해 고정 된 수의 키 포인트를 선택할 수 있지만 이미지의 성격에 따라 좋은 결과를 내지 못할 수도 있습니다 –

관련 문제