Как преобразовать растровые изображения в «матрицы», которые могут быть обработаны в C ++ (ANN)? - PullRequest
0 голосов
/ 04 января 2012

Я хочу передать свои извлеченные битовые карты символов (файлы .bmp) в некие матрицы, которые можно обрабатывать в C ++ и затем передавать в искусственную нейронную сеть, например, сеть будет принимать 72 входа - каждое из которых представляет собой пиксельбинаризованное изображение размеров 6 x 12.

Например: у меня есть бинаризованное растровое изображение размером, скажем, 40 x 80. Я хочу сделать из него структуру, которая будет иметь размеры 6 x 12 и состоять измоего масштабированного растрового изображения.Поэтому мне нужна библиотека растровых изображений, которая позволила бы мне масштабировать BMP, а затем передавать их в ANN.(Как уже говорили некоторые из вас, они уже будут храниться в виде матрицы такого рода, поэтому никаких преобразований не потребуется)

Что я могу использовать здесь?

Ответы [ 3 ]

2 голосов
/ 04 января 2012

Кажется, что любая библиотека обработки изображений может удовлетворить ваши потребности. Поэтому мой совет - использовать библиотеку, максимально простую для интеграции в процесс сборки. В этом контексте библиотека CImg чрезвычайно проста для нас, поскольку она состоит из простого файла .h.

Что касается вашей потребности, возможная реализация будет

#include "CImg.h"
using namespace cimg_library;

int main(int argc,char **argv) 
{
  CImg<unsigned char> image("img/logo.bmp");

  //Simple resize with nearest neighbour interpolation
  //image = image.resize(64, 64); 

  //If you want to specify the interpolation type
  image = image.resize(64, 64, -100, -100, 4);//The last param specifies the interpolation type 
  //\param interpolation_type Method of interpolation :
  //   -1 = no interpolation : raw memory resizing.
  //  - 0 = no interpolation : additional space is filled according to \p border_condition.
  //  - 1 = nearest-neighbor interpolation.
  //  - 2 = moving average interpolation.
  //  - 3 = linear interpolation.
  //  - 4 = grid interpolation.
  //  - 5 = bicubic interpolation.
  //  - 6 = lanczos interpolation.

  CImgDisplay main_disp(image,"Image resized");

  //This last part of code is not usfeul for you, it is only used to display the resized image
  while (!main_disp.is_closed() ) 
    main_disp.wait();
  return 0;
}
0 голосов
/ 04 января 2012

Используйте какой-нибудь bmp lib для доступа к данным (зависит от платформы). Обычно это дает вам bmp как плоский массив. Возьмите этот плоский массив и вставьте каждое значение в матричную структуру или передайте его непосредственно в код NN. Не могу предложить вам намного больше без этой информации.

0 голосов
/ 04 января 2012

Формат файла растрового изображения (см. спецификации ) уже хранит растровые изображения в виде матрицы или, точнее, массива пикселей, который может быть разделен на двумерный массив по строке (или столбцу, но незначения).

Таким образом, вам просто нужно прочитать заголовок и получить размер изображения, а затем прочитать данные в массивах упакованных struct (без заполнения, как объяснено здесь ).

Таким образом, вы получите свою матрицу, затем сможете обернуть ее в классе для хранения атрибутов ширины и высоты или даже передать массивы конструктору матриц личного вкуса.

...