A ja bym dalej skupił się na szukaniu najdłuższych odcinków, mając już Twoją siatkę, znajdziesz "mniej więcej" okrąg i rysujesz na nim kreski, jak tutaj:

Te żółte linie można stopniowo bardziej zagęszczać, w momencie kiedy robią się dłuższe. Dzięki temu, kiedy znajdziesz najdłuższe odcinki, to będą Twoje wyznaczniki środka okręgu.
-- edit
W sumie można jeszcze bardziej optymalnie sprawdzać:
1. Zamiast siatki, sprawdzasz piksele co np. 50px (zakładając, że okrąg jest zawsze większy). Dzięki temu otrzymujesz siatkę w formie kropek, przynajmniej +90% do wydajności. Sprawdzanie odbywa się np. od lewej do prawej i później przeskok do nowego wiersza,
2. W momencie kiedy znajdziesz biały piksel, to rysujesz linię pomocniczą szukając kolejnych białych,
3. Udało się narysować linię pomocniczą, więc idziesz np. 3px w dół i znowu rysujesz linię pomocniczą po białych px, aż do skutku, kierując się tym co napisałem na samej górze,
4. wybierasz kilka najdłuższych lini pomocniczych i rysujesz na nich pionowe, w pobliżu środka,
5. koniec, najdłuższe linie wyznaczą Ci środek i wielkość
Można kombinować i kombinować, ale nie wiem czy javascript tutaj też się nada. Chyba, że nie zależy Ci na szybkości działania, wtedy jak najbardziej javascript i robić odstępy na rysowanie.