मैं एक काले और सफेद छवियों पिक्सल के एक हस्ताक्षरित दूरी क्षेत्र की गणना करने की कोशिश कर रहा हूं, लेकिन मुझे लगता है कि मैंने कहीं भी अपना कोड गलत पाया है। के रूप में यह मेरा इनपुट और आउटपुट है:एक 2 डी हस्ताक्षरित दूरी क्षेत्र कंप्यूटिंग
इनपुट
आउटपुट
मुद्दा मैं आ रही है एस के बीच में काली रेखा है, मेरे समझने के लिए मुझे विश्वास है कि यह पूरी तरह से हल्का भूरा होना चाहिए?
for (int x = 0; x < source.width; ++x)
{
for(int y = 0; y < source.height; ++y)
{
// Get pixel
float a = source.GetPixel(x, y).r;
// Distance to closest pixel which is the inverse of a
// start on float.MaxValue so we can be sure we found something
float distance = float.MaxValue;
// Search coordinates, x min/max and y min/max
int fxMin = Math.Max(x - searchDistance, 0);
int fxMax = Math.Min(x + searchDistance, source.width);
int fyMin = Math.Max(y - searchDistance, 0);
int fyMax = Math.Min(y + searchDistance, source.height);
for (int fx = fxMin; fx < fxMax; ++fx)
{
for (int fy = fyMin; fy < fyMax; ++fy)
{
// Get pixel to compare to
float p = source.GetPixel(fx, fy).r;
// If not equal a
if (a != p)
{
// Calculate distance
float xd = x - fx;
float yd = y - fy;
float d = Math.Sqrt((xd * xd) + (yd * yd));
// Compare absolute distance values, and if smaller replace distnace with the new oe
if (Math.Abs(d) < Math.Abs(distance))
{
distance = d;
}
}
}
}
// If we found a new distance, otherwise we'll just use A
if (distance != float.MaxValue)
{
// Clamp distance to -/+
distance = Math.Clamp(distance, -searchDistance, +searchDistance);
// Convert from -search,+search to 0,+search*2 and then convert to 0.0, 1.0 and invert
a = 1f - Math.Clamp((distance + searchDistance)/(searchDistance + searchDistance), 0, 1);
}
// Write pixel out
target.SetPixel(x, y, new Color(a, a, a, 1));
}
}