Разработка и программная реализация алгоритма сжатия и восстановления цифрового факсимильного сигнала

Страницы работы

Фрагмент текста работы

Этот код может использоваться для кодирования различных сообщений. При кодировании двухградационных факсимильных изображений в качестве символов сообщений принимаются длины белых и чёрных серий. При построении кода учитывается статистика исходной последовательности: наиболее вероятные символы кодируются наиболее короткими кодовыми комбинациями, а наименее вероятные символы кодируются наиболее длинными кодовыми комбинациями.

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

Недостатком ОНК является его чувствительность к изменению статических характеристик источника и низкая помехоустойчивость.


Выполнение задачи.

Описание алгоритма программы сжатия и восстановления изображения по методу АПК ( алгоритмы приведены за текстом ).

1.  Описание алгоритма программы сжатия.

1.  Начало.

2.  Задаём число вводимых цифр NumberDigits ( 7 ) и устанавливаем флаг переполнения.

3.  На экран выводится надпись «Введите 7 цифр количества длин серий, начиная с белого».

4.  Происходит заполнение массива а [  ].

5.  Сброс переменной sum в ноль и очистка переменной strArch, содержащей информацию на передачу.

6.  Задаётся цикл от 1 до 7 для обработки массива исходных данных.

7.  Определяется координата нового значения.

8.  Переход в процедуру to_binary для перевода в двоичную форму и добавления к strArch - переменной на передачу.

9.  Проверка на переполнение.

10.  Переход к метке Ех.

11.  К содержимому переменной strArch добавляется служебная комбинация ( окончание строки ).

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

13.  Конец.

2.  Описание алгоритма подпрограммы to_binary.

Процедура to binary переводит значения переменных в двоичную форму, которые добавляются к переменной strArch на передачу данных.

1.  Начало.

2.  Устанавливаем переменную к = 2 в 8 степени.

3.  Производим проверку на переполнение.

4.  Если переполнения нет, то s = sum.

5.  Если переполнение есть, то надпись о переполнении и программа заканчивает работу.

6.  Переход по флагу.

7.  Задаётся цикл i = от 1 до 9.

8.  Сравнивается переменная S и переменная K, соответствующая 2 в степени n, где n изменяется от 8 до 0. При условии, если S < K выполняется 9 блок, в противном случае выполняется 10 блок.

9.  Осуществляется добавление 0 к переменной strArch на передачу данных.

10.  Добавляется 1 к переменной strArch и изменяется содержимое переменной S.

11.  Деление на 2 переменной K, то есть переход к следующей степени. При выполнении условия i = 10, происходит завершение подпрограммы.

12.  Конец.

3.  Описание алгоритма программы восстановления изображения при АПК.

1.  Начало.

2.  Выполняются начальные установки, необходимые для корректного восстановления закодированных данных, здесь переменная i – счётчик массива b для хранения восстановленных значений.

3.  Копируются i - тые 9 символов из strArch.

4.  Установка к = 2 в 8 степени, степень = 0.

5.  Задаётся цикл j = от 1 до 9.

6.  Проверка параметра strCurRes[j] на равенство 1, если да, то 7 блок, если нет, то 8 блок.

7.  К степени прибавляется значение к.

8.  Переход к следующей степени. При j = 10 переходи к 9 блоку.

9.  Переход к следующему значению счётчика массива.

10.  Проверка на неравенство n <> 511. В 11 и 12 блоке записываются полученные десятичные значения в массив b.

11.  Записывается последняя серия.

12.  Происходит запись серий с первой по предпоследнюю.

13.  Проверяется на соответствие признак конца строки, если десятичная цифра соответствует 511 ( 111111111 ), то строка закончена.

14.  Выводятся на экран длины серий, соответствующих раскодированной строке, что при правильной реализации программы должно совпадать с введёнными данными.

15.  Конец.








Программа, реализующая сжатие и восстановление изображения методом АПК, представлена на языке Паскаль.

Program Cod_Dec;

Uses Crt;

Const NumberDigits=7;

Var strArch, strCurRes : string;

cAgain : char;

i, j, sum, k, n : integer;

flag:boolean;

b,a:array[1..NumberDigits] of integer;

label ex, w;

Procedure to_binary;

Var k,i,s:integer;

Begin

k:=256;

if((sum > 510) or (sum < 0)) then

begin

Writeln('Переполнение!!!');

flag:=true;

end

else

s:=sum;

for i:=1 to 9 do

Begin

if ((s-k)>=0) then

Begin

strArch:=strArch+'1';

s:=s-k;

End

else strArch:=strArch+'0';

k:=Round (k/2);

End;

End;

BEGIN

w:

clrscr;

flag:=false;

{------------Сжатие-----------}

Writeln('Введите ', NumberDigits,' цифр количества длин серий');

Readln(a[1],a[2],a[3],a[4],a[5],a[6],a[7]);

strArch:=' ';

sum:=0;

for i:=1 to NumberDigits do

Begin

sum:=sum+a[i];

to_binary;

if(flag) then

goto ex;

End;

strArch:=strArch+'111111111';

Writeln('Содержимое буфера',strArch);

{--------Востановление--------}

i:=1;

b[i]:=0;

Repeat

strCurRes:=Copy(strArch,(i-1)*9+1,9);

k:=256;

n:=0;

For j:=1 to 9 do

Begin

if strCurRes[j]='1' then n:=n+k;

k:=round(k/2);

end;

i:=i+1;

if n<>511 then

Begin

b[i-1]:=n-b[i-1];

b[i]:=n;

End

else

b[i-1]:=n-510;

Until n=511;

for i:=1 to NumberDigits do

Writeln ('b=',b[i]);

ex:

writeln('Спасибо за использование программы.');

writeln('Для продолжения сеанса введите - 1 , для выхода - 2');

readln(cAgain);

if cAgain='1' then goto w;

END.


Заключение.

По полученным данным, имеем:

№№

Серия

варианта

строки

белая

чёрная

белая

чёрная

белая

чёрная

белая

1

1

137

33

148

22

159

11

0

2

0

34

136

23

147

12

158

Код первой строки:

010001001_010101010_100111110_101010100_111110011_111111110_

111111110_111111111

Код второй строки:

000000000_000100010_010101010_011000001_101010100_101100000_

111111110_111111111

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

Похожие материалы

Информация о работе