Создать ограничительную рамку в текстуре в Unity - PullRequest
2 голосов
/ 21 марта 2019

Я хочу сделать ограничивающую рамку в текстуре.

Эта текстура является результатом сегментации изображения

Я делаю результаты Сегментации в текстуры каждый раз и пытаюсь создать ограничивающую рамку дляэтот процесс

У меня есть специфичные для пикселя значения для текстуры, но каждый раз она меняется случайным образом.

, поэтому я попытался найти значения пикселов с помощью алгоритма 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;

То, что я хочу сделать, похоже на рисунок ниже.

enter image description here

enter image description here Подскажите, как это сделать или на какие сайты ссылаться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...