2013-03-28 30 views
5

Tworzę aplikację do wykrywania skóry.Zrobić coś podobnego do Auto Tone Photoshopa z Aforge.net lub C#

Ale jest problem z moim aparatem, który próbuje skompensować światło, a obraz wynikowy jest zły, w większości przypadków mam zimny lub ciepły efekt na zdjęciu. Podczas korzystania z programu Photoshop dostępna jest funkcja AutoTone, która normalizuje obraz i zmniejsza ten problem.

Image

Image after Photoshop AutoTone

Z aforge chcę używać wyrównanie histogramu() Filtr, ale wynik jest bardzo zły:

Image after HistogramEqualization

// create filter 
HistogramEqualization filter = new HistogramEqualization(); 
// process image 
filter.ApplyInPlace(sourceImage); 

Więc moje pytanie brzmi: Nie jest funkcją w Accord lub Aforge, aby uzyskać taki sam wynik autotone w Photoshopie? Jeśli nie, jest jakaś biblioteka lub skrypt, które pozwalają to zrobić?

Dziękuję wszystkim.

Odpowiedz

3

używam filtra LevelsLinear i oprzeć go na statystykach graficznych:

ImageStatistics stats = new ImageStatistics(sourceImage); 
LevelsLinear levelsLinear = new LevelsLinear { 
    InRed = stats.Red.GetRange(0.90), 
    InGreen = stats.Green.GetRange(0.90), 
    InBlue = stats.Blue.GetRange(0.90) 
}; 

levelsLinear.ApplyInPlace(sourceImage); 

Możesz grać z zakresu dostosować wynik.

+0

Wow, ta normalizacja jest idealna! Dziękuję bardzo. – Univers3

1

Prawdopodobnie nie chcesz wyrównywać histogramu, ponieważ, jak widać, zdjęcie, które normalnie nie miałoby zbyt dużo czerwieni, spowodowałoby powstanie wielu czerwonych i sprawiało, że wyglądałyby paskudnie. Zamiast tego prawdopodobnie chcesz sprawdzić odchylenie do odcienia występującego niemal wszędzie. Na przykład twoje oryginalne zdjęcie prawdopodobnie miało tendencję do niebieskiego w prawie każdym pikselu, a więc prawdopodobnie nie powinno tam być. Poszukaj minimalnego błędu i usuń tę kwotę wszędzie.

Bardziej praktycznym rozwiązaniem jest eksperymentowanie z ustawieniem balansu bieli w aparacie, aby zobaczyć, co daje najlepszy efekt. Wybierając właściwe ustawienie, wykorzystasz algorytm, który jest prawdopodobnie tak dobry, jak to, co napiszesz ręcznie. Ale może robisz to jako doświadczenie uczenia się.

+0

To był przykład, ale mój program został stworzony dla kamer internetowych, które nie mają zbyt wielu ustawień. Potrzebuję czegoś w C#. – Univers3