Berikut ini adalah kode C # untuk transformasi jarak euclidean kuadrat 1D menurut makalah Felzenszwald & Huttenlocher :
private static void DistanceTransform(double[] dataInput, ref double[] dataOutput)
{
int n = dataInput.Length;
int k = 0;
int[] v = new int[n];
double[] z = new double[n + 1];
v[0] = 0;
z[0] = Double.NegativeInfinity;
z[1] = Double.PositiveInfinity;
double s;
for (int q = 1; q < n; q++)
{
while (true)
{
s = (((dataInput[q] + q * q) - (dataInput[v[k]] + v[k] * v[k])) / (2.0 * q - 2.0 * v[k]));
if (s <= z[k])
{
k--;
}
else
{
break;
}
}
k++;
v[k] = q;
z[k] = s;
z[k + 1] = Double.PositiveInfinity;
}
k = 0;
for (int q = 0; q < n; q++)
{
while (z[k + 1] < q)
{
k++;
}
dataOutput[q] = ((q - v[k]) * (q - v[k]) + dataInput[v[k]]);
}
}
Ini dapat dengan mudah digunakan untuk gambar biner dan skala abu-abu dengan menerapkannya terlebih dahulu pada kolom gambar dan kemudian baris (atau sebaliknya, tentu saja).
Transformasinya memang sangat cepat.
Berikut adalah gambar sumber dan keluaran:
Piksel hitam memiliki nilai 0 dan putih memiliki beberapa nilai besar (harus lebih besar dari jarak kuadrat terbesar yang mungkin dalam gambar tetapi tidak terbatas) sehingga transformasi mengembalikan jarak dari piksel hitam dan yang putih dihilangkan.
Untuk mendapatkan transformasi jarak euclidean yang sebenarnya, cukup ambil akar kuadrat dari setiap piksel dari gambar output.