Скажем, у меня есть два изображения A
и B
одинакового размера.Скажем, у меня также есть две сумки сегментов bag_A
и bag_B
2D-сегментов, из изображений A и B соответственно.
2D-сегмент определяется как набор местоположений (пикселей) на изображении и может быть представлен двоичным изображением того же размера, что и исходное изображение, где пиксель равен true
, если пиксельнаходится внутри сегмента, и false
, если он находится снаружи.
Скажем, я хочу увидеть, какие сегменты из bag_A
перекрываются с какими сегментами из bag_B
, и закодировать результат в матрице смежности, поэтомучто:
adjacency_matrix(segment_from_A,segment_from_B)
равно true
, если сегменты перекрываются. adjacency_matrix(segment_from_A,segment_from_B)
равно false
в противном случае.
Мой вопросКакой эффективный способ быстро вычислить эту матрицу смежности?
Скажем, я определяю N
и M
как% сегментов в bag_A
и bag_B
соответственно.Есть ли способ вычислить матрицу смежности в меньше , чем O(N*M)
"в среднем"?(например, с равномерным распределением сегментов по пространству и размеру)?Если да, то как?
Мой вывод:
Я считаю, что есть способ сделать это с помощью hashing
, возможно, предварительно обработав данные враспределить сегменты в ведра.Я думаю, что могу определить сегмент для каждого местоположения на каждом изображении, где два или более сегмента этого изображения перекрываются.Тогда я, вероятно, мог бы просто вычислить смежность между сегментами между двумя изображениями, и из этого я мог получить смежность между bag_A
и bag_B
как-то "напрямую".Тем не менее, я не уверен, сработает ли это (вероятно, я скоро попробую) или как оценить ожидаемое время работы для него.
Кроме того, когда стоило бы вычислять смежность с помощью хеширования, а не путем сравнения всех возможных пар напрямую?
Бонус: Особенности реализации
В конечном итоге я ищу решение, которое бы работало в MATLAB или из него.