Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2012, 15:43   #1
andrejf92
Пользователь
 
Регистрация: 16.11.2012
Сообщений: 20
По умолчанию Как загрузить изображение в нейросеть?

Как преобразовать изображение в адекватный вектор входных данных?
Хотя бы в общих словах, пожалуйста!!!
andrejf92 вне форума Ответить с цитированием
Старый 22.11.2012, 15:50   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Если у нас есть изображение в градациях серого, размера, скажем, 8х8, то каждому пикселю соответствует число от 0 (чёрный) до 1 (белый). 64 нейрона на входе решают проблему.
Если изображение цветное, то, в зависимости от задачи, его следует или сделать чёрно-белым, или разложить по каналам (скажем, в цветовом пространстве RGB каждому пикселю соответствует сочетание интенсивностей трёх цветов - красного, зелёного и синего). Во втором случае количество входных нейронов, соответственно, утраивается.
Abstraction вне форума Ответить с цитированием
Старый 22.11.2012, 16:03   #3
andrejf92
Пользователь
 
Регистрация: 16.11.2012
Сообщений: 20
По умолчанию

Я взял белый квадрат 10х10 пикселей в bmp формате.
Записал каждый байт hex числами в текстовый файл.
В заголовках указано с какого байта начинается растр.

Но как получить саму матрицу начиная с указанного байта?
Цитата:
Заголовок файла
0x42 0x4d
0x66 0x0 0x0 0x0
0x0 0x0
0x0 0x0
0x3e 0x0 0x0 0x0
Заголовок BITMAP (Информация об изображении)
0x28 0x0 0x0 0x0
0xa 0x0 0x0 0x0
0xa 0x0 0x0 0x0
0x1 0x0
0x1 0x0
0x0 0x0 0x0 0x0
0x28 0x0 0x0 0x0
0x0 0x0 0x0 0x0
0x0 0x0 0x0 0x0
0x0 0x0 0x0 0x0
0x0 0x0 0x0 0x0
Палитра (Карта цветов для N цветов), если используется
0x0 0x0 0x0 0x0
0xffffffff
0xffffffff 0xffffffff 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0xffffffff
0xffffffc0 0x0 0x0 0x0
andrejf92 вне форума Ответить с цитированием
Старый 22.11.2012, 16:10   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

То есть, задача всё-таки называется - "как прочитать .bmp-файл"? Вроде есть распространённые библиотеки, но по смыслу - из заголовка читаете размер матрицы, начало матрицы и количество бит на пиксель. Если формат беспалитровый (а в последнее время они обычно такие), просто переходите на начало матрицы и читаете в память пиксели блоками нужного размера. Сохраняете в массив пикселей размера (ширина Х высота).
Abstraction вне форума Ответить с цитированием
Старый 22.11.2012, 20:18   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А зачем загонять в текстовый файл я не понял?
waleri вне форума Ответить с цитированием
Старый 23.11.2012, 12:36   #6
andrejf92
Пользователь
 
Регистрация: 16.11.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А зачем загонять в текстовый файл я не понял?
Хотел разобраться как именно записаны пиксели, что бы потом в массив загнать, для создания адекватного вектора входных данных.
andrejf92 вне форума Ответить с цитированием
Старый 05.02.2017, 17:21   #7
Михаил22042016
Пользователь
 
Регистрация: 21.04.2016
Сообщений: 54
По умолчанию как вариант

лучше поздно чем никогда
Код:
type 
  TArrayOfreal  =  Array of real;
  PixelRGB = packed record b,g,r: byte; end;
  tXarray = array[0..0] of PixelRGB;
  Xarray = ^tXarray;
  YXarray = array of Xarray; 

function BMtoVektor(inBM: TBitmap):TArrayOfreal;
var y,x : Integer;  Skan:YXarray;
begin
  SetLength(Result,inBM.Height*inBM.Width);
  inBM.PixelFormat:=pf24bit;
  SetLength(Skan,inBM.Height);
    //  перебор пикселей по Y
    for y := 0 to inBM.Height-1 do  //  перебор пикселей по Y
    begin
      Skan[y]:= inBM.ScanLine[y];
      for x := 0 to inBM.Width-1 do begin // перебор пикселей по X Col:=Skan[y,x].r;
        if Skan[y,x].r < 128 then begin
        Result[(inBM.Width*y)+x]:= 0.1;
        if Form1.chk1.Checked then
         TXT.CommaText:=TXT.CommaText+('1');
        end else begin
        Result[(inBM.Width*y)+x]:= 0;
        if Form1.chk1.Checked then
        TXT.CommaText:=TXT.CommaText+('0');
        end;
      end;
      if Form1.chk1.Checked then
      TXT.Text:=TXT.Text+#13#10;
    end;
end;

var TXT:TStringList; для визуализации, после получения вектора его можно увидеть в MEMO
mmo1.Text:=TXT.Text;
так можно

Последний раз редактировалось Михаил22042016; 05.02.2017 в 17:28.
Михаил22042016 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нейросеть. Обратное распространение ошибки NovGosh Помощь студентам 0 06.06.2012 17:58
Как прочитать и загрузить в paintBox изображение? NickForm Мультимедиа в Delphi 4 05.12.2011 12:31
Загрузить изображение zont_11 Microsoft Office Excel 3 15.02.2011 12:24
Загрузить изображение и текст larin1974 Помощь студентам 2 21.12.2009 17:17
Как загрузить .txt? TwiX Общие вопросы Delphi 6 01.08.2009 01:47