2015-05-18 31 views
5

http://i.imgur.com/iIv4gJa.pngGörüntü (renk?) segmentasyon ++

grafik gösterdi, ben giriş görüntüsünün ister ve böyle bir sonucu olarak birkaç parça almak istiyorum.

Tıpkı en yakın renk segmentini kümelemek gibi, bu yüzden "araçlar kayması" kavramına yakın olduğunu düşünüyorum?

Burada ilgili soruları araştırdım ama yine de opencv C++ içindeki yapıyı nasıl başlatacağınızı ve yapılandıracağınızı bilmiyordum. Bazı tavsiyelere bakıyorum ve başvuru için bir uygulama kodu almam durumunda çok memnun olacağım! Herhangi bir yardım için teşekkürler!

================================= ====

Düzenleme 5/19/2015

bana çalışıyor uygulamaları biri) burada :(http://blog.csdn.net/fdl19881/article/details/6749976 Havza olduğunu ekleyelim.

enter image description here

Mükemmel değil ama sonuç istediğim. Bu uygulamada, kullanıcının manuel olarak çalışması gerekir (havza çizgilerini çizin), bu yüzden OTOMATİK versiyonunu arıyorum. Kulağa biraz sert geliyor, ama ... bunu yapmak için bazı öneri veya kod parçası için minnettar olacağım.

+1

Lütfen yaptığınız tüm kod çabalarını gönderin. – npinti

+0

Belki segmentasyon için bir havza algoritması kullanabilir ve görselleştirme için bölümlenmiş öğeden ortalama rengi seçebilirsiniz ?! Bu yüzden ben – retinotop

+0

başlayacağım Aslında, ağ üzerinde aranan birkaç uygulama denedim, ama verimli Grafik Tabanlı Görüntü Bölütleme (P. Felzenszwalb, D. Huttenlocher tarafından) dışında ne istediğime yakın bile yok gibi görünüyor, burada demo sitesi: http://cs.brown.edu/~pff/segment/ Ama maalesef, bu kod yamasında bir sorun var (içinde "loadPPM" fonksiyonu), bu yüzden buraya başka biri için yalvarıyorum/uygulamak için değiştirilmiş bir yol. – Oasis

cevap

2

OpenCV Dokümantasyon: Link

Parametreler: Meanshift filtreleme için here

örnek kod:

#include "opencv2/core/core.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 

using namespace cv; 
using namespace std; 

Mat img, res, element; 

int main(int argc, char** argv) 
{ 

    namedWindow("Meanshift", 0); 
    img = imread(argv[1]); 
// GaussianBlur(img, img, Size(5,5), 2, 2); 
    pyrMeanShiftFiltering(img, res, 20, 45, 3); 
    imwrite("meanshift.png", res); 
    imshow("Meanshift", res); 

    waitKey(); 

    return 0; 
} 

Bu görüntü ile çıktı, daha önce bazı ön işlemeyi kullanmak gerekebilir olduğunu veya daha iyi bazı parametreler bulabilirsiniz:

output

DÜZENLEME: önceden bazı bulanıklık Gauss ile Çıkışı (kodunda açıklama) mevcut segmentasyon bakarak sorunu yaklaşır

here

+0

Bu ne istediğime çok yakın! Ama parametreleri daha düzgün bir hale getirmek için ayarlamaya çalışacağım! (Segment alanı büyüklüğünü iyi konumlandırmak için) Aslında bu renk bölümleme, "semantik segmentasyon" un önceki işlemidir, bu yüzden dikkatlice bulanıklaştırmayı düşüneceğim veya önlenmeyecek içindeki yerel özellik bilgilerini yok edin. – Oasis

+0

@Oasis semantik segmentasyon için süper pikseller isteyebilirsiniz, örneğin [dil] (http://ivrl.epfl.ch/research/superpixels) – Shai

+1

@Oasis gibi daha modern yaklaşımları düşünmek isteyebilirsiniz. shift ** segmentasyonu ** (** filtering ** yerine) [EDISON] (http://coewww.rutgers.edu/riul/research/code/EDISON/) adresini dikkate almak isteyebilirsiniz. – Shai

1

onlar birini kullanabilirsiniz Uni dışında hangi kimse (Matlab uygulanmış olmasıdır) veya otomatik değiller. Kullanıcının, önceliği nesneleri seçerek ya da renkleri nasıl bölüştüreceğini belirten düzeyler seçerek ön işleme tabi tutması gereken bir yaklaşım, otomatik olmadığından kullanışlı değildir. İsterseniz, OpenCV tabanlı bu segmentasyon uygulamasının bu blog post'da açıklanan deneyimini deneyebilirsiniz. Mükemmel değil, ama otomatik ve işin çoğunu yapıyor ve aslında kaynağı indirip deneyebilirsiniz.