Damarları yapraklarda ayırmanın en iyi yolu nedir?


47

Çok fazla araştırma yaptım ve yapraklardaki damarları tespit etmede kullanılabilecek uyarlanabilir eşik, havza vb. Yöntemler buldum. Ancak eşikleme çok fazla gürültü çıkardığından iyi değildir

Tüm resimlerim gri imge, lütfen acil yardıma ihtiyacı olan bu sorunu göz önüne alarak hangi yaklaşımların benimseneceğini önerebilir

EDIT: Orijinal görüntüm

görüntü tanımını buraya girin

Eşikten sonra

görüntü tanımını buraya girin

Cevap tarafından önerildiği gibi aşağıdaki kenar algılama denedim

  1. açıkgöz

Çok fazla gürültü ve istenmeyen rahatsızlıklar

görüntü tanımını buraya girin

  1. Sobel

görüntü tanımını buraya girin

  1. Roberts

görüntü tanımını buraya girin

EDIT: Bir operasyon daha denedim, aşağıdaki sonucu elde ediyorum, canny ve adaptif ile denediklerimden daha iyi. Ne hissediyorsun?

görüntü tanımını buraya girin


Bize biraz resim gösterir misiniz?
Jonas

Resim ekledim
vini

@vini Bunu daha sonra iyi bir şablon eşleşmesi elde etmek için ön işleme adımı olarak mı yapıyorsunuz? Ayrıca basit eşikleme ile ikinci görüntüyü nasıl elde ettiniz?
Spacey

Amacım, damarları parçalamada mümkün olan en iyi sonucu elde etmektir, böylece çıktım başıboş eserler içermez, ikinci görüntüyü elde etmek için Uyarlamalı eşikleme kullandım
vini

Verdiğiniz görüntülerden eşikli bir görüntü üzerinde (çeşitli) filtreler kullanıyormuşsunuz gibi görünüyor. Bu son derece kötü sonuçlar verecektir . Orijinal görüntüdeki filtreleri kullanmalı ve ardından çıktısını almalısınız .
Benjohn

Yanıtlar:


56

Kenarlar aramıyorsunuz (= yüksek ve düşük gri değere sahip geniş alanlar arasındaki sınırlar), sırtlar arıyorsunuz (çevrelerinden daha koyu veya daha parlak ince çizgiler), bu nedenle kenar filtreleri ideal olmayabilir: Bir kenar filtresi size iki kanat (çizginin her bir tarafında bir tane) ve çizginin ortasında düşük bir yanıt verin:

filtre örnekleri

EKLE : Bir kenar dedektörü ve bir sırt dedektörü arasındaki farkı daha net bir şekilde açıklamanız istendiyse. Bu cevap çok uzadıysa şimdiden özür dilerim.

Bir kenar algılayıcısı (genellikle) bir birinci türev operatörüdür: Giriş görüntüsünü bir 3B manzara olarak hayal ederseniz, bir kenar algılayıcı eğimin dikliğini o manzaradaki her bir noktada ölçer:

görüntü tanımını buraya girin

Uzatılmış bir aydınlık veya karanlık bölgenin sınırını tespit etmek istiyorsanız, bu gayet iyi. Fakat OP görüntüsündeki damarlar için size aynı şeyi verecektir: her damarın solunda ve sağında ana hatlar:

görüntü tanımını buraya girin

Bu ayrıca Canny kenar dedektörü sonuçlarında "çift çizgi deseni" açıklar:

görüntü tanımını buraya girin

gxy

g(x,y)12x22gx2+xy2gxy+12y22gy2+xgx+ygy+g(0,0)

veya matris formunda:

g(x,y)12(xy).(2gx22gxy2gxy2gy2).(xy)+(xy).(gxgy)+g(0,0)

(2gx22gxy2gxy2gy2)

λ1x2+λ2y2λ1λ2

Bu işlev yaklaşımının ne tür şekilleri olabilir? Aslında o kadar değil:

görüntü tanımını buraya girin

Sırtı tespit etmek için, yukarıdaki parsellerin sonuncusuna benzeyen alanları bulmak istiyoruz, bu nedenle Hessian'ın ana özdeğerinin büyük olduğu (küçük özdeğerle karşılaştırıldığında) alanlar arıyoruz. Bunu tespit etmenin en basit yolu, her pikselin ana özdeğerini hesaplamaktır - ve aşağıdaki sırt filtresinin yaptığıdır.


Bir sırt filtresi muhtemelen daha iyi sonuçlar verecektir. Mathematica'yı yerleşik olarak RidgeFilter(Hessian matrisinin her bir pikselindeki özdeğerini hesaplayan) resminizde denedim :

sırt filtresi

Gördüğünüz gibi, her ince koyu çizgi için sadece tek bir tepe var. Binarizasyon ve skeletonizing verimler:

görüntü tanımını buraya girin

İskeleti budandıktan ve görüntüdeki küçük bileşenleri (gürültü) çıkardıktan sonra şu son iskeleti elde ediyorum:

görüntü tanımını buraya girin

Tam Mathematica kodu:

ridges = RidgeFilter[ColorNegate@src];
skeleton = SkeletonTransform[Binarize[ridges, 0.007]];
DeleteSmallComponents[Pruning[skeleton, 50], 50]

EKLEMEK:

Ben bir Matlab uzmanı değilim, bir sırt süzgecine sahip olup olmadığını bilmiyorum, ama size "elle" nasıl uygulandığını gösterebilirim (yine, Matematica kullanarak). Dediğim gibi, sırt süzgeci, Hessian matrisinin ana öz değeridir. Bu özdeğerin matematiksel olarak Mathematica'da hesaplamasını yapabilirim:

eigenvalue=Last[Eigenvalues[(HxxHxyHxyHyy)]]

12(Hxx+Hyy+Hxx2+4Hxy22HxxHyy+Hyy2)

HxxHxyHyy


Evet tam olarak istediğim bu, ancak bunu matlabda yapıyorum ve sırt filtresinin bir eşdeğerini bulmak zorlaştı
vini

1
@nikie Çok güzel cevap - soru - lütfen görüntü işleme olmayan insanlar için bir kenar algılayıcı ile sırt algılayıcı arasındaki farkı biraz açıklayabilir misiniz? Tekrar teşekkürler
Spacey

@Mohammad: Denedim, umarım matematiğe rağmen şimdi biraz daha netleştirmişimdir
Niki Estner 17:12

ridge filtresini tatmin edici sonuçlar
vermedim

2
@Vini: "tatmin edici sonuçlar vermiyor" gerçekten pek bir şey söylemiyor. Gönderdiğimle aynı sonuç görüntüsünü alıyor musunuz? "Tatminkar değil" nedir?
Niki Estner

6

Canny edge algılamasını (Halcon'da) kullanırken, alfa 1, düşük eşik 8 ve yüksek eşik 13 (1-255 ölçeğinde) ile aşağıdaki sonucu alıyorum:

Canny kenar algılama yaprağı

Parametrelerin ayarlanması ile Canny'den aldığınız sonuç daha da iyileştirilebilir. Bu görüntüyü kullanarak, gürültüyü gidermek için kısa kenarları atlayabilir ve nihai sonuç için uzun kenarları bağlayabilirsiniz.

BTW: farklı bir renk farklı bir kenarı belirtir.

Bu çevrimiçi Canny edge dedektörünü kullanarak oldukça benzer bir sonuç alabilirim :

  • Resim seç I9Pxl.png
  • Sigma 1.2
  • T-düşük 0,04
  • T-yüksek 0.07
  • Diğer ayarlar varsayılan
  • Sonuç için güncelleme görünümüne tıklayın

Teşekkürler :) Sanırım Canny sadece en iyisidir;) Btw, sonucunuza Canny uygulamanız daha iyi sonuçlar verebilir ..
Geerten

BTW: Fark etmediyseniz: Canny edge dedektörünün sınırlamaları nelerdir? Burada görüşlerinizi verebilirsiniz!
Dipan Mehta

Bana söylüyorsanız: Ben zaten sorunuza bakış açımı yaptım .. Genel olarak bir yorum yapıyorsanız: Bu yorumu sileceğim.
Geerten

Oh evet, - bunun farkında değildim!
Dipan Mehta

Cevabınız için teşekkürler ancak canny gösterdiğiniz gibi algılanmamış yapraklardaki damarların ince detaylarını
korumuyor

6

Yukarıdaki mükemmel cevaptan sonra, icikit funcitons kullanılarak python'da nasıl yapılacağı açıklanmaktadır.

from skimage.feature import hessian_matrix, hessian_matrix_eigvals

#assume you have an image img

hxx, hxy, hyy = hessian_matrix(img, sigma=3)
i1, i2 = hessian_matrix_eigvals(hxx, hxy, hyy)

#i2 is the variable you want.

#Visualise the result
import matplotlib.pyplot as plt
plt.imshow(i2)

Ne imgolmalı Bir pngdosyam var ve çalışmıyor.
Sigur

img bir 2d numpy dizisi olmalıdır.
Matthew Shun-Shin,

Aslında, i1özdeğerlerin büyüklüğü olduğundan, onu kullanmalısınız.
Rob,

Bu şimdiye kadar gördüğüm en net açıklama!
Eureka

3

Eşikleme yerine basit kenar algılama uygulamıştım.

Gauss - Radious Outer: 3.0 ve Inner: 1.0 Farkı ile Kullanılan GIMP .

İşte nasıl göründüğü.

görüntü tanımını buraya girin

Ayrıca, bir tanecikli filtre veya erozyon / dilatasyon uygulayarak grenli gürültünün bir kısmını giderebilirsiniz.

İşte sayfa Gimp'in uygulanmasını açıklıyor.

Gaussian Laplasyan'ı veya Gaussin Farkı vb. Gibi farklı tekniklere başvurmalısınız. Buna bakınız: http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm#7

Ve bu cevap Laplacian Keskinliği Azaltma Maskesinde nasıl kullanılır?


GIMP? Hangi kenar dedektörü?
vini

1
Hayır - resim düzenleme paketi. Hızlı bir kontrol yapıldı - sadece ileriye bir nokta koymak. - eşikleme yerine kenar algılamayı kullanın.
Dipan Mehta

GIMP hangi kenar dedektörünü kullanıyor? özür dilerim çok az bilgim var
vini

@ vini başvuru eklendi.
Dipan Mehta

3

Bu konu her zaman çok fazla ilgi çekmiştir, ancak konu hakkında gerçek bir fikir birliği yoktur. Bu yüzden birkaç kelime düşürmeye karar verdim.

Stackexchange'te ( Q1 ve Q2 ) daha önce benzer soruları cevaplamam, Steger'in alt piksel eğrisel yapı çıkarım algoritmasını içermekteydi. Bu yöntem birçok durumda oldukça iyi ve neyse ki bu yöntem de dahil olmak üzere oldukça iyi sonuç verdi. Bu nedenle çıktı görüntüsünü buraya gönderiyorum: görüntü tanımını buraya girin ve burada farklı bir parametre ayarıyla ve buna bağlı renklendirme olmadan: görüntü tanımını buraya girin Ayrıntılar ve doğru referanslar için lütfen bahsettiğim stackexchange mesajlarına bakın.


0

Son mühendislik çalışmaları ödevimin bir parçası olarak, kan damarları için göz fundus görüntülerinde segmentasyon yöntemleri çalışmak zorunda kaldım. Bu ağaç rekonstrüksiyon yöntemini (Cohen, Laurent D. ve Mille, Julien tarafından özellikle Hızlı Yürüyüş Yöntemleriyle birlikte kullanmak için ilginç buldum) .

Bakmak isteyebileceğiniz diğer makaleler:

  • Jeodezik Aktif Konturlar
  • 3B kafesler için hızlı yürüyüş yöntemlerinin uygulanması hakkında
  • Multistencils FMM: Kartezyen Alanlarındaki Eikonal Denklem için son derece hassas bir çözüm

Faydalı linkler: - 2D ve 3D olarak ön yayılım

Umarım bu biraz yardımcı olur, ancak tam olarak sanat eseri değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.