W trakcie wymiany stosów TeX rozmawialiśmy o tym, jak wykryć „rzeki” w akapitach tego pytania .
W tym kontekście rzeki to pasma białych znaków, które powstają w wyniku przypadkowego wyrównania odstępów międzytekstowych w tekście. Ponieważ może to być dość rozpraszające dla czytelnika, złe rzeki są uważane za objaw złej typografii. Przykładem tekstu z rzekami jest ta, w której dwie rzeki płyną po przekątnej.
Istnieje zainteresowanie automatycznym wykrywaniem rzek, aby można było ich uniknąć (prawdopodobnie poprzez ręczną edycję tekstu). Raphink robi pewne postępy na poziomie TeX (który zna tylko pozycje glifów i ramki ograniczające), ale jestem przekonany, że najlepszym sposobem na wykrycie rzek jest trochę przetwarzania obrazu (ponieważ kształty glifów są bardzo ważne i niedostępne dla TeXa) . Próbowałem różnych sposobów na wydobycie rzek z powyższego obrazu, ale mój prosty pomysł zastosowania niewielkiej ilości elipsoidalnego rozmycia nie wydaje się wystarczający. Spróbowałem też RadonaFiltrowanie oparte na transformacji Hougha, ale z nimi też nie dotarłem. Rzeki są bardzo widoczne dla obwodów detekcji ludzkiego oka / siatkówki / mózgu i jakoś sądzę, że można to przełożyć na jakąś operację filtrowania, ale nie jestem w stanie sprawić, by działała. Jakieś pomysły?
Mówiąc ściślej, szukam operacji, która wykryje 2 rzeki na powyższym obrazie, ale nie wykryje zbyt wielu innych fałszywych alarmów.
EDYCJA: endolith zapytał, dlaczego stosuję podejście oparte na przetwarzaniu obrazu, biorąc pod uwagę, że w TeXie mamy dostęp do pozycji glifów, odstępów itp. I może być znacznie szybsze i bardziej niezawodne użycie algorytmu, który bada rzeczywisty tekst. Moim powodem robienia rzeczy w inny sposób jest kształtglifów może wpływać na to, jak zauważalna jest rzeka, a na poziomie tekstu bardzo trudno jest wziąć pod uwagę ten kształt (który zależy od czcionki, ligaturacji itp.). Na przykład, w jaki sposób kształt glifów może być ważny, rozważ dwa następujące przykłady, w których różnica między nimi polega na tym, że zamieniłem kilka glifów na inne o prawie takiej samej szerokości, aby analiza tekstowa rozważyła są równie dobre / złe. Należy jednak pamiętać, że rzeki w pierwszym przykładzie są znacznie gorsze niż w drugim.
ImageLines[]
z Mathematica, z pewnym przetwarzaniem wstępnym i bez niego. Myślę, że technicznie używa się transformacji Hougha zamiast Radona. Nie zdziwię się, jeśli poprawne przetwarzanie wstępne (nie próbowałem sugerowanego przez filtr danych filtru dylatacyjnego) i / lub ustawienia parametrów mogą zadziałać.