~ubuntu-branches/ubuntu/trusty/cuneiform/trusty

« back to all changes in this revision

Viewing changes to cuneiform_src/Kern/rverline/src/algoritm/by_image.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jakub Wilk, c-assert.diff, slovenian-slv.diff
  • Date: 2011-01-26 21:53:07 UTC
  • mfrom: (5.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20110126215307-62x61mcesr607qb7
Tags: 1.0.0+dfsg-2
* Upload to unstable.
* Explicitly build-depend on pkg-config. Thanks to Stefano Rivera for the
  bug report.
* Add Vcs-* fields.
* Use the standard C assert() macro, rather than custom Cuneiform one.
  [c-assert.diff]
* Pass CFLAGS, CXXFLAGS and LDFLAGS (get from dpkg-buildflags) to cmake
  (closes: #608345). Thanks to Sami Liedes for the bug report.
  + Build depend on dpkg-dev (>= 1.15.7).
* Pass --parallel to dh.
  + Bump debhelper minimum version to 7.4.10.
* Update debian/copyright to the latest DEP-5 version.
* Bump year in debian/copyright.
* Explicitly link to GraphicsMagick (rather than via the ImageMagick
  compatibility layer).
* Don't ship /usr/lib/cuneiform/*.so symlinks. These libraries are
  considered private, at least until #598616 is fixed.
* Rename some private variables in debian/rules to make them lowercase.
* Update patch headers.
* Provide proper ‘build-arch’ and ‘build-indep’ targets in debian/rules.
* Document input format in the manual page (closes: #572061). Thanks to
  Janusz S. Bień for the bug report.
* Use ‘slv’ (rather than ‘slo’) as language code for Slovenian.
  [slovenian-slv.diff]
* Fix package description: Slovenian is supported, Slovak is not.
* Improve documentation of the language (-l) option (closes: #602512).
  Thanks to Jari Aalto for the bug report.
* Install reasons file for vrms.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
Copyright (c) 1993-2008, Cognitive Technologies
3
3
All rights reserved.
4
4
 
5
 
����������� ��������� ��������������� � ������������� ��� � ���� ��������� ����,
6
 
��� � � �������� �����, � ����������� ��� ���, ��� ���������� ��������� �������:
7
 
 
8
 
      * ��� ��������� ��������������� ��������� ���� ������ ���������� ���������
9
 
        ���� ����������� �� ��������� �����, ���� ������ ������� � �����������
10
 
        ����� �� ��������.
11
 
      * ��� ��������� ��������������� ��������� ���� � ������������ �/��� �
12
 
        ������ ����������, ������������ ��� ���������������, ������ �����������
13
 
        ��������� ���� ���������� �� ��������� �����, ���� ������ ������� �
14
 
        ����������� ����� �� ��������.
15
 
      * �� �������� Cognitive Technologies, �� ����� �� ����������� �� �����
16
 
        ���� ������������ � �������� �������� ��������� �/��� �����������
17
 
        ���������, ���������� �� ���� ��, ��� ���������������� �����������
18
 
        ����������.
19
 
 
20
 
��� ��������� ������������� ����������� ��������� ���� �/��� ������� ������ "���
21
 
��� ����" ��� ������-���� ���� ��������, ���������� ���� ��� ���������������,
22
 
������� �������� ������������ �������� � ����������� ��� ���������� ����, �� ��
23
 
������������� ���. �� �������� ��������� ���� � �� ���� ������ ����, �������
24
 
����� �������� �/��� �������� �������������� ���������, �� � ���� ������ ��
25
 
��Ѩ� ���������������, ������� ����� �����, ���������, ����������� ���
26
 
������������� ������, ��������� � �������������� ��� ���������� ����������
27
 
������������� ������������� ��������� (������� ������ ������, ��� ������,
28
 
������� ���������, ��� ������ �/��� ������ �������, ���������� ��-�� ��������
29
 
������� ��� �/��� ������ ��������� �������� ��������� � ������� �����������,
30
 
�� �� ������������� ����� ��������), �� �� ������������� ���, ���� ���� �����
31
 
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
 
5
Разрешается повторное распространение и использование как в виде исходного кода,
 
6
так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
 
7
 
 
8
      * При повторном распространении исходного кода должны оставаться указанное
 
9
        выше уведомление об авторском праве, этот список условий и последующий
 
10
        отказ от гарантий.
 
11
      * При повторном распространении двоичного кода в документации и/или в
 
12
        других материалах, поставляемых при распространении, должны сохраняться
 
13
        указанная выше информация об авторском праве, этот список условий и
 
14
        последующий отказ от гарантий.
 
15
      * Ни название Cognitive Technologies, ни имена ее сотрудников не могут
 
16
        быть использованы в качестве средства поддержки и/или продвижения
 
17
        продуктов, основанных на этом ПО, без предварительного письменного
 
18
        разрешения.
 
19
 
 
20
ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ ЛИЦАМИ "КАК
 
21
ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
 
22
ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НО НЕ
 
23
ОГРАНИЧИВАЯСЬ ИМИ. НИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
 
24
МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, НИ В КОЕМ СЛУЧАЕ НЕ
 
25
НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ
 
26
ПОСЛЕДОВАВШИЕ УБЫТКИ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ ПОНЕСЕННЫЕ ВСЛЕДСТВИЕ
 
27
НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ ПОТЕРИ ДАННЫХ, ИЛИ ДАННЫЕ,
 
28
СТАВШИЕ НЕГОДНЫМИ, ИЛИ УБЫТКИ И/ИЛИ ПОТЕРИ ДОХОДОВ, ПОНЕСЕННЫЕ ИЗ-ЗА ДЕЙСТВИЙ
 
29
ТРЕТЬИХ ЛИЦ И/ИЛИ ОТКАЗА ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ,
 
30
НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМИ СЛУЧАЯМИ), НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ДАЖЕ ЕСЛИ ТАКОЙ
 
31
ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
32
32
 
33
33
Redistribution and use in source and binary forms, with or without modification,
34
34
are permitted provided that the following conditions are met:
54
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55
55
*/
56
56
 
57
 
/**********  ���������  **********/
 
57
/**********  Заголовок  **********/
58
58
/*  Author     :  Alexander Mikhailov                                        */
59
59
/*  Last Edit  :  22.06.99                                                   */
60
60
/*  Source     :  'By_Image.CPP'                                             */
61
 
/*  ���������� :  ������� ��������� ����������� �����.                       */
62
 
/*  ���������� :  ��������� ����������� ����� �� �����������.                */
 
61
/*  Содержание :  Функции алгоритма верификации линий.                       */
 
62
/*  Назначение :  Алгоритмы верификации линий по изображению.                */
63
63
/*---------------------------------------------------------------------------*/
64
64
#include <stdio.h>
65
65
#include <math.h>
80
80
#define       MaxRastrHeight         33
81
81
#define       MaxRastrSize         1000
82
82
/*------------extern functions-----------------------------------------------*/
83
 
Bool MyGetRaster (Handle hCPage, VL_I_TASK *pTask, Word8 **ppData);
 
83
Bool MyGetRaster (Handle hCPage, VL_I_TASK *pTask, uchar **ppData);
84
84
/*------------own functions--------------------------------------------------*/
85
85
Bool NoInvest (LineInfo *pLns, VL_I_TASK *pTask);
86
 
void BlackAddFromOneToOth (VL_I_TASK *pTask, Word8 *pData, Bool NormPhoto, int One, int Oth);
87
 
void MakeLightProfil (VL_I_TASK *pTask, int *Profil, Word8 *pData
 
86
void BlackAddFromOneToOth (VL_I_TASK *pTask, uchar *pData, Bool NormPhoto, int One, int Oth);
 
87
void MakeLightProfil (VL_I_TASK *pTask, int *Profil, uchar *pData
88
88
                                          , Bool NormPhoto, int *Beg, int *End, Bool UseSpusk);
89
89
Bool DecisionByImage (int *Profil, int Beg, int End, int Wid, int MaxLight
90
90
                                          , int MinDark);
110
110
        return FALSE;
111
111
}
112
112
/*---------------------------------------------------------------------------*/
113
 
void BlackAddFromOneToOth (VL_I_TASK *pTask, Word8 *pData, Bool NormPhoto, int One, int Oth)
 
113
void BlackAddFromOneToOth (VL_I_TASK *pTask, uchar *pData, Bool NormPhoto, int One, int Oth)
114
114
{
115
 
        Word8 *b;
116
 
        Word8 *c;
 
115
        uchar *b;
 
116
        uchar *c;
117
117
        int j;
118
118
        for (j=0; j<(pTask->MyExtrWidth/8); j++)
119
119
        {
160
160
        }
161
161
}
162
162
/*---------------------------------------------------------------------------*/
163
 
void MakeLightProfil (VL_I_TASK *pTask, int *Profil, Word8 *pData
 
163
void MakeLightProfil (VL_I_TASK *pTask, int *Profil, uchar *pData
164
164
                                          , Bool NormPhoto, int *Beg, int *End, Bool UseSpusk)
165
165
{
166
 
        Word8 a;
167
 
        Word8 *b;
 
166
        uchar a;
 
167
        uchar *b;
168
168
        int i, j, k, Okrug;
169
 
        /*  1. ���������� ������� ����������� "�����������" �����������.  */
 
169
        /*  1. Определяем границы гистограммы "повернутого" изображения.  */
170
170
        if (UseSpusk)
171
171
        {
172
172
                if (pTask->MySpusk>=0)
185
185
                *Beg = 0;
186
186
                *End = pTask->MyHeight - 1;
187
187
        }
188
 
        /*  2. �������� "������ ���������" ���������� ������ �� ������������.  */
 
188
        /*  2. Забиваем "белыми пикселями" расширение строки до целобайтного.  */
189
189
        if (pTask->MyExtrWidth > pTask->MyNormWidth)
190
190
        {
191
191
                for (i=0; i<=pTask->MyHeight - 1; i++)
227
227
                        }
228
228
                }
229
229
        }
230
 
        /*  3. ��� ����� ����� ����������� "������ �������" �� 1 ����� � ����.  */
 
230
        /*  3. Для узких линий размазываем "черные пиксели" на 1 вверх и вниз.  */
231
231
        if (pTask->LineWid <= 2)
232
232
        {
233
233
                for (i=1; i<=pTask->MyHeight - 1; i++)
235
235
                for (i=pTask->MyHeight - 2; i>=0; i--)
236
236
                        BlackAddFromOneToOth (pTask, pData, NormPhoto, i, i+1);
237
237
        }
238
 
        /*  4. ������� ���������� �����������.  */
 
238
        /*  4. Снимаем собственно гистограмму.  */
239
239
        Okrug = (pTask->MyExtrWidth/8 - 1 + 1)/2;
240
240
        for (i=*Beg; i<=*End; i++)
241
241
        {
266
266
                                Profil[i]++;
267
267
                }
268
268
        }
269
 
        /*  5. ���� �����������.  */
 
269
        /*  5. Учет фотометрики.  */
270
270
        if (!NormPhoto)
271
271
        {
272
272
                for (i=*Beg; i<=*End; i++)
316
316
int InvestShortLineWithRastr_rv_pne (Handle hCPage, LineInfo *pLns)
317
317
{
318
318
        VL_I_TASK Task = {0};
319
 
        Word8 Data[MaxRastrSize];
320
 
        Word8 *Buffer;
 
319
        uchar Data[MaxRastrSize];
 
320
        uchar *Buffer;
321
321
        Bool ret;
322
322
        int i, Beg, End, Okrug;
323
323
        int Profil[MaxRastrHeight];
324
 
        /*  1. ���������.  */
 
324
        /*  1. Установки.  */
325
325
        Task.MaxHeight  = MaxRastrHeight;
326
326
        Task.MaxSize    = MaxRastrSize;
327
327
        Task.FreeHeight = 13;
328
 
        /*  2. ���������� ������ �� �������� �� ����.  */
 
328
        /*  2. Нормальные отказы от проверки по тифу.  */
329
329
        if (pLns->Flags & LI_NOTWHOLE)
330
330
                return RV_EMPTY;
331
331
        if (pLns->Flags & LI_COMPLEX)
332
332
                return RV_EMPTY;
333
 
        /*  3. ������ ������ �� �������� �� ����. ���������� ������.  */
 
333
        /*  3. Плохие отказы от проверки по тифу. Подготовка задачи.  */
334
334
        ret = NoInvest (pLns, &Task);
335
335
        if (ret)
336
336
        {
337
337
                if (!AM_Skip (AM_GetKeyOfRule (RU_VL_C_ContWarn)))
338
 
                        AM_Console ("����� �� �������� �� ���� ����� (%d %d) (%d %d)\n"
 
338
                        AM_Console ("Отказ от проверки по тифу линии (%d %d) (%d %d)\n"
339
339
                        ,pLns->A.x ,pLns->A.y, pLns->B.x, pLns->B.y);
340
340
                return RV_EMPTY;
341
341
        }
342
 
        /*  4. ������ ����� �����������.  */
 
342
        /*  4. Чтение части изображения.  */
343
343
        memset (Data, 0, sizeof (Data));
344
344
        Buffer = Data;
345
345
        ret = MyGetRaster (hCPage, &Task, &Buffer);
346
346
        if (!ret)
347
347
        {
348
348
                if (!AM_Skip (AM_GetKeyOfRule (RU_VL_C_ContWarn)))
349
 
                        AM_Console ("�� ���� ������ �� ���� ��� ����� (%d %d) (%d %d)\n"
 
349
                        AM_Console ("Не дали данные по тифу для линии (%d %d) (%d %d)\n"
350
350
                        ,pLns->A.x ,pLns->A.y, pLns->B.x, pLns->B.y);
351
351
                return RV_EMPTY;
352
352
        }
353
 
        /*  5. �����������.  */
 
353
        /*  5. Гистограмма.  */
354
354
        MakeLightProfil (&Task, Profil, Buffer, FALSE, &Beg, &End, TRUE);
355
355
        if (!AM_Skip (AM_GetKeyOfRule (RU_VL_D_InvestImage)))
356
356
        {
357
357
                Okrug = (Task.MyNormWidth + 1)/2;
358
 
                AM_Console ("��������� ��� ������� (%d %d) (%d %d)\n"
 
358
                AM_Console ("Результат для области (%d %d) (%d %d)\n"
359
359
                , Task.MyLeft, Task.MyTop, Task.MyLeft + Task.MyNormWidth - 1, Task.MyTop + Task.MyHeight - 1);
360
360
                for (i=Beg; i<=End; i++)
361
361
                {
364
364
                                , (100*Profil[i] + Okrug)/(Task.MyNormWidth));
365
365
                }
366
366
        }
367
 
        /*  5-1. ����������� ���� ���������, ������� ������ ���� �� ����.
 
367
        /*  5-1. Бессмыслица ради Коноплева, который четные разы не дает.
368
368
        memset (Data, 0, sizeof (Data));
369
369
        Buffer = Data;
370
370
        ret = MyGetRaster (hCPage, &Task, &Buffer);
371
371
        if (!ret)
372
372
        {
373
373
                if (!AM_Skip (AM_GetKeyOfRule (RU_VL_C_ContWarn)))
374
 
                        AM_Console ("�� � ����! �� ���� ������ ��� (%d %d) (%d %d)\n"
 
374
                        AM_Console ("Ну и хрен! Не дали данные для (%d %d) (%d %d)\n"
375
375
                        ,pLns->A.x ,pLns->A.y, pLns->B.x, pLns->B.y);
376
376
        }*/
377
 
        /*  6. ������� �� �����.  */
 
377
        /*  6. Решение по линии.  */
378
378
//      if ((Task.LineWid <= 2)&&((Task.MyNormWidth >= 300)))
379
379
        if ((Task.LineWid <= 3)&&((Task.MyNormWidth >= 200))) //28.09.00
380
380
                ret = DecisionByImage (Profil, Beg, End, Task.MyNormWidth, 10, 69);//70);
383
383
        if (!AM_Skip (AM_GetKeyOfRule (RU_VL_D_InvestImage)))
384
384
        {
385
385
                if (ret)
386
 
                        AM_Console ("��������� ����� (%d %d)-(%d %d) ������ %d\n"
 
386
                        AM_Console ("Нормальна линия (%d %d)-(%d %d) ширины %d\n"
387
387
                        , pLns->A.x ,pLns->A.y, pLns->B.x, pLns->B.y, pLns->Thickness);
388
388
                else
389
 
                        AM_Console ("����� ����� (%d %d)-(%d %d) ������ %d\n"
 
389
                        AM_Console ("Ложна линия (%d %d)-(%d %d) ширины %d\n"
390
390
                        , pLns->A.x ,pLns->A.y, pLns->B.x, pLns->B.y, pLns->Thickness);
391
391
        }
392
392
        if (ret)