Wie kann man in Python Numpy Array wissen, welches Objekt einem Punkt in einem Bild näher ist?Python

Python-Programme
Anonymous
 Wie kann man in Python Numpy Array wissen, welches Objekt einem Punkt in einem Bild näher ist?

Post by Anonymous »

Ich habe ein Numpy -Array, das ein Bild darstellt. Das Bild hat 3 Farben: Orange (Hintergrund), Blau (Objekt1) und Grün (Objekt2). Ich verwende 3 Werte (0, 1 und 2), um die 3 Farben in Numpy Array anzuzeigen. Zwei Objekte werden nicht überlappt. .import numpy as np
from scipy import spatial
import time

sub_image1 = np.ones((30, 30, 30))
sub_image2 = np.ones((20, 10, 15))

# pad the two sub_images to same shape (1200, 1200, 1200) to simulate my 3D medical data
img_1 = np.pad(sub_image1, ((1100, 70), (1100, 70), (1100, 70)))
img_2 = np.pad(sub_image1, ((1100, 80), (1130, 60), (1170, 15)))

def nerest_dis_to_center(img):
position = np.where(img > 0)
coordinates = np.transpose(np.array(position)) # get the coordinates where the voxels is not 0
cposition = np.array(img.shape) / 2 # center point position/coordinate
distance, index = spatial.KDTree(coordinates).query(cposition)
return distance

t1 = time.time()
d1 = nerest_dis_to_center(img_1)
d2 = nerest_dis_to_center(img_2)

if d1 > d2:
print("img2 object is nearer")
elif d2 > d1:
print("img1 object is nearer")
else:
print("They are the same far")
t2 = time.time()
print("used time: ", t2-t1)
# 30 seconds
< /code>
Der obige Code funktioniert, aber langsam und es erfordert eine sehr große Menge an Speicher (ca. 30 GB). Wenn Sie meinen Code in Ihrem PC reproduzieren möchten, können Sie eine kleinere Form anstelle von (3200, 1200, 1200) verwenden. Gibt es eine effizientere Möglichkeit, mein Ziel zu erreichen? Die Objekte im Bild sind zufällig, können konvex sein oder nicht. Deshalb ist meine Implementierung viel langsam. Um meine Frage zu klären, verwende ich das 2D -Bild, um meine Methode zu erklären.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post