Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Помехоустойчивое кодування, розпізнавання символов

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Доки зустрінемо чорну точку} з:= 0; {початкова значення лічильника} repeat {цикл по символу…} з := 0; for y := 3 to BiH — 2 do {перегляд за висотою} if zx = 0 then {якщо чорна точка…} begin c:=c+1; {…то ув. лічильник} if xt xmax then xmax := xt; if y ymax then ymax := y end; if xt 0 then xt := xt + 1; {ув. поточний… Читати ще >

Помехоустойчивое кодування, розпізнавання символов (реферат, курсова, диплом, контрольна)

ДЕРЖАВНИЙ КОМІТЕТ РОСІЙСЬКОЇ ФЕДЕРАЦИИ.

ПО ВИЩОМУ ОБРАЗОВАНИЮ.

Кубанський Державний Технологічний Университет.

Кафедра автоматизації виробничих процессов.

ПОЯСНЮВАЛЬНА ЗАПИСКА.

до курсової работе.

Тема: «КОДУВАННЯ І ПЕРЕДАЧА ИНФОРМАЦИИ.

РОЗПІЗНАВАННЯ ГРАФІЧНИХ ОБЪЕКТОВ".

Виконав: студент грн. 97-ОА-62.

Яворський Д.Н.

Номер зачётной книжки: 97-ОА-650.

Перевірив: доцент каф. АПП.

Шахворостов Н.Н.

Краснодар

ДЕРЖАВНИЙ КОМІТЕТ РОСІЙСЬКОЇ ФЕДЕРАЦИИ.

ПО ВИЩОМУ ОБРАЗОВАНИЮ.

Кубанський Державний Технологічний Университет.

ЗАДАНИЕ На курсову работу.

Студентові гр.

По дисциплине Тема курсової работы Исходные данные.

1. Виконати расчёты:

1.1.

1.2.

1.3.

1.4.

2. Виконати графічні работы:

2.1.

2.2.

3. Виконати наукові і навчально-дослідні работы:

3.1.

3.2.

3.3.

3.4.

4. Оформити расчётно-пояснительную записку.

5. Основна литература Задание выдано Срок здачі работы Задание принял Руководитель проекта Работа защищена С оценкой ЧЛЕНЫ КОМИССИИ:

РЕФЕРАТ.

ПЕРЕДАЧА ІНФОРМАЦІЇ, КОДУВАННЯ, КОД ШЕННОНА-ФЭНО,.

ЕФЕКТИВНІСТЬ КОДА, РОЗПІЗНАВАННЯ СИМВОЛОВ.

Темою курсового проекту є моделювання передачі ефективно закодованої інформації з каналу зв’язки Польщі з перешкодами, і навіть розпізнавання п’яти літер латинського алфaвита.

У першій частині зроблено теоретичний розрахунок інформаційних характеристик послідовного каналу через відкликання перешкодами. Програмне моделювання показало, що реальні канали наближаються за своїми характеристиками до ідеалізованому каналу лише за певних значеннях своїх параметров.

В другій частині зроблено спробу розпізнавання рядки у графічному форматі, складеної з п’яти малих літер і п’яти прописних літер латинського алфавіту, і cодержащей перешкоди. У конкурсній програмі була змодельована система розпізнавання, джерело якої в шаблонової классификации.

Курсової проект містить сторінок, 3 рисунка,.

13 таблиць, 4 джерела, 2 приложения.

1 КОДУВАННЯ І ПЕРЕДАЧА ИНФОРМАЦИИ.

1.1 ТЕОРЕТИЧНІ СВЕДЕНИЯ…

1.2 ОТРИМАНІ РЕЗУЛЬТАТЫ…

1.3 ОПИС ПРОГРАММЫ…

1.4 ВЫВОД…

2 РОЗПІЗНАВАННЯ ГРАФІЧНИХ ОБЪЕКТОВ.

1.1 ТЕОРЕТИЧНІ ДАНІ …

1.2 ОПИС ПРОГРАММЫ…

1.3 ВЫВОД…

ЗАКЛЮЧЕНИЕ

ДОДАТОК А…

ДОДАТОК Б…

Ця робота демонструє моделювання процесів передачі й розпізнавання інформації. Воно складається з двох частей.

Перша частина присвячена моделювання каналу передачі. Для передачі повідомлення через такий канал з перешкодами використовується алгоритм кодування методом Шеннона-Фэно з наступним кодуванням (n, 1) кодом.

Друга частина присвячена моделювання простий системи розпізнавання. Як об'єктів виступають п’ять прописних і п’ять малих літер літер латинського алфавіту в BMP-формате. Рядок символів містить перешкоди як одиночних і які об'єдналися до груп пикселей. Використаний шаблонний підхід до распознаванию.

1 КОДУВАННЯ І ПЕРЕДАЧА ИНФОРМАЦИИ.

1.1 ТЕОРЕТИЧНІ СВЕДЕНИЯ.

Кодування і передачі інформації з каналу зв’язку ввозяться відповідності зі схемою каналу, зображеною малюнку 1.1.1.

Vi Vj.

Zi Zj.

Xi Yj.

Рисунок 1.1.1 — Структура передачі информации.

Джерело генерує послідовність повідомлень з ансамблю {V, P (V)}, де V — символ сообщения;

P (V) — ймовірність символу повідомлення, розраховувана по формуле:

[pic][pic] (1.1.1).

де i=1…m; m, r — задані величины.

Кодер джерела кодує повідомлення Vi в Zi за алгоритмом Шеннона-Фэно.

Ентропія повідомлення H (Z), бит/символ обчислюється за такою формуле:

[pic] (1.1.2).

Формула до розрахунку середньої довжини коду Lср, біт має вид:

[pic] (1.1.3).

де L (Zi) — довжина коду, бит;

P (Zi) — ймовірність кода.

Максимальна ентропія H (Z)max, бит/символ нерівномірного двоичного коду Zi визначається по формуле:

[pic] (1.1.4).

Знаючи середню довжину коду, можна визначити коефіцієнт ефективності Кэф коду Zi по формуле:

[pic] (1.1.5).

Для розрахунку коефіцієнта надмірності Кизб використовується формула:

[pic] (1.1.6).

Кодер каналу здійснює просте кодування повторенням n = 3 раз кожного двоичного сигналу повідомлення Zi. Отже, є лише два кода:

Х1=(0 0 0) Х2=(1 1 1).

Можливість кожного їх визначається по формуле:

[pic] (1.1.7).

де к=0,1;

[pic] - кількість елементів «до» в коді Zi.

При передачі Xк на каналі зв’язку можливі помилки з імовірностями, определяемыми наступним образом:

P10=0.2 + 0.02A (1.1.8).

P01=0.2 + 0.02B (1.1.9).

где р10 — можливість прийняття нуля під час передачі одиниці; р01 — можливість прийняття одиниці під час передачі нуля;

А, У — задані величины.

Надалі, для зручності використовуватимуться такі прийняті обозначения:

Х — рухаючись код;

Y — який приймає код.

При побудові канальної матриці P (Y/X) скористаємося тим, що з передачі може відбутися помилка є лише одна розряді X1 чи X2.

Тоді, у 1 рядку матриці елементи визначаться наступним образом:

1 — p01, і = 1.

P (xi, yj) = P01/3, і = 2,3,4. (1.1.10).

0, і = 5,6,7,8.

Елементи канальної матриці спільної ймовірності P (X, Y) визначаються по формуле:

P (xi, yj)=P (xi)P (yj/xi) (1.1.11).

Знаючи матрицю спільної ймовірності P (X, Y), можна визначити елементи матриці ймовірностей P (Y). Вони по формуле:

P (yi)=P (x1,yi)+ P (x2,yi) (1.1.12).

Натомість, формула до розрахунку елементів матриці умовної ймовірності P (X/Y) має вид:

P (xi/yj)=P (xi, yj)/P (yj) (1.1.13).

Ентропія переданого сигналу H (X), бит/символ і прийнятого сигналу H (Y), бит/символ визначається відповідно по формуле:

[pic] (1.1.14).

[pic] (1.1.15).

Умовні ентропії H (X/Y), бит/символ і H (Y/X), бит/символ розраховуються відповідно по формулам:

[pic] (1.1.16).

[pic] (1.1.17).

Спільна ентропія H (X, Y), бит/символ перебувають розслідування щодо формуле:

[pic] (1.1.18).

Взаємна ентропія I (X, Y), бит/символ визначається по формуле:

[pic] (1.1.19).

Передача інформації з каналу зв’язку здійснюється зі швидкістю V, рассчитываемой по формуле:

V = 1000(A+1) (1.1.20).

Постійну швидкість передачі двійкових символів на каналі зв’язку R, бит/с можна розрахувати по формуле:

R = V (I (X, Y) / 3; (1.1.21).

Продуктивність джерела [pic], бит/с визначається за такою формуле:

[pic]= (H (X) (V) (1.1.22).

1.2 ОТРИМАНІ РЕЗУЛЬТАТЫ.

За умовою варіанта визначено такі постоянные:

m = 15; r = 10;

Визначимо характеристики посылаемых символов.

Ймовірності символів Vi (они ж — ймовірності коду Zi), генерируемых джерелом розраховуємо за такою формулою 1.1.1. Отримані значення ймовірностей наведені у таблиці 1.2.2.

Спочатку ймовірності будуються по спадаючій. Після цього є всі ймовірності діляться на дві групи те щоб не більше кожної групи їх значення були приблизно. У старший розряд кодів, відповідних першої групи ймовірностей, записується 1, для другої групи кодів — 0. Потім кожна гілка отриманих підгруп, своєю чергою, ділиться аналогічно. При проходженні циклу розподілу за одним розряду відбувається перехід на розряд вправо. Розподіл триває до того часу, поки кожної групі бракуватиме за одним коду.

Результати розробки кодів показані в таблиці 1.2.1.

Таблиця 1.2.1 — Ймовірності і коди символов.

| Vi | P (Vi) | Zi |L (Zi) | |1 |0.231 |11 |2 | |2 |0.183 |10 |2 | |3 |0.1408 |011 |3 | |4 |0.1042 |0101 |4 | |5 |0.0732 |1 001 |5 | |6 |0.0732 |1 000 |5 | |7 |0.0479 |111 |5 | |8 |0.0479 |110 |5 | |9 |0.0282 |101 |5 | |10 |0.0282 |100 |5 | |11 |0.0141 |11 |5 | |12 |0.0141 |10 |5 | |13 |0.0056 |11 |6 | |14 |0.0056 |10 |6 | |15 |0.0028 |0 |6 |.

Обчислимо ентропію повідомлення H (Z), бит/символ за такою формулою 1.1.2 :

H (Z) = 3.218 бит/символ.

Середню довжину нерівномірного коду визначимо за такою формулою 1.1.3 :

Lср = 3.5652 бит.

Максимальну ентропію нерівномірного двоичного коду Zi визначаємо по формулі 1.1.4:

H (Z)max = 3.218 бит.

За формулою 1.1.5 обчислимо коефіцієнт ефективності Кэф нерівномірного двоичного коду Zi:

Кэф = 0.903.

Для розрахунку коефіцієнта надмірності Кизб скористаємося формулою 1.1.6:

Кизб = 0.176.

При простому кодування повторенням n=3 раз кожного двоичного сигналу повідомлення Zi є два коду: Х1 і Х2, ймовірності яких Р (Х1) і Р (Х2) перебувають за такою формулою 1.1.7:

Р (Х1) = 0.4113 Р (Х2) = 0.5885.

Ймовірності можливих помилок, під час проходження коду на каналі визначаються по формулам 1.1.8 і 1.1.9 соответственно:

P10 = 0.3 P01 = 0.2.

Канальна матриця P (Y/X) із боку приймача для коду Х0 і Х1, розрахована за формулі 1.1.10, приведено в таблиці 1.2.3. Для перевірки розрахунку у тому стовпці таблиці 1.2.3 приведено сума за поточною рядку. Значення ймовірностей в таблиці 1.2.3 наводяться в десятитысячных частках единицы.

Таблица 1.2.2 — Канальна матриця P (Y/X) | | Y | | |X | |сума | | |000 |001 |010 |100 |011 |101 |110 |111 | | |000 |8000 |0667 |0667 |0667 |0000 |0000 |0000 |0000 |10 000 | |111 |0000 |0000 |0000 |0000 |1000 |1000 |1000 |1000 |10 000 |.

У таблиці 1.2.3 наведено значення елементів канальної матриці спільної ймовірності P (X, Y), певні за такою формулою 1.1.11. Значення ймовірностей в таблиці 1.2.3 наводяться в десятитысячных частках единицы.

Таблица 1.2.3 — Матриця спільних ймовірностей P (X, Y) | | Y | |Х | | | | 000 | 001 | 010 | 100 | 011 | 101 | 110 | 111 | |000 |3292 |0274 |0274 |0274 |0000 |0000 |0000 |0000 | |111 |0000 |0000 |0000 |0000 |0588 |0588 |0588 |4119 |.

Елементи матриці ймовірностей P (Y) перебувають за такою формулою 1.1.12. Отримані дані наведені у таблиці 1.2.4 в десятитысячных частках одиниці. У цьому стовпці для перевірки приведено сума по строке.

Таблица 1.2.4 — Матриця P (Y) | Y | | | |Сума | | 000 | 001 | 010 | 100 | 011 | 101 | 110 | 111 | | |3292 |0274 |0274 |0274 |0588 |0588 |0588 |4119 |10 000 |.

Розрахувавши матриці P (X, Y) і P (Y), можна визначити елементи матриці умовної ймовірності P (X/Y) за такою формулою 1.1.13. Матриця P (X/Y) приведено в таблиці 1.2.6.

Рассчитываем ентропію переданого сигналу H (X) і ентропію прийнятого сигналу H (Y) по формулам 1.1.14 і 1.1.15 соответственно:

H (X) = 0.9777 бит/символ.

H (Y) = 2.2025 бит/символ.

Умовні ентропії H (X/Y) і H (Y/X) розрахуємо, скориставшись формулами 1.1.16 і 1.1.17 соответственно:

H (X/Y) = 0.0000 бит/символ.

H (Y/X) = 1.2244 бит/символ Таблица 1.2.5 — Матриця P (X/Y) | | Y | | |X | |Сума | | | 000 | 111 | | | 000 | 1 | 0 |1.0000 | | 001 | 1 | 0 |1.0000 | | 010 | 1 | 0 |1.0000 | | 100 | 1 | 0 |1.0000 | | 011 | 0 | 1 |1.0000 | | 101 | 0 | 1 |1.0000 | | 110 | 0 | 1 |1.0000 | | 111 | 0 | 1 |1.0000 |.

За формулою 1.1.18 знаходимо спільну ентропію H (X, Y):

H (X, Y) = 2.2014 бит/символ.

Зробимо перевірку отриманих значень энтропий:

H (Y/X) + H (X) = 2.2025 бит/символ.

H (X/Y) + H (Y) = 2.2025 бит/символ.

Збіг отриманих значень свідчить правильність знайдених значень энтропий.

Визначимо значення взаємної ентропії I (X, Y), використовуючи формулу 1.1.19:

I (X, Y) = 0.9777 бит/символ.

Для відшукання наступних характеристик каналу обчислимо швидкість передачі двійкових символів на каналі зв’язку з допомогою формули 1.1.20:

V = 6000 символов/c.

Інформація передається на каналі зв’язки України із постійної швидкістю R, вычисляемой з допомогою формули 1.1.21:

R = 1956.1 бит/с.

Продуктивність джерела за такою формулою 1.1.22 равна:

[pic] = 5868.3 бит/с.

Результатом роботи програми є графіки числа помилок відновлення інформації від параметра n (n, 1) — коду і південь від p01 і p10. При теоретичному розрахунку ми припустили, що у каналі немає помилок. Справді, отримане нульовий значення ентропії H (X/Y) також звідси свидетельствует.

Проте графік свідчить, що це припущення стає відповідає дійсності лише починаючи з значень n, рівних 20.25.

Приблизний їх вид отриманих графіків наведено на малюнках 1.2.1 і 1.2.2.

Кількість ошибок,%.

20 40 60 100.

Кількість повторень, n.

Малюнок 1.2.1 — Кількість помилок восстановления.

Кількість ошибок,%.

20 40 60 100 p01, p10, %.

Малюнок 1.2.1 — Кількість помилок восстановления.

1.3 ОПИС ПРОГРАММЫ.

Відповідно до завданням я розроблена програмна модель каналу із конкретним висновком графіка залежності числа помилок від кількості n. Програма написана мовою Borland Pascal 7.0.

Для програмної реалізації каналу програма затребувана довжину переданого масиву повідомлень, число n і виконує підрахунок числа помилок за його передачі. Потім іде розрахунок масиву даних для побудови графіка залежності числа помилок від n для n, мінливого в інтервалі 1.100 з кроком 3. Після цього відбувається висновок на екран шуканого графика.

У конкурсній програмі використовуються такі процедури і функции:

Функція flag може приймати булевское значення залежно від вхідний ймовірності. Вона служить реалізації у програмі випадкового події із заздалегідь заданої вероятностью.

Процедура ver розраховує ансамбль ймовірностей вихідного сполучення залежність від A і B, і навіть впорядковує його за убыванию.

Процедура set_codes заповнює масив кодів за алгоритмом Шеннона-Фэно і инициализирует маски для декодування нерівномірного кода.

Функція без параметрів sourse при кожному зверненні до неї приймає значення повідомлення з ансамблю відповідно до його ймовірністю. Вона використовує хоча б принцип, як і функція flag.

Процедура deranges вносить в код, відповідний повідомленню sourse, перешкоди відповідно до моделлю (n, 1)-кода. У ньому використовуються функції побитного зсуву shr і shl, і навіть функція flag.

Процедура decoder служить для раскодирования нерівномірного двоичного коду після дії нею перешкод в каналі. Оскільки найбільша довжина коду вбирається у 8 біт, то тут для їх збереження, передачі й декодування використовується тип даних — байт, причому розташовуються вони в старших битах.

Процедура graphik служить для відображення на екрані графіка залежності числа помилок відновлення інформації від значень параметра n (n, 1) — коду. Все зображення прив’язана до початку координат (x0,y0). Для зручності по оси y відкладаються значення %. Графік відображається відрізками прямих для згладжування різких стрибків значений.

1.4 ВЫВОД.

У розділі було розглянуто алгоритм побудови нерівномірного двоичного коду за алгоритмом Шеннона-Фэно і ті характеристики коду і каналу, як спільна ентропія, умовна ентропія, продуктивність джерела і т.д.

Кодування інформації з Шеннону-Фэно разом із кодуванням (n, 1) кодом показало непоганих результатів при програмному моделюванні каналу. Так, під час передачі порядку 1000 символів при n = 20.25 мало спостерігається помилок при р10 і р01, певних по заданию.

2 РОЗПІЗНАВАННЯ СИМВОЛОВ.

2.1 ТЕОРЕТИЧНІ СВЕДЕНИЯ.

Під розпізнаванням об'єкта усвідомимо його впізнавання, тобто. визначення її як елемента деякою сукупності об'єктів, званої классом. Под чином (класом) усвідомимо безліч об'єктів, об'єднаних загальними свойствами.

Ознаки — це характеристики об'єкта, якими визначаються її властивості. Безлічі образів відповідає алфавіт, а безлічі ознак відповідає словник признаков.

Усі системи і моделі розпізнавання можна класифікувати наступним образом.

За завданням курсового проекту визначено алфавіт об'єктів — безліч, що складається з п’яти прописних і п’яти малих літер літер латинського алфавіту. Необхідно побудувати просту детерміновану систему распознавания.

Під простий усвідомимо систему, алгоритм якої визначено з урахуванням апріорній информации.

Складні системи складаються з кількох підсистем і рівнів розпізнавання. Прикладом такого виду систем є медичні діагностичні системы.

Робота систем без навчання з урахуванням апріорній інформації ознаки. У котрі навчаються системи закладено алгоритм навчання з спеціально підібраною навчальною вибірці. У самообучающихся системах укладено правила, якими система сама визначає безліч классов (алфавит классов).

Детермінована система — це такий система, у якій зв’язок між значеннями ознак і класами жорстка, определенная.

Существует три підходи до завданню розпізнавання текстових символов.

Перший — шаблонна (растрова) класифікація. При її використанні лічений символ порівнюється зі усіма шаблонами, хранящимися у базі. Критерії збіги символів: а) Q=(fш (xi, yj) XOR fs (xi, yj) min (за всі шаблонам); б) Кореляція між шаблоном і считываемым символом.

R ((, z)=(x (y fш (x, y). fs (x — (, yz) max Переваги: мала чутливість до дефектів (розриви, шуми…) Недоліки: необхідно навчання новим шрифтами і типам розмірів шрифтов.

Другий — признаковая класифікація. Переваги: зображення символу перетворюється на простий набір ознак. Недоліки: ухиляння від істинного зображення. З використанням цього можна використовувати такі признаки:

— розміри і співвідношення розмірів символів (довжина, висота, площадь);

— проекції різні оси;

— моменти щодо різних осей і співвідношень між ними;

Третій — структурна класифікація. Полягає в аналізі топології символів. Виявлення: кутів, околиць, ліній, перетинань, кінцевих крапок і їх взаємне расположение.

У своїй роботі найприйнятніший здався мені використання шаблонової класифікації з урахуванням кореляційної функції. Використання інших ознак я вважав зайвим, т.к. вони мають меншою ефективністю, а отже, зменшують ефективність распознавания.

2.2 ОПИС ПРОГРАММЫ.

Для моделювання системи розпізнавання я розробив програму мовою Borland Pascal.

До програми вхолят такі процедури і функции.

Процедура Init_Graph_Mode здійснює вхід в графічний режим при використанні графічного драйвера видеоадаптера SVGA. Т.к. драйвер svga256. bgi перестав бути вбудованим в таблицю BGI, то тут для її використання необхідно звернутися до стандартної процедурі InstallUserDriver. З іншого боку, цю процедуру инициализирует палітру GrayScale шляхом звернення до стандартної процедурі SetRGBPalette.

Процедура ShowList служить для відображення на екрані картинки зі рядком символів. Відображення йде зі збільшенням вдев’ятеро, тобто. кожен піксель вихідної картинки відображається на екрані вікном 3*3 однакових пикселей. У процедуру як параметрів передається x і y точки-начала координат, щодо якої може і відбувається отображение.

Процедура Init_Data служить заповнення масивів даних: масивів, де містяться лічені на згадку про картинки.

Процедура Deranges вносить в вихідну картинку перешкоди. Внесення перешкод здійснювалося із розрахунку 20% від загальної ваги символів. Координати пикселей-помех випадкові числами не більше ширини і висоти картинки. Піксель зі випадковими координатами інвертується, тобто. при потраплянні на білий фон ставиться чорна точка, а потрапляючи на символ — біла точка.

Процедура Filter виробляє посильну видалення внесённых перешкод. Для цього використовуються 16 видів масок: видалення перешкод, «залезших» на символ, видалення груп із двох перешкод, видалення перешкод, «пристроившихся» до символу. При збігу маски з фрагментом зображення відбувається зміна відповідних пикселей.

Процедура Ramka служить перебування координат мінімально описаного прямокутника. Відповідні перемінні є глобальними, процедура змінює їх значення й значення поточної координати x. Залежно від значення перемінної flag відбувається малювання отриманої рамки на картинке.

Розпізнавання по кореляції оформлено переважно блоці програми. У процесі розпізнавання відбувається поочерёдное виділення мінімально описаних прямокутників навколо «зіпсованих» перешкодами символів. Потім йде цикл порівняння чергового символу з усіма шаблонами. Після перевірки те, що символ за величиною незгірш від чергового шаблону, йде обчислення кореляційної функції. Якщо символ більше шаблону, то обчислюється кілька значень зі зміщеннями по x і y, та був їх береться максимальне. Отримані значення порівнюються між собою. Номер шаблону, з яким отримано найбільше подібність, і буде распознанным символом.

ЗАКЛЮЧЕНИЕ

.

Діяльність розробили моделі каналу зв’язку й системи розпізнавання. Моделювання було виконано з урахуванням можливого наявності перешкод. Моделювання показало працездатність побудованих моделей при досить рівні помех.

1. Теоретичні основи інформаційної техники/Темников Ф.Е.и ін.- М.:Энергия, 1971.

2. Орлов В. А., Филлипов Л. И. Теорія інформацією вправах і завданнях. — М.:Высш.шк., 1976.

3. Сигорский В. П. Математичний апарат інженера — Киев: Техника, 1975.

4. Солодов А. В. Теорія інформації та її застосування до завдань автоматичного управління і функцію контролю — М.: Наука, 1967.

2.3 ВЫВОД.

В другій частині було розглянуто модель розпізнавання, джерело якої в шаблонової класифікації. Програмне моделювання показало непогані результати. Модель распознаёт рядок практично в 100% випадків за 23−24-відсоткового рівня перешкод до 40%. Проте цей підхід може використовуватися лише у цьому разі, якщо наперед відомо, що розпізнавані символи будуть однакового шрифта.

ДОДАТОК А.

Текст програми моделювання каналу связи.

Program final_of_work; uses crt, graph; const a=5; b=0; m=10+(a mod 6); {15} r=trunc ((m+a-b)/2); {10} var n, {n для (n, 1) — коду} temp, ent, out, symb, decode: byte; {буферы для кодування} p: array[1.m] of real; {ймовірності} p01, p10:real; {p одиничної помилки} z, dl: array[1.m] of byte; {код, довжина коду} mask: array[1.8] of byte; {маски для декодування} data_n, data_p.

:array[1.100] of integer; {дані для графіка} i, j, {лічильники} count_of_errors, {лічильник помилок відновлення} dlina, sh, {довжина масиву повідомлень} count: integer; {лічильник для побудови графіка} range, c, s, l: byte; fl: boolean; function flag (px:real):boolean;

{—-здійснює подія з імовірністю p—-} var ww, wq: word;

begin ww := round (px * 100); wq := random (100); if ww > wq then flag := true else flag := false; end;

procedure ver; {——————розрахунок ймовірностей————-} var s, i3, j3: integer; tmp, s1: real; begin s:=0;tmp:=0; {обчислюємо ймовірності} for j3:=1 to m do s:=s+sqr (j3-r); s:=s+m; for i3:=1 to m do p[i3]: =(1+sqr (i3-r))/s;

{———-упорядковуємо ймовірності————} for i3:=1 to m-1 do {зовнішній цикл} begin tmp := p[i3]; {локальний максимум} for j3:=i3 to m do if p[j3] >= tmp then begin tmp := p[j3]; {максимум — на і кроці} s:=j3 {його номер} end; p[s] := p[i3]; {обмін} p[i3] := tmp end;

end;

procedure deranges; {—————внесення перешкод——————} var tmp: byte; c0, c1: integer; {лічильники 0 і одну для декодування} begin out := 0; {вихідний код після перешкод} for і := 0 to 7 do {цикл по розрядам} begin c0 := 0; {скидання лічильників} c1 := 0; tmp := (z[ent] shr і) and 1; {виділяємо розряд} for j := 1 to n do {цикл по розрядам (n, 1)-кода} case tmp of {определяемм помеху}.

0: if flag (p01) then inc (c1) else inc (c0);

1: if flag (p10) then inc (c0) else inc (c1) end; if c1 > c0 then out := out or (1 shl і) end; {вносимо перешкоду в вихідний код} end;

procedure set_codes; {——-за алгоритмом Шеннона — Фэно——-} var i3, j2: byte; function numb (v:real):byte;{номер ймовірності, яка перебуває} var i2: byte; { «» тій, котру передається як параметр} begin for i2 := 1 to m do {цикл по можливостям} if (v >= p[i2 + 1]) and (v 1) and (j < m).

{якщо > 2 елементів…} then dec (j); {…коригуємо нижню межу} p. s := numb ((p[i] + p[j])/2); {ділимо} if p[i] = p[j] {якщо два елемента…} then p. s := і; {середину — на «верхній «} if j = 0.98; gotoxy (10,24); writeln («Press any key to continue… »); readkey; graphiki; readkey; closegraph; End.

ДОДАТОК Б.

Текст програми розпізнавання символов.

Program Final_of_work; uses graph; const BiH=50; {———-висота картинки в пикселях———}.

BiW=160; {———-ширина картинки в пикселях———} stroka: array[1.10] of char=.

(«I », «h », «і «, «G », «F », «k », «H », «g », «J », «j »);

{——-еталонна рядок задля встановлення відповідності——-} type arr=array[1.BiW, 1. BiH] of byte; {тип массива-картинки} const path0= «work.bmp »; {шлях до bmp-файлу із вихідною рядком} var file0, file1:file of byte; {файлові перемінні для зв’язку} counter, {лічильник поточної позиції розпізнавання} rasp: byte; {номер поточного розпізнаного символа}.

f0, {масив з еталонною картинкою} f: arr; {масив з картинкою, що містить помехи}.

x, y, {лічильники ходу по масивам} xmin, ymin, xmax, ymax, {мінімально описаний прямокутника} xt, {поточна позиція x під час руху за картинкою} xsav,{для збереження поточного x під час використання кореляції} i, j, {допоміжні лічильники} xm, xk, ym, yk, {задля збереження поточного м.о.п. під час використання кореляції} k,{счетчик шаблонів під час використання кореляції} di, dj: integer;

{усунення шаблону і символу по x і y при наложении}.

flag :boolean; {ознака відображення на екрані рамки}.

kfmax, {глобальний максимум кореляції для символу} max, {значення кореляції для поточного шаблону} kf, {поточна змінна для обчислення кореляції} smin: longint; {мінімально можлива площа шаблона}.

Procedure Init_Graph_Mode; {——-ініціалізація графіки——-} var Driver, {код драйвера графічного устрою} Mode, {код графічного режиму} TestDriver, {внутрішній номер драйвера в таблиці BGI} ErrCode: Integer; {код помилки} function TestDetect: Integer; far; {функція визначення параметрів графічного режиму драйвера} {повний адресу точки входу до функцій, тобто. = сегмент+смещение} begin.

TestDetect := 3; {дозвіл екрана 800*600 точок} end; begin TestDriver := InstallUserDriver («svga256 », @TestDetect);

{встановлює новий драйвер в таблицю BGI} if GraphResult grOk then begin Writeln («Помилка за умови встановлення драйвера: » ,.

GraphErrorMSG (ErrCode));

Halt (1); end; Driver := Detect;{автоматическое визначення драйвера-SVGA} InitGraph (Driver, Mode, «»);

{ініціалізація графічного режима;}.

{драйвер — нинішнього року каталозі} ErrCode := GraphResult; if ErrCode grOk then begin.

Writeln («Помилка графічного режиму: » ,.

GraphErrorMSG (ErrCode));

Halt (1); end; SetTextStyle (DefaultFont, HorizDir, 1); {поточний шрифт} OutTextXY (120,20, «Йде ініціалізація графічного режиму… »); for x := 0 to 255 do {ініціалізація палітри grayscale}.

SetRGBPalette (x, x, x, x); OutTextXY (450,20, «Ok. »); end;

Procedure showlist (xn, yn: integer);

{—-відображення картинки з масштабированием о 9-й раз—-}.

{xn, yn-начало координат при відображенні} begin x := 1; {поточні координаты-в початок} y := 1; repeat {зовнішній цикл-по висоті} for і := -1 to 1 do for j := -1 to 1 do {поточний піксель — вікном 3*3}.

PutPixel ((3*x+i)+xn,(3*BiH-3*y+j)+yn, f[x, y]); x := x + 1; {прирощення по x} if x = BiW then {якщо скраю…} begin x := 1; {…то переходимо в наступний ряд} y := y + 1 end; until y = BiH; {доки опинимося у вищій рядку} end;

procedure Init_Data; {——-заповнення масивів даних——-} var t: byte; begin assign (file0,path0); reset (file0); seek (file0,$ 436); for y:=1 to BiH do for x:=1 to BiW do begin read (file0,t); {заповнюємо масив шаблонів} f0[x, y]: =t; end; for x := 1 to BiW do{заполняем масив внесення перешкод} for y := 1 to BiH do f[x, y]: =f0[x, y]; end;

Procedure Deranges; {—————-внесення перешкод—————-} const u=20; {—-рівень перешкод в % від загальної ваги символів—-} var count, {кількість внесених перешкод} w: integer; {сумарна вага символов}.

begin count := 0; w:=0; randomize; {ініціалізація генератора випадкових чисел} for x := 1 to BiW do {підраховуємо сумарна вага} for y := 1 to BiH do if f[x, y] = 0 then w:= w+1; repeat {———вносимо перешкоди…———} x := random (BiW); {випадкові координати} y := random (BiH); if (x in [3.BiW-2]) and (y in [3.BiH-2]) then begin if (f[x, y] = 255) then {якби білому тлі…} f[x, y] := 1; {…то чорна точка} if (f[x, y] = 0) then {якби чорному тлі…} f[x, y] := 255 {…то біла точка} end; count := count + 1; {ув. лічильник перешкод} until 100*count >= u * w; {доки одержимо даний рівень} for x := 1 to BiW do {перекрашиваем в 0-ї колір} for y := 1 to BiH do if f[x, y] = 1 then f[x, y] := 0 end;

Procedure Filter; {——-фільтрація зображення від помех——-}.

{спеціальні маски видалення перешкод;} {якщо накладення маска збіглася з фрагментом изображения,}.

{то змінюємо відповідні пікселі} const mask1: array[1.4,-1.1,-1.1] of byte =.

(((1,1,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,1,0)),.

((1,1,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,0,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0)),.

((0,1,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,1,1)),.

((0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,0,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,1,1)));

{видалення перешкод, «залезших «на символ}.

mask2:array[5.12,-2.2,-2.2] of byte =.

(((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,1,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,1,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,1,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,1,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,1,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,1,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)));

{видалення груп одиночних помех}.

mask3:array[13.14,-2.2,-1.1] of byte =.

(((1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,1,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,0,0)),.

((0,0,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,1,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1)));

mask4:array[15.16,-1.1,-2.2] of byte =.

(((1,1,1,1,1); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,0,0,0)),.

((0,0,0,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (0,0,1,0,0); INSERT INTO `ref` (`id_predmet`, `name_predmet`, `id_ref`, `name_ref`, `text_ref`) VALUES (1,1,1,1,1)));

{видалення перешкод, «пристроившихся «до символу} var m, n, l: integer; {допоміжні лічильники} flg: boolean; {ознака виходу з добірки} su: array[1.16] of longint; {масив сум для масок} begin for і := 3 to BiW-2 do {зовнішній цикл із зображення} for j := 3 to BiH-2 do begin l := 0; {якщо біла точка оточена чорними…} for m:=-1 to 1 do for n:= -1 to 1 do l := l + f[i+m, j+n]; if (l = 255) and (f[i, j] = 255) then f[i, j] := 0; {…то робимо і її черной}.

{якщо чорна точуа оточена білими…} if (l >= 255*8) and (f[i, j] = 0) then f[i, j] := 255; {…то робимо і її белой}.

{обнуляем суми для масок} for l := 1 to 16 do su[l] := 0;

{підсумуємо з усіх видів масок} for l := 1 to 4 do for m:=-1 to 1 do for n:= -1 to 1 do su[l] := su[l] + ((not f[i+m, j+n]) xor mask1[l, m, n]) and 1; for l := 5 to 12 do for m:=-2 to 2 do for n:=-2 to 2 do su[l] := su[l] + ((not f[i+m, j+n]) xor mask2[l, m, n]) and 1; for l := 13 to 14 do for m:=-2 to 2 do for n:=-1 to 1 do su[l] := su[l] + ((not f[i+m, j+n]) xor mask3[l, m, n]) and 1; for l := 15 to 16 do for m:=-1 to 1 do for n:=-2 to 2 do su[l] := su[l] + ((not f[i+m, j+n]) xor mask4[l, m, n]) and 1;

{—-перевіряємо почергово кожен вид масок—-}.

{на першому виду — зачерняем центральну точку} l := 0; flg := false; repeat l := l + 1; if su[l] = 0 then flg := true; until (flg) or (l = 4); if flg then f[i, j] := 0;

{на другому — робимо білим вікно 3*3} l := 4; flg := false; repeat l := l + 1; if su[l] = 0 then flg := true; until (flg) or (l = 12); if flg then for m := -2 to 2 do for n := -2 to 2 do f[i+m, j+n] := 255; {для третього і четвертого — робимо білої центральну точку} l := 12; flg := false; repeat l := l + 1; if su[l] = 0 then flg := true; until (flg) or (l = 16); if flg then f[i, j] := 255; end end;

{—————-мінімально описаний прямокутник—————} procedure ramka (zx:arr;flagx:boolean); var з: integer; {лічильник чорних точок} begin xmin:=BiW;xmax:=0;ymin:=BiH;ymax:=0;

{початкові значення координат м.о.п.} c:=0; {початкова значення лічильника} xt := xt + 1; {зрушуємо поточну координату} repeat {цикл збільшення xt за картинкою…} xt := xt + 1; for y := 3 to BiH-2 do {перегляд за висотою} if zx[xt, y] = 0 then з:= c+1; until (з 0) or (xt > BiW — 6);

{…доки зустрінемо чорну точку} з:= 0; {початкова значення лічильника} repeat {цикл по символу…} з := 0; for y := 3 to BiH — 2 do {перегляд за висотою} if zx[xt, y] = 0 then {якщо чорна точка…} begin c:=c+1; {…то ув. лічильник} if xt < xmin then xmin := xt; {изм.коорд.м.о.п.} if xt > xmax then xmax := xt; if y < ymin then ymin := y; if y > ymax then ymax := y end; if xt 0 then xt := xt + 1; {ув. поточний x} until (c=0) or (xt > BiW — 2);{…пока не дійдемо до білого} if flagx then {якщо ознака…} begin {…то малюємо рамку;100-цвет} for x:=xmin-1 to xmax+1 do f[x, ymin-1]: =100; for x:=xmin-1 to xmax+1 do f[x, ymax+1]: =100; for y:=ymin-1 to ymax+1 do f[xmin-1,y]: =100; for y:=ymin-1 to ymax+1 do f[xmax+1,y]: =100 end end;

{=====================НОВИЙ БЛОК=======================}.

BEGIN.

Init_Graph_Mode; OutTextXY (120,30, «Йде ініціалізація даних… »); Init_Data; OutTextXY (345,30, «Ok. »); flag := false; smin:=BiH*BiH; {max можлива площа символу} For counter := 1 to 10 do {цикл за шаблонами} begin {визначаємо min можливу площа символа}.

Ramka (f0,flag); if (xmax-xmin)*(ymax-ymin) = xmax-xmin) and (yk-ym >= ymax-ymin).

{якщо шаблон max then max := kf; {локальний max} di:=di+1; {ув. усунення по x} if xmax-xmin+di>=xk-xm {якщо усунули по x} then {…то зміщуємо по y} begin di:=0; dj:=dj+1 end; until (ymax-ymin+dj>=yk-ym);

{…доки сместим по y} if max > kfmax {шукаємо глобальний max…} then begin kfmax:=max; rasp:=k {…та її номер} end end; xt:=xsav; {відновлюємо поточний x}.

ShowList (170,280); if (xk-xm)*(yk-ym) >= smin{если допустима площа} then {…то виводимо розпізнаний символ}.

OutTextXY (190 + 35*counter, 520, stroka[rasp]);

Until xt >= BiW — 15; ShowList (170,280); ReadLn; CloseGraph; {скидаємо графичесий режим}.

END. ———————————- Источник.

Кодер источника Помехи.

Декодер канала.

Кодер канала.

Канал.

Декодер источника.

Приемник.

Системи (моделі) распознавания.

простые.

сложные.

самообучающиеся.

без обучения.

з обучением Детерминированные.

Вероятностные.

Логические.

Структурные.

Показати весь текст
Заповнити форму поточною роботою