यहाँ -1 डी के लिए एक सी # कोड चुकता इयूक्लिडियन दूरी के अनुसार बदलना है 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]]);
}
}
इसे बाइनरी और ग्रेस्केल छवियों के लिए आसानी से उपयोग किया जा सकता है, इसे पहले छवि कॉलम और फिर पंक्तियों (या इसके विपरीत,) पर लागू करके।
परिवर्तन वास्तव में बहुत तेज है।
यहाँ स्रोत और आउटपुट चित्र हैं:
काले पिक्सेल का मान 0 होता है और सफेद का कुछ बड़ा मूल्य होता है (चित्रों में सबसे बड़ी संभव चौकोर दूरी से बड़ा होता है, लेकिन अनन्तता नहीं) ताकि रूपांतरण काले पिक्सेल से दूरी तय कर ले और सफेद रंग का हो।
सही यूक्लिडियन दूरी परिवर्तन प्राप्त करने के लिए, बस आउटपुट छवि से प्रत्येक पिक्सेल का एक वर्गमूल लें।