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.>
Wie kann man in Python Numpy Array wissen, welches Objekt einem Punkt in einem Bild näher ist? ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Libmodbus: Punkt-zu-Punkt-TCP-Verbindungsfehler zwischen zwei industriellen Pi
by Anonymous » » in Linux - 0 Replies
- 16 Views
-
Last post by Anonymous
-
Mobile version