2012-07-02 34 views
5

Próbuję wykryć tekst z obrazu wejściowego przy użyciu openCV. W tym celu muszę usunąć komponenty szumów z obrazu. Kryteriami dla tego, co używam jest to, że jeśli liczba pikseli danego komponentu jest mniejsza niż 15 rano, eliminując ten konkretny składnik.Usuwanie hałaśliwych pikseli za pomocą opencv

przykład załóżmy, że niżej podane obrazy są dostarczane jako I/P do funkcji: input image 1

Input image 2

Jak widać, oba obrazy zawierają dużo niechcianych hałaśliwych pikseli, specjalnie pierwszy jeden.

Więc jeśli ktokolwiek może zaproponować wykonalny sposób osiągnięcia tego, byłby bardzo ceniony.

+0

Tekst wygląda również jak hałas. Zobacz "Nauka z danych" na pierwszym obrazie. –

+0

tak, wiem. To, że "Uczenie się od danych" w rzeczywistości nie jest również wymagane. To tylko kolor obramowania zewnętrznego. W późniejszych etapach można uzyskać pełny kolor "Uczenie się z danych". Na razie ten konkretny fragment tekstu można również uznać za hałas. W rzeczywistości na pierwszym obrazie wszystko musi zostać usunięte. W drugim przypadku poziome "Uczenie się z danych" jest użyteczne i odpowiada naszym wymaganiom. – Koustav

+0

erozja lub dylatacja, otwieranie, zamykanie? czy próbowałeś któregoś z nich? –

Odpowiedz

2

Ok, przepraszam, ale to nie jest w c i jego nieużywania opencv, jednak jestem pewien, że oznakowanie musi być możliwe w opencv, po prostu nie mam go stosować jeszcze ... więc to może pomóc ... zasadniczo chodzi o to:

  1. znalezienia i oznakować wszystkie oddzielne plamy na obrazie
  2. Usuń wszystkie plamy, które wykraczają poza pewne ograniczenia (wielkość, kształt)

Here i zaimplementować to w python nas ing scipy, ale tylko dla rozmiaru (nie kształt, choć jest to łatwe i pozbyłoby się długich cienkich linii na pierwszym obrazku poniżej). Aby to działało, musimy znać akceptowalny zakres rozmiarów liter - jednak możesz to określić po etykietowaniu, patrząc na średni rozmiar plamki. Możesz nadal otrzymywać fałszywe alarmy o wielkości liter - ale te mogą zostać usunięte przez obserwację, że są wypadają poza pewien obszar skoncentrowanych plamek (jako że tekst jest przestrzennie regularny) ... Również minimalna długość zdania może być silnym ograniczeniem.

Tak czy inaczej, kod:

import scipy 
from scipy import ndimage 

im = scipy.misc.imread('learning2.png',flatten=1) 
#threshold image, so its binary, then invert (`label` needs this): 
im[im>100]=255 
im[im<=100]=0 
im = 255 - im 
#label the image: 
blobs, number_of_blobs = ndimage.label(im) 
#remove all labelled blobs that are outside of our size constraints: 
for i in xrange(number_of_blobs): 
    if blobs[blobs==i].size < 40 or blobs[blobs==i].size>150: 
     im[blobs==i] = 0 
scipy.misc.imsave('out.png', im) 

Wyniki:

enter image description here enter image description here

Powiązane problemy