Moja odpowiedź sposoby ponownego większość kodu w odpowiedzi @ lostsource, ale używa innej metody, aby rozróżnić ciemne i jasne obrazy.
Najpierw musimy (krótko) przeanalizować, jaki jest wynik średniej wartości sumy kanałów RGB. Dla ludzi jest bez znaczenia. Czy różowy jest jaśniejszy niż zielony? Np. Dlaczego chcesz (0, 255, 0) podać niższą wartość jasności niż (255, 0, 255)? Czy jasność mid gray (128, 128, 128) jest podobna do środkowej zieleni (128, 255, 0)? Aby wziąć to pod uwagę, zajmuję się tylko jasnością kolorów kanału, tak jak to się dzieje w przestrzeni kolorów HSV. Jest to po prostu maksymalna wartość danego tripletu RGB.
Reszta to heurystyka. Niech max_rgb = max(RGB_i)
dla pewnego punktu i
. Jeśli max_rgb
jest mniejszy niż 128 (przy założeniu obrazu 8bpp), to znaleźliśmy nowy punkt i
, który jest ciemny, w przeciwnym razie jest jasny. Robiąc to dla każdego punktu i
, otrzymujemy A
punktów, które są lekkie i B
punktów, które są ciemne. Jeśli (A - B)/(A + B) >= 0
to mówimy, że obraz jest lekki. Zauważ, że jeśli każdy punkt jest ciemny, otrzymasz wartość -1, i odwrotnie, jeśli każdy punkt jest jasny, otrzymasz +1. Poprzednia formuła może zostać zmodyfikowana, abyś mógł akceptować obrazy ledwo ciemne. W kodzie nazwałem zmienną jako fuzzy
, ale nie odpowiada ona polu fuzzy
w przetwarzaniu obrazu. Tak więc, mówimy, że obraz jest jasny, jeśli (A - B)/(A + B) + fuzzy >= 0
.
Kod jest pod http://jsfiddle.net/s7Wx2/7/, jest bardzo prosty, nie pozwól, aby moje notatki cię przestraszyły.
Jedynym sposobem na to jest użycie html