W ramach portowania USMSa na Linuxa (na razie tylko pod konsolę) postanowiłem się zmierzyć z wyświetlaniem CAPTCHA z bramki Idei w konsoli. Pierwsze podejście - wyświetlanie całego obrazka - nie było szczególnie dobre w skutkach nawet na terminalu o rozdzielczości 125x43 znaki (dla porównania).
Podejście drugie: spróbowałem znaleźć najpierw sam prostokąt z napisem - już było nieźle, chociaż nadal czytelność pozostawiała nieco do życzenia. Postanowiłem więc podkręcić nieco kontrast, a dokładnie - użyć thresholda. Było już zupełnie nieźle, ale dla mnie nadal za mało :) Następnym krokiem było znalezienie napisu na tym białym tle - teraz już dało się czasem odczytać napis na terminalu 80x24 znaki. Podobierałem trochę stałych, wyglądało to coraz lepiej, jednak był jeden problem - przy zmianie thresholda, często psuło się znajdowanie napisu, a to zdecydowanie nie był dobry objaw. Postanowiłem więc skomplikować wyświetlanie jeszcze bardziej: do znajdowania napisu tworzona jest osobna pixmapa, na którą nakładamy stały i niski threshold, a kiedy już zostanie znaleziony napis - oryginalny obrazek jest przycinany do ram napisu, i dopiero taki obraz kwalifikuje się do wyświetlenia. Powstał tutaj problem odszumienia obrazka - ponieważ niektóre napisy mają bardzo cienkie linie, przy wysokim progu były nieczytelne, a z kolei przy niskim - te grube były mocno zaszumione. Postanowiłem więc zastosować algorytm adaptatywnego znajdowania optymalnego progu, poprzez próbowanie kolejnych wartości i zliczanie stosunku ilości zapalonych pikseli na obrazku do ilości wszystkich. Zadziałało, dorobiłem jeszcze tylko wyświetlanie półtonów w pewnym offsecie wartości od wyliczonego progu, dobrałem ponownie stałe, i oto wynik! (został wygenerowany z tego obrazka). Wygląda dobrze na terminalu wielkości 80x24, nie wymaga dużej ilości odcieni - w zasadzie, mógłby być wyświetlany na terminalu czarno-białym. Co następne, OCR? :)