Страницы

Поиск по вопросам

воскресенье, 16 февраля 2020 г.

Распознавание символов и работа с изображенями

#c_sharp #изображения #нейронные_сети


Имеется нейронная сеть, способная распознавать символы. При загрузке рисунка из Paint
размеров 150 на 150 всё работает нормально.Фон здесь белый, буква нарисована чёрным цветом.



При загрузке картинки ( также 150 на 150) с прозрачным фоном программа работает "наоборот"

Для удобства понимания вывел цвета пикселей( во втором случае первый пиксель, который
является прозрачным, почему-то распознаётся как чёрный, а чёрный соответственно не
является почему-то чёрным).

Первая и вторая картинка имеет одинаковый формат .png

Каким образом можно настроить программу для работы с изображением на прозрачном фоне?

Метод считывания картинки

public void get(Bitmap map) 
    {
        for (int x = 0; x < mbut.GetLength(0); x++)
        {
            for (int y = 0; y < mbut.GetLength(1); y++)
            {
                Color col = map.GetPixel(x, y);
                if (col.R == 0 && col.B == 0 && col.G == 0)
                    mbut[x, y] = true;
                else label9.Text = "Цвет пикселя номер " + x + ":" + y+" "+ Convert.ToString(map.GetPixel(x, y));
            }
        }     
        label10.Text = "Цвет первого пикселя: " + Convert.ToString(map.GetPixel(0, 0));
    }


Метод прорисовки весов

 public void draw(int n)
    {
        using (Bitmap map = new Bitmap(150, 150))
        {
            for (int x = 0; x < weight.GetLength(0); x++)
            {
                for (int y = 0; y < weight.GetLength(1); y++)
                {
                    if (weight[x, y] > 1)
                    {                            
                        map.SetPixel(x, y, Color.Black);
                    }         
                }
            }
            map.Save(String.Format("Pictures/{0}.png",n), System.Drawing.Imaging.ImageFormat.Png);
        }
    }

    


Ответы

Ответ 1



Предполагаю что проблема в работе с каналами цветного изображения в цветовой схеме ARGB. Когда Paint сохраняет изображение, он приводит её к RGB и проблем не возникает. При других редакторах цветовая схема остается ARGB. Вот какая складывается ситуация: Вы берете цветовой схемы, в первом случае это RGB, и по каналу R определяете черный это или не черный. В итоге инициализация проходит успешно. Во втором случае с схемой ARGB, в которой изображение имеет прозрачность, первым каналом является A - alpha(оно-же прозрачность) вы пытаетесь по прозрачным цветам определить черный и сталкиваетесь с ситуацией когда все пиксели которые прозрачны - получают черный цвет а те которые не прозрачны остаются белыми. В этом и кроется секрет вашей хитроумной инверсии :)

Ответ 2



if (col.R == 0 && col.B == 0 && col.G == 0) Не хватает проверки && col.A != 0. Видимо, paint сохранил прозрачный фон всеми ноликами.

Комментариев нет:

Отправить комментарий