Materi
Thresholding mengubah citra abu-abu menjadi citra biner: setiap piksel hanya True atau False. Dengan ambang tetap t, perbandingan citra > t atau citra < t langsung menghasilkan larik bool berbentuk sama. Arah perbandingan bergantung pada objeknya: tinta gelap di kertas terang memakai <, koin terang di meja gelap memakai >. Hasilnya dipakai sebagai topeng, dan banyak piksel objek cukup dihitung dengan .sum().
Ambang tetap gagal bila pencahayaan berubah. Metode Otsu memilih ambang dari histogram citra itu sendiri. Contoh thresholding di scikit-image menjelaskan bahwa Otsu mencari ambang yang memaksimalkan varians antara dua kelas piksel yang dipisahkan ambang itu, yang setara dengan meminimalkan varians di dalam kelas. Untuk ambang t, varians antarkelas = w0 × w1 × (μ0 − μ1)², dengan w0 dan w1 proporsi piksel di kelas gelap dan terang, serta μ0 dan μ1 rata-rata tiap kelas. Mencoba setiap t dari 1 sampai 255 lalu mengambil yang terbesar sudah merupakan algoritme Otsu.
Otsu bekerja paling baik bila histogram berpunuk dua (bimodal): satu punuk objek, satu punuk latar. Di scikit-image fungsinya skimage.filters.threshold_otsu; di kelas ini ditulis sendiri.
import numpy as np
v = np.array([10, 20, 200, 230], dtype=float)
t = 100
gelap, terang = v[v < t], v[v >= t]
w0, w1 = len(gelap) / len(v), len(terang) / len(v)
print(w0 * w1 * (gelap.mean() - terang.mean()) ** 2) # 10000.0