Filtreyi yalnızca en yüksek verileri azaltarak nasıl azaltabilirim?


16

Bu kısıtlamalar / kalite metrikleri ile filtre geçmek istiyorum, bir 2D görüntü var:

  1. Görüntüye "ekleyemiyorum", bu nedenle sonuçtaki her piksel <= girişteki karşılık gelen piksel olmalıdır.
  2. Düşük geçişli kesme frekansı, aşağıdakileri denemek için bir parametre olmalıdır:
  3. Bu filtrenin tekrar tekrar uygulanması sonucu önemli ölçüde değiştirmemelidir.
  4. Bu algoritmayı çalıştırmak için gereken süre (5MPix görüntü için 5 dakika makul görünüyor)
  5. Filtrelenen ışık miktarını en aza indirme.

Aşağıda, eksiklikleri ile birlikte denediğim bazı yaklaşımlar verilmiştir:

  1. Gauss filtresi normal gibi, daha sonra kısıtlama 1'e uymak için sonucu aşağı çekin. Bu, ilk 3 noktaya çok uygundur, ancak gerektiğinden çok daha fazla ışık azaltır.

  2. Düzeltmek için aralarındaki "düşük" noktalardan "yukarı" ve "aşağı" parabollerden "yukarı" parabolleri takmak. Bu, 1D'de harika çalışır, ancak önce yatay olarak uygulanır, ardından dikey olarak 2B'de kötü sonuçlar verir. Çok daha uzun sürüyor, ancak uygulamam için çok uzun değil. Bununla birlikte, bu filtrenin tekrar tekrar uygulanması sonucu büyük ölçüde değiştirecektir. (1D) girişi mükemmel bir "aşağı" parabol ise (hiç filtrelenmemelidir), başlangıç ​​/ bitişte oturan 2 "yukarı" parabolle değiştirilir.

  3. En iyi parametreleri bulmak için 2B "temel" fonksiyonların başka bir formunu ve doğrusal çözmeyi kullanma. Bu sadece şu anda bir fikir, henüz uygulanmadı / test edilmedi.

Sinyal işleme alanındaki deneyim alanım neredeyse tamamen görüntü işlemedir, bu yüzden sinyal işlemenin diğer alanlarında aktif olan uzmanların girişiyle bu soruna alternatifler bulmayı umuyorum.

güncelleme 2011/08/18

Mevcut reaksiyonlara dayanarak, tipik bir girdinin grafikleri ve başlangıçta tarif ettiğim 3 yaklaşımın + şimdiye kadar aldığım önerilerin sonuçlarını ekleyerek işleri biraz daha netleştirmeye karar verdim. Kolay karşılaştırma için, bu örneklerde sadece 1D filtreleme kullandım.

Girdi verileri: Veri girişi

Gauss filtresi + gereksinime uyacak şekilde aşağı indirin (1).
Aşağı indirmenin sağ tarafta gereksiz ışık azalmalarıyla sonuçlandığını görebilirsiniz. Gauss filtreli

Paraboller
Bence bu oldukça mükemmel, ne yazık ki ilk yatay, sonra dikey uygulanarak 2D'ye mükemmel bir şekilde dönüşmüyor. Bu durumda, takılan parabolleri kayan nokta çözünürlüğünde değerlendirebileceğimi görüyorsunuz, bu küçük bir faydadır, ancak kesinlikle gerekli değildir. parabol uydurma

Gri tonlama erozyonu
rwong'un önerisine dayanarak gri tonlama erozyonunu denedim. "Takılı" parabollerimle aynı parabolik şekle sahip bir yapılandırma elemanı kullandım. Sonuç neredeyse tamamen aynı, bu yüzden umut verici görünüyor. Ancak, hala birkaç sorun var: 1. Yapılandırma öğem "yeterince büyük" değildi (zaten 801 piksel genişliğinde olmasına rağmen) 1. Yalnızca "yukarı" parabollerim var, bir parabolden geçişi düzeltmek için "aşağı paraboller" yok bir sonrakine. gri tonlamalı erozyon

Medyan filtreleme
Sadece bütünlük için dahil, gerçekten istediğim şey değil. medyan filtre

ham veri
Ham girdi verilerini + çeşitli python komutlarını pastebin üzerine yapıştırdım, böylece aynı verilerle de deney yapabilirsiniz.
http://pastebin.com/ASnJ9M0p


1
Kısıtlamalar 1 ve 5 hakkında biraz daha bilgi verebilir misiniz? Görünüşe göre (ilk bakışta) çelişkili.
Peter K.

Muhtemelen "bu algoritma" ile ne demek istediğinizi yanlış anlıyorum, ancak 5 MP için 5 dakika düşük geçiş filtresi uygulamak için çok fazla gibi görünüyor.
bjoernz

Yanıtlar:


8

Gerçekten de # 2 girişiminiz için bir 2D versiyonu var - teoride benzer, ancak iki 1D işlemine ayrılamaz. Lütfen "2D gri tonlamalı morfolojik filtreleme" konusunu okuyun. Eğri bağlantısından daha hızlıdır.

Benekleri çıkarmaya çalışıyorsanız, medyan filtreleme de yararlı olabilir. Medyan filtrelemenin daha gelişmiş bir şekli "sıralı filtrelemedir".

Her durumda, # 1 gereksinimi, çıkış ve giriş arasındaki piksel cinsinden minimum değer alınarak önemsiz bir şekilde karşılanabilir. Bu önemli bir kalite ölçütüdür, ancak algoritma seçimini sınırlamaz.


Gauss filtreleme (ve diğer bazı yararlı filtreler) ayrıştırılabilir (önce 2D'den 1D'ye, sonra Fourier dönüşümü yoluyla), ancak ayrıştırılamayan, yavaşlatan ancak azalmayan birçok yararlı görüntü işleme tekniği vardır. yararlılıkları.


Merhaba, gri tonlamalı morfolojik filtreleme işaretçisine teşekkürler. Vikipedi üzerindeki açıklama ilginç görünüyor ve bunu araştıracağım. Ancak, OpenCV belgelerine bağlantınızda, gri tonlamalı filtreleri değil, yalnızca normal morfolojik filtreleri görüyorum. Bu seçeneği kesinlikle kontrol edeceğim ve sonuçları size bildireceğim. Teşekkürler.
Pieter-Jan Busschaert

6
Rwong'un medyan filtreleme önerisi hiç yardımcı oluyor mu? Verilere basit bir örnek sunarak elde etmeye çalıştığınız şey hakkında biraz daha fazla açıklama ve elde etmek istediklerinizin "sahte" bir örneği yardımcı olabilir.
Peter K.

Sorumu çeşitli verilerden örnek veriler ve sonuçlarla güncelledim. Umarım işler artık daha açıktır.
Pieter-Jan Busschaert

2

Düzeltme spline kullanmanızı öneririm.

Matlab Dosya Değişimi'nden (tam kaynak kodunu içerir, böylece gerekirse başka bir yerde yeniden uygulayabilirsiniz) sağlam spline yumuşatma işlevi SMOOTHN ile Matlab'ı kullanarak bunu nasıl yapabilirsiniz ? N-boyutlu verilerle de çalıştığını unutmayın:

%# - get inputlist from pastebin

%# - smoothen data. Lower factor means less smooth
smoothingFactor = 1000;
smoothData = smoothn(inputlist,smoothingFactor);

%# - shift down
smoothData = smoothData - max(inputlist-smoothData);

%# - show results
plot(inputlist,'b'),hold on,plot(smoothData,'r')

resim açıklamasını buraya girin


Öneriniz için teşekkürler, araştıracağım. Grafiğinizden, örneğinizden çok daha yüksek bir düzgünleştirici faktörüne ihtiyacım var gibi görünüyor. X = 700 civarındaki dik kenar kaldırılmaz ve açıkça görülebilir. Ayrıca x = [0, 400] içindeki ilk yumru hiç kaldırılmaz. Bunun diğer (düşük geçiş filtresi + aşağı hareket) yaklaşımlarıyla aynı soruna sahip olacağını düşünmüyor musunuz? Daha yüksek bir smoothingFactor kullandığımda muhtemelen artacağı iki grafik arasındaki küresel farkı görebilirsiniz.
Pieter-Jan Busschaert

@ Pieter-JanBusschaert: Ah, ilk zirvenin sizin için bir şekilde yararlı olduğunu düşündüm. Her neyse, tüm düşük geçişli filtre + aşağı hareketi ~ 650'deki dik yükselişte zorluk çekecektir: Bu kısmı daha düz hale getirecekler ve bu nedenle eğri çok aşağı doğru hareket ettirilmelidir. Medyan Filtresi ve ardından düzgünleştirme spline biraz yardımcı olur.
Jonas
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.