Convex Hull
Lambung cembung bentuk didefinisikan sebagai:
Dalam matematika, cembung cembung atau amplop cembung untuk satu set titik X dalam ruang vektor nyata V adalah set cembung minimal yang berisi X ( Wikipedia )
Wikipedia memvisualisasikannya dengan baik menggunakan analogi karet gelang, dan ada beberapa algoritma yang baik untuk menghitungnya .
Cekung Hull
Lambung cekung divisualisasikan menggunakan garis merah pada gambar di bawah (garis biru memvisualisasikan lambung cembung). Secara intuitif, ini adalah poligon yang mencakup semua titik, tetapi memiliki area (minimal?) Lebih sedikit dibandingkan dengan cembung cembung. Akibatnya, panjang batas poligon lebih panjang.
Lambung cekung dapat menjadi solusi untuk beberapa masalah dunia nyata (misalnya menemukan batas kota yang wajar).
Saya gagal menemukan definisi yang tepat, algoritme, dan solusi praktis untuk gagasan tentang Concave Hull. The Wiki Rumput memiliki beberapa deskripsi dan gambar , dan ada solusi komersial di concavehull.com .
Adakah ide, algoritme, dan tautan?
sumber
Jawaban:
Seperti yang ditunjukkan oleh scw , Anda menginginkan implementasi bentuk-a .
Bentuk alfa dapat dianggap sebagai generalisasi cembung cembung. Mereka pertama kali dijelaskan pada tahun 1981 di:
Implementasi open source ada untuk lingkungan yang Anda minati:
PostGIS
Jika Anda menggunakan tumpukan PostGIS, ekstensi Driving Distance opsional pgRouting memperlihatkan implementasi bentuk alpha. Saya tidak yakin apakah Anda dapat memvariasikan parameter alpha.
Penggunaan di bawah:
Python
Mungkin ada banyak modul python yang bisa Anda gunakan. Saya telah mendengar hal-hal baik tentang CGAL , pustaka geometri komputasi C ++. Pembungkus Python ada untuk bagian-bagian CGAL, termasuk mengekspos implementasi bentuk alpha CGAL ke Python .
Ketahuilah bahwa sebagian CGAL dilisensikan di bawah QPL, yang berarti bahwa jika Anda mendistribusikan program Anda, yang tertaut ke CGAL, Anda mungkin perlu merilisnya di bawah QPL. Tidak apa-apa menjaga kode Anda tetap milik jika Anda tidak mendistribusikan kembali kode program atau binari Anda.
sumber
Inilah yang Anda cari.
Anda dapat mengunduh dan menguji program: (dalam java, di bawah lisensi GPL)
Makalah yang menyajikan algoritme ada di sana:
Duckham, M., Kulik, L., Worboys, MF, Galton, A. (2008) Generasi efisien poligon sederhana untuk mengkarakterisasi bentuk satu set titik di pesawat. Pengenalan Pola v41, 3224-3236
sumber
Ini tampaknya merupakan aplikasi spesifik dari bentuk alpha , yang dari bacaan saya bentuk yang lebih umum dari masalah ini. R memiliki modul alphahull , yang memiliki dokumentasi yang sangat baik tentang komputasi bentuk alpha . Periksa juga latar belakang terperinci ini pada bentuk alfa. Jika Anda hanya ingin menghitung lambung cembung / cekung, periksa lasboundary , bagian dari lastools , itu skala dengan baik dan dapat menangani jutaan titik input.
Akhirnya, aplikasi bentuk alpha yang menarik ini oleh Flickr membuat putaran beberapa waktu lalu, menunjukkan utilitas mereka untuk mengumpulkan konten titik yang dibuat pengguna:
sumber
Ada implementasi ST_ConcaveHull di trunk PostGIS. http://postgis.net/docs/ST_ConcaveHull.html
sumber
Saya membuat alat yang sangat efisien, yang disebut [perbatasan] [1,2], yang menghitung lambung cekung untuk LIDAR dalam format LAS / LAZ / SHP / ASCII dan menyimpan hasilnya sebagai poligon batas vektor dalam format ESRI Shapefile atau geo File KML-direferensikan.
Ini adalah contoh run:
Beberapa gambar hasil ada di sini .
sumber
Tentang implementasi R-Bentuk Alpha, ada sebuah artikel tentang "Mengubah Bentuk-Alpha menjadi Objek SP"
Ini didasarkan pada alphahull, sp dan spgrass6 http://casoilresource.lawr.ucdavis.edu/drupal/node/919
sumber
Berikut adalah fungsi R yang mengimplementasikan model Alpha Hull. Outputnya adalah objek sp poligon. Silakan lihat contoh di header. Ini membutuhkan paket sp, alphahull dan maptools.
** Pembaruan (01-15-2018) Ada banyak perubahan pada objek yang dihasilkan yang dihasilkan oleh paket alphahull. Karena itu, saya perlu menulis ulang fungsinya. Saya menambahkan fungsi convexHull ke paket spatialEco. Namun, karena pembatasan lisensi dalam paket alphahull fungsi ini hanya tersedia dalam versi pengembangan di GitHub. Versi pengembangan dapat diinstal menggunakan:
Berikut adalah contoh penggunaan fungsi
Ubah SpatialLinesDataFrame yang dihasilkan menjadi SpatialPolygonsDataFrame
Uji beberapa nilai alpha
sumber
JTS ( http://tsusiatsoftware.net/jts/main.html ) menyediakan implementasi Convex Hull. Martin Davies juga menyebutkan memiliki algoritma Bentuk Alpha dalam karya sehingga Anda mungkin ingin memeriksa repositori SVN untuk melihat apakah ada di belum jika itu yang Anda inginkan.
sumber
Berbicara tentang JTS, Anda dapat menggunakan Geoscript untuk memanipulasi perpustakaan JTS. http://geoscriptblog.blogspot.com/2010/06/unwrapped-jts-with-python.html untuk artikel tentang convex hull. Implementasi GeoScript tersedia dalam JavaScript, Python, Scala, dan Groovy. Situs web resmi: http://geoscript.org
sumber
Berikut adalah program yang ditulis dalam C yang menghitung lambung cembung, bentuk alfa, triangluasi Delauney, dan volume Voronoi:
Algoritma convex hull lain dengan implementasi C dan Java ada di sini:
sumber
Untuk menambah jawaban sebelumnya untuk posting ini, setidaknya pada QGIS 2.6 memang memiliki algoritma cekung lambung
Juga, Esri memiliki alat Minimum Bounding Geometry (Manajemen Data)
Yang memungkinkan Anda untuk memilih jenis geometri, yang termasuk convex hull
sumber
Ada Addon baru untuk GRASS GIS 7 yang tersedia: v.concave.hull . Lihat juga http://grasswiki.osgeo.org/wiki/Create_concave_hull
sumber
Untuk membantu bagian "definisi yang tepat" dari pertanyaan Anda; Anda mungkin telah melihat https://en.wikipedia.org/wiki/Convex_hull dan mendapatkan apa yang bisa dianggap sebagai definisi yang "tepat", tetapi ternyata tidak ada, jadi mungkin definisi yang lebih "berguna" adalah:
Untuk setiap titik di dalam lambung cembung, garis lurus untuk setiap titik tidak dalam lambung hanya akan berpotongan lambung sekali.
Ini berguna karena diberikan titik Anda dapat membangun garis melaluinya dan menguji untuk garis yang dibangun memotong segmen lambung.
sumber