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

ВНИМАНИЕ! БЛОГ ПЕРЕЕХАЛ ПО АДРЕСУ
RECOG.RU

2 Ноябрь 2010

ImagePak Версия 1.1

написано в рубрике: ImagePak — Кручинин Александр @ 1:23 ПП

Новая версия библиотеки

http://imagepak.vidikon.com/?Lang=ru

Скачать 524 KB:

http://vidikon.com/download/imagepak11.zip

10 Август 2010

ImagePak: использование для распознавания текста

написано в рубрике: ImagePak — Кручинин Александр @ 5:11 ПП

Функции библиотеки можно использовать для распознавания текста следующим образом. Пусть имеется цифра (или буква алфавита).

ImagePak3_1 

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

 

#include “imagepak.h”

 

int main(int argc, char* argv[])

{

      IMG Img;

      //открываем файл

      Img=OpenGraphFile(”Img1.bmp”);

 

      IMG Img8=Img24To8(Img);

 

      //Переводим в монохром

      RECT Rect;

      Rect.left=0;

      Rect.top=0;

      Rect.bottom=Img8.Height-1;

      Rect.right=Img8.Width-1;

 

      ThresholdImage(Img8,128,Rect);

 

      //Выделяем границы

 

      AllocationBordersRect(Img8,Rect,ALLOCATE_WHITE);

 

      //Ищем контуры

      CONTOUR Contour;

      Contour.Find(Img8,Rect,128,CONTOUR_AUTO_INOUT);           

      int all=Contour.ReturnAllContours();

 

      int i,j,k;

      if (all>0)

      {          

            Contour.ReturnMaxLevel(i,j,k);

            //Для этого контура смотрим границы в которых он находится и определяем сетку

            //Схитрим, т.к. знаем что цифра вертикальна

            RECT Rect1=Contour.ReturnRectContour(j);

            //Выводим контур на экран

            DrawRect(Img,Rect1,0,255,0);

            //Создаём объект сетки

            GRID Grid(7,7);//Выбрали сетку 7 на 7

            FOUR_FIG_Pd pp;//Заданный прямоугольник

            pp.p[0].x=Rect1.left;

            pp.p[0].y=Rect1.top;

            pp.p[1].x=Rect1.right;

            pp.p[1].y=Rect1.bottom;

            pp.p[2].x=Rect1.right;

            pp.p[2].y=Rect1.top;

            pp.p[3].x=Rect1.left;

            pp.p[3].y=Rect1.bottom;

            //Создание сетки

            Grid.CreateGrid(pp);

            //Распознавание ячеек

            Grid.RecogCells(Img8

#ifdef ON_DEBUG

      ,Img

#endif

                                   );

 

 

      }

 

      SaveDF(”Img_out.bmp”,Img);

 

      //Ищем контуры

 

      DeleteByte(Img.bytes);

      DeleteByte(Img8.bytes);

 

      return 0;

}

 

Заметьте, что для вывода на экран сетки необходимо откомпилировать всю библиотеку в режиме ON_DEBUG. В этом случае можно посмотреть результат:

ImagePak3_2

1 Август 2010

ImagePak: пример уточнения пунктирной линии

написано в рубрике: ImagePak — Кручинин Александр @ 2:10 ПП

Пусть есть пунктирная линия на изображении:

ImagePak2_1 

Для того, чтобы найти пунктирную линию необходимо примерно знать, где она находится (это обычно возможно). Пусть у нас известна точка на пунктирной линии, проведём через неё горизонтальную линию, а потом уточним (см. листинг):

 

#include “imagepak.h”

 

int main(int argc, char* argv[])

{

      IMG Img;

      Img=OpenGraphFile(”Image1.bmp”);

 

      RECT Rect;

      Rect.left=0;

      Rect.top=0;

      Rect.bottom=Img.Height-1;

      Rect.right=Img.Width-1;

 

      ThresholdImage(Img,128,Rect);

 

      IMG image8=Img24To8(Img);

 

      //Делаем линию для теста и выводим её на изображении

      F_LINE Line=MakeLine(295,268,300,268);

 

      DrawLine(Img,Line,255,0,0);

      SaveDF(”Img1.bmp”,Img);

 

      C_POINTd Point;//Точка, лежащая на пунктире и на LIne

      Point.x=289;

      Point.y=268;

 

      //Уточнение линнии

      F_LINE Line1=AccuracyLine(image8,Line,Point,(double)PI/2,40,50);

 

      DrawLine(Img,Line1,0,255,0);

      SaveDF(”Img2.bmp”,Img);

 

 

      DeleteByte(Img.bytes);

      DeleteByte(image8.bytes);

      return 0;

}

 

Сначала проводим линию:

 ImagePak2_2

А затем уточняем её:

 

ImagePak2_3

Всё просто. Точность варьируется шагом (если бы мы поставили параметр не 40, а 100 в AccuracyLine, то линия была бы точнее).

29 Июль 2010

ImagePak: примеры использования различных способов получения монохромного изображения

написано в рубрике: ImagePak — Кручинин Александр @ 7:59 ПП

Тестовое изображение:

ImagePak1_1 

Использование простой функции перевода в монохромное изображение:

#include “imagepak.h”

 

int main(int argc, char* argv[])

{

            IMG Img;

            Img=OpenGraphFile(”Image.jpg”);

           

 

            RECT Rect;

            Rect.left=0;

            Rect.top=0;

            Rect.bottom=Img.Height-1;

            Rect.right=Img.Width-1;

 

            ThresholdImage(Img,128,Rect);

 

            SaveDF(”Image1.bmp”,Img);

 

            DeleteByte(Img.bytes);

            return 0;

}

Результат работы:

ImagePak1_2 

Использование адаптивной функции:

#include “imagepak.h”

 

int main(int argc, char* argv[])

{

            IMG Img;

            Img=OpenGraphFile(”Image.jpg”);

           

 

            RECT Rect;

            Rect.left=0;

            Rect.top=0;

            Rect.bottom=Img.Height-1;

            Rect.right=Img.Width-1;

 

            IMG Img1;     

            Img1=AdaptiveThresholdImage(Img,3,Rect,0);

 

            SaveDF(”Image2.bmp”,Img1);

 

            DeleteByte(Img.bytes);

            DeleteByte(Img1.bytes);

            return 0;

}

Результат:

ImagePak1_3

28 Июль 2010

Библиотека ImagePak

написано в рубрике: ImagePak — Кручинин Александр @ 5:16 ПП

Библиотека предназначена для научных исследований в области распознавания графических образов – в первую очередь двухмерных штриховых кодов. Используется в программе 2D Barcode Recognizer http://2dbarcode.vidikon.com. Библиотека распространяется с лицензией BSD.

http://imagepak.vidikon.com

Старые записи »

Работает на WordPress