मैं एक कार्यान्वयन की तलाश में हूं जो दो आयामों में अल्फा आकार की गणना करता है। मैं उबंटू चला रहा हूँ। मैं इस कार्य के लिए कमांड लाइन उपयोगिता पसंद करूंगा, लेकिन एक पायथन पुस्तकालय के साथ भी ठीक होगा।मैं 2 डी पॉइंट क्लाउड के अल्फा आकार (अवतल हल) कैसे ढूंढ सकता हूं?
Google में मुझे कई कार्यान्वयन मिले हैं जो अल्फा आकार की गणना करते हैं। लेकिन उनमें से कोई भी जो मैं चाहता हूं उसे आउटपुट नहीं करता हूं। इनपुट के रूप में मेरे पास दो आयामी बिंदुओं की एक सूची है (उदाहरण के लिए, एक पाठ फ़ाइल में प्रति पंक्ति की एक जोड़ी)। आउटपुट के रूप में मैं एक ही पैमाने के साथ दो आयामी बिंदु की एक और सूची चाहता हूं।
मैं cgal के नवीनतम अजगर बाइंडिंग से स्थापित करने की कोशिश की है, लेकिन इन एक समय में समर्थित नहीं किया गया है और अब उबंटू 11.04 पर संकलन (मैं भी उबंटू 10.04 पर की कोशिश की और कोई भाग्य था)। Clustr, हारून स्ट्रैप कोप द्वारा फ़्लिकर पर विकसित एक परियोजना भी उबंटू 11.04 पर संकलित नहीं होगी (संभवतः क्योंकि यह पुराने सीजीएएल पुस्तकालयों से भी जुड़ी हुई है)।
मैंने घंटी प्रयोगशालाओं में केन क्लार्कसन से this implementation भी कोशिश की। यह लगभग जो भी मैं चाहता हूं, आउटपुट करता है, आउटपुट दूसरे पैमाने पर प्रतीत होता है और यह स्याही में तैरता है।
मैंने dionysus की पाइथन बाइंडिंग की भी कोशिश की। ये संकलित, लेकिन जब मैंने अंक की अपनी सूची के साथ fill_alpha2D_complex(points, f)
फ़ंक्शन को खिलाया, तो आउटपुट मुझे अपेक्षित नहीं था। यह दो आयामी बिंदुओं की एक सूची नहीं थी, बल्कि यह "दृढ़ता चित्र" प्रतीत होता है, मुझे नहीं पता कि इसका क्या अर्थ है।
किसी को भी इस समस्या का एक सरल समाधान पता है?
अद्यतन: मैं अल्फा आकार से जुड़े बिंदुओं को मुद्रित करना चाहता हूं, जहां यह अब कनेक्ट नहीं होने के कगार पर है। मुझे लगता है कि इसका मतलब है "मुझे सबसे छोटे अल्फा मूल्य से जुड़े बिंदु दें जैसे कि आकार जुड़ा हुआ है।"
अद्यतन मैं अब पता चला है कि मैं क्या Ken Clarkson's implementation से चाहते हैं और dionysus implementation से (कम या ज्यादा क्या मैं चाहता हूँ) कैसे प्राप्त करें। क्लार्कसन का कार्यान्वयन सही काम कर रहा था, यह सिर्फ अंक के बजाय बिंदुओं के सूचकांक को आउटपुट करता है (डायोनियस के साथ एक ही कहानी), और मुझे कुछ वैकल्पिक झंडे सही करने की आवश्यकता थी। मैंने लिखा रैपर नीचे है। यह समाधान आदर्श है क्योंकि यह अल्फा आकार उत्पन्न करता है जो दोनों जुड़े हुए हैं और छेद नहीं हैं। अल्फा स्वचालित रूप से सेट है। दूसरी ओर, डायोनिसस अल्फा के इन मानों को स्वचालित रूप से नहीं खोजता है। इसके अलावा क्लार्कसन के कार्यान्वयन को आकार की एक पीएस छवि (-फैप्स ध्वज के साथ) आउटपुट करने के लिए सेट किया जा सकता है। जीसीसी के गैर-प्राचीन संस्करण के साथ संकलित करने के लिए क्लार्कसन का कोड प्राप्त करने के लिए, आपको here पर उल्लिखित चरण का पालन करना होगा।
complex = Filtration()
fill_alpha2D_complex(points, complex)
alphashape = [s for s in complex if s.data[0] <= .5]
तो मैं आप की जरूरत का मानना है:
#!/usr/bin/python -O
import sys, os
import subprocess
import tempfile
hull_path = "./hull.exe"
def get_alpha_shape(points):
# Write points to tempfile
tmpfile = tempfile.NamedTemporaryFile(delete=False)
for point in points:
tmpfile.write("%0.7f %0.7f\n" % point)
tmpfile.close()
# Run hull
command = "%s -A -m1000000 -oN < %s" % (hull_path, tmpfile.name)
print >> sys.stderr, "Running command: %s" % command
retcode = subprocess.call(command, shell=True)
if retcode != 0:
print >> sys.stderr, "Warning: bad retcode returned by hull. Retcode value:" % retcode
os.remove(tmpfile.name)
# Parse results
results_file = open("hout-alf")
results_file.next() # skip header
results_indices = [[int(i) for i in line.rstrip().split()] for line in results_file]
# print "results length = %d" % len(results_indices)
results_file.close()
os.remove(results_file.name)
return [(points[i], points[j]) for i,j in results_indices]
if __name__ == "__main__":
points = [tuple([float(i) for i in line.rstrip().split()]) for line in sys.stdin]
for point_i, point_j in get_alpha_shape(points):
sys.stdout.write("%0.7f,%0.7f\t%0.7f,%0.7f\n" % (point_i[0], point_i[1], point_j[0], point_j[1]))
sys.exit(0)
अंक की केवल एक सूची अल्फा आकार का वर्णन नहीं कर सकती है, क्योंकि यह भी आवश्यक रूप से कनेक्ट नहीं है। –
मैं बस एक बिंदु बादल की एक अच्छी सीमा चाहते हैं। लेकिन अगर यह विवरण सटीक नहीं है तो सवाल में मेरा अपडेट देखें। – conradlee
एक कनेक्टेड अल्फा आकार अभी भी बहुत अच्छा नहीं हो सकता है, यानी छेद शामिल हैं। –