ফেলজেনসওয়াল্ড এবং হটেনলোচারের কাগজ অনুসারে 1D স্কোয়ার্ড ইউক্লিডিয়ান দূরত্বের রূপান্তরের জন্য একটি সি # কোড এখানে রয়েছে :
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]]);
}
}
এটি বাইনারি এবং গ্রেস্কেল চিত্রগুলির জন্য প্রথমে চিত্র কলামগুলিতে প্রয়োগ করে এবং তারপরে সারিগুলিতে (বা বিপরীতে অবশ্যই) ব্যবহার করা যেতে পারে।
রূপান্তরটি আসলেই খুব দ্রুত।
উত্স এবং আউটপুট চিত্র এখানে:
কালো পিক্সেলের মান 0 এবং সাদাগুলির কিছু বড় মান রয়েছে (চিত্রগুলিতে সম্ভাব্য বৃহত্তম স্কোয়ার দূরত্বের চেয়ে বড় হতে হবে তবে অনন্ত নয়) যাতে ট্রান্সফর্মটি কালো পিক্সেল থেকে দূরত্বে ফিরে আসে এবং সাদাগুলি বাদ যায়।
সত্য ইউক্লিডিয়ান দূরত্বের রূপান্তর পেতে, আউটপুট চিত্র থেকে প্রতিটি পিক্সেলের একটি বর্গমূল নিন।