STMedianFilter(int S_FilterThreshHold, int S_EdgeThreshHold, int T_FilterThreshHold, int T_MotionThreshHold) |
autor: Tom Barry |
S_FilterThreshHold: nie przestrzenne filtrowanie piksela;
sugerowana wartość 8
S_EdgeThreshHold: nie przestrzenne filtrowanie piksela jeśli na krawędzi
wartości zmieniają się bardziej niż na pikselu; sugerowana wartość 15
T_FilterThreshHold: nie czasowe filtrowanie piksela. Wartości
powyżej 10 i poniżej 5 powodują tzw. efekt duchów; sugerowana wartość 4
T_MotionThreshHold: nie czasowe filtrowanie piksela z uwzględnieniem
ruchu. Wartości powyżej 10 i poniżej 5 powodują tzw. efekt duchów;
sugerowana wartość 7
Jest to prosty średnio-zaawansowany filtr, który jest właściwie wycinkiem
kodu, w którym wartość jest ustawiana by nie powiększyć pikseli znajdujących
się powyżej i poniżej bieżącego piksela. Na przykład, jeśli miałeś trzy
piksele z rzędu, które miały wartości <5,8,7> mogłeś usunąć centralny
piksel, by nie wybrano niższej wartości niż 5 ani wyższej niż 7, więc
przyjęto wartość 7.
Teraz wyobraź sobie, że masz mały ekran video 3x3 piksele, taki jak jedna powierzchnia kostki
Rubik'u. Wyobraź sobie poprzednią klatkę, która jest na dolnej warstwie, bieżąca
klatkę, która jest na środkowej warstwie oraz następną klatkę, która jest
na górnej warstwie kostki. Czyli bieżący, centralny piksel będzie w środku kostki
Rubik'u i jest teraz 13 sposobów by nakreślić linie przechodzącą przez nią
i przez dwie pobliskie klatki (poprzednia i następna). Co zrobiłem by porównać każdą z tamtych pary
klatek, by zobaczyć która para była najbardziej zgadzającą się wartością.
Ustaliłem, żeby para pikseli usuwała wartość środkowego piksela. Również
usunąłem wartość piksela jeśli obydwa:
- nie zmienią wartości piksela więcej niż wartość FilterThreshold
- suma ich wartości była niższa niż wartość MotionThreshHold