Найти уникальные элементы в определенном диапазоне координат - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь определить все уникальные элементы в списке на основе xy-координат. Список выглядит следующим образом:

List =[[[Picture1, [X-Coordinate, Y-Coordinate]], [Picture1, [X-Coordinate, Y-Coordinate]]],
      [[Picture2, [X-Coordinate, Y-Coordinate]], [Picture2, [X-Coordinate, Y-Coordinate]]],
      ....]

Это актуальный список:

MyList = [[['IMG_6094.jpg', [2773.0, 240.0]], ['IMG_6094.jpg', [2773.0, 240.0]]],
         [['IMG_6096.jpg', [1464.0, 444.0]], ['IMG_6096.jpg', [3043.0, 2358.0]]],
         [['IMG_6088.jpg', [1115.5, 371.5]]],
         [['IMG_6090.jpg', [3083.0, 1982.5]], ['IMG_6090.jpg', [3083.0, 1982.5]]],
         [['IMG_6093.jpg', [477.0, 481.0]], ['IMG_6093.jpg', [450.0, 487.5]]]]  

Как вы можете видеть, иногда есть элементы, которые имеют одинаковые координаты в изображении или по крайней мере, очень близко друг к другу. Что мне нужно сделать, это выбросить все неуникальные или очень близкие элементы, основанные на одной из координат (не имеет значения, х или у). Список должен выглядеть следующим образом:

MyList = [[['IMG_6094.jpg', [2773.0, 240.0]], --- thrown out because copy of first element ---],
         [['IMG_6096.jpg', [1464.0, 444.0]], ['IMG_6096.jpg', [3043.0, 2358.0]]],
         [['IMG_6088.jpg', [1115.5, 371.5]]],
         [['IMG_6090.jpg', [3083.0, 1982.5]], --- thrown out because copy of first element---],
         [['IMG_6093.jpg', [477.0, 481.0]], --- thrown out because e.g. abs(x-coordinates) < 30]  

Может ли кто-нибудь предложить элегантное решение?

Заранее спасибо!

1 Ответ

0 голосов
/ 07 февраля 2020

вы создаете для img список близких к нему innteger, чем для других точек на этом img, вы проверяете, есть ли их x или y или в списке, и, если это так, добавляете их в список удаления, кстати, при удалении используя индекс, убедитесь, что вы начинаете с наибольших x, y, чтобы вы не изменили индекс нижней точки, прежде чем удалять их

 remove = []
 close = 30
 for i in range(len(MyList)):
     xList = []
     yList = []
     for j in range(len(MyList[i])):
         if int(MyList[i][j][1][0]) in xList or int(MyList[i][j][1][1]) in yList:
             remove.append([i,j])
             continue
         x = int(MyList[i][j][1][0])
         y = int(MyList[i][j][1][1])
         xList+= list(range(x-close,x+close))
         yList+= list(range(y-close,y+close))

...