Я хочу сделать ограничивающую рамку в текстуре.
Эта текстура является результатом сегментации изображения
Я делаю результаты Сегментации в текстуры каждый раз и пытаюсь создать ограничивающую рамку дляэтот процесс
У меня есть специфичные для пикселя значения для текстуры, но каждый раз она меняется случайным образом.
, поэтому я попытался найти значения пикселов с помощью алгоритма BFS.
public Queue<Node> SegNode = new Queue<Node>();
private bool[,] visit = new bool[256, 256];
private int[] dx = new int[4] { 0, 1, -1, 0 };
private int[] dy = new int[4] { 1, 0, 0, -1 };
public struct Node
{
public int x, y;
public float color;
public Node(int x, int y, float color)
{
this.x = x;
this.y = y;
this.color = color;
}
}
void bfs(int r, int c, float color, float[,,,] pixel)
{
Queue<Node> q = new Queue<Node>();
q.Enqueue(new Node(r, c, color));
while (q.Count > 0)
{
Node curNode = q.Dequeue();
SegNode.Enqueue(curNode);
for (int i = 0; i < 4; i++)
{
int tr = curNode.x + dx[i];
int tc = curNode.y + dy[i];
if (tr >= 0 && tr < segmentationImageSize && tc >= 0 && tc < segmentationImageSize)
{
if (!visit[tr, tc] && pixel[0, tc, tr, 0] == color)
{
visit[tr, tc] = true;
q.Enqueue(new Node(tr, tc, color));
}
}
}
}
И я подумал о том, как найти верх и низ.
Но это кажется слишком медленным.
Как мне легко получить ограничивающий прямоугольник?
Я такойиспользование значений результата для сегментации для создания текстуры
Texture2D SegResTexture = new Texture2D(widht, height, );
for (int y = 0; y < SegResTexture.height; y++)
{
for (int x = 0; x < SegResTexture.width; x++)
{
SegResTexture.SetPixel(x, y, pixel[0, y, x, 0] < 0.1 ? maskTransparent : maskColor);
}
}
SegResTexture.Apply();
SegmentationRawIamge.GetComponent<RawImage>().texture = SegResTexture;
То, что я хочу сделать, похоже на рисунок ниже.
Подскажите, как это сделать или на какие сайты ссылаться?