Принципы и методы двумерного кодирования, потеря цифр
Двумерное кодирование было разработано, чтобы преодолеть недостатки одномерного кодирования при сжатии изображений, содержащих серые области. Этот метод является опционным дополнением к Group 3 и используется только при работе в цифровых сетях. Если факс-машина поддерживает двумерное кодирование, то за кодом EOL следует еще один бит, указывающий на метод кодирования следующей строки. Если он равен 1, то будет использоваться одномерное кодирование, а О указывает на двумерную схему.
Метод двумерного кодирования также называется MMR {modified modified READ), то есть, дважды модифицированный READ расшифровывается как relative element adress designate - обозначение относительного адреса элемента). Такое странное словосочетание объясняется тем, что этот алгоритм является модификацией одномерной схемы, которая, в свою очередь, по-лучена модификацией оригинального метода Хаффмана.
Метод работает, сравнивая текущую отсканированную строку, называемую кодируемощ со строкой, отсканированной на предыдущем проходе, которая называется справочной строкой. При этом будет сжиматься разность этих строк. Алгоритм исходит из логичного предположения, что две соседние строки обычно отличаются всего несколькими пелами. При этом предполагается, что документ начинается строкой белых пелов, которая служит начальной справочной строкой. После кодирования первая строка становится справочной, а вторая строка - кодируемой. Как и при одномерном кодировании предполагается, что строка начинается белым пелом, который игнорируется приемником.
Метод двумерного кодирования менее надежен, чем одномерный метод, поскольку ошибка в декодировании некоторой строки вызовет ошибки при декодировании последующих строк, и эта волна ошибок может распространиться до конца по всему документу. Вот почему стандарт Т4 (Group 3) включает требование, что после строки, закодированной одномерным методом, следует не более К — 1 строк, закодированных двумерной схемой. Для стандартного разрешения К = 2^, К = 4. Стандарт Т6 не содержит этого требования и использует только двумерное кодирование.
Сканирование кодируемой строки и ее сравнение со справочной строкой делается в трех случаях или модах. Мода определяется при сравнении очередной серии пелов справочной строки с текущей серией (aoai), а также со следующей серией (aia2) кодируемой строки. Каждая из этих серий может быть белой или черной. Опишем эти три моды. Проходная мода. Это случай, когда (6162) находится слева от (aia2), а 62 - слева от ai. Эта мода не включает случай, когда 2 находится над ai. Когда эта мода установлена, то блок (6162) кодируется с помощью кодов табл. 1.22 и передается. Указатель ао устанавливается под 62^ четыре величины 6i, 62, «i и 02 обновляются.
Вертикальная мода. В этом случае (6162) частично перекрывается с (aia2), но не более чем тремя пелами. Если предположить, что соседние строки отличаются не сильно, то это будет самый частый случай. При обнаружении этой моды генерируется один из семи кодов и посылается. Производительность двумерной схемы зависит от того, насколько часто имеет место эта мода. Горизонтальная мода. Серия (&1&2 ) перекрывается с (aia2) более чем по трем пелам. При обнаружении этой моды серии (0011) и (01О2) кодируются с помощью таблицы и передаются. Указатели обновляются как в случаях 1 и 2.
Процесс продолжается до тех пор, пока не достигнет конец кодируемой строки. Кодер предполагает дополнительный пел справа от строки, цвет которого противоположен цвету последнего пела. Расширенный код используется для преждевременного обрывания процесса кодирования до достижения конца страницы. Это необходимо сделать, если оставшаяся часть страницы будет передаваться другими кодами или в несжатой форме. Статистика здравого смысла говорит, что каждый американец из четырех - сумасшедший. Подумайте о троих ваших лучших друзьях: если они ОК, то - это вы. [Рита Мае Браун].
Как происходит потеря значащих цифр при кодировании. Переменные Low и High сближаются, и поскольку в этом примере Low всегда равна О, переменная High теряет свои значащие цифры при приближении к Low. Потеря значащих цифр происходит не только в этом случае, но всегда, когда Low и High должны близко сходиться. Из-за своего конечного размера переменные Low и High могут достигнуть значений, скажем 499996 и 500003, а затем, вместо того, чтобы получить значения с одинаковыми старшими цифрами, они станут равны 499999 и 500000. Поскольку самые значимые цифры остались разными, алгоритм ничего не даст на выход, не будет сдвигов, и следующая итерация только добавит цифры в младший разряд переменных. Старшие цифры будут потеряны, а первые 6 цифр не изменятся. Алгоритм будет работать, не производя выходных цифр, пока не достигнет eof.
Решить эту проблему можно, если заранее распознать эту ситуацию и поменять масштаб обеих переменных. В приведенном примере это следует сделать, когда обе переменные достигнут значений 49хххх и бОуууу. Необходимо удалить вторую значащую цифру, получить значения 4хххх0 и 5уууу9, а затем увеличить счетчик cntr. Возможно, смену масштаба придется делать несколько раз до тех пора, пока не сравняются самые значащие цифры. После этого самая значащая цифра (это будет 4 или 5) подается на выход, за которой следует cntr нулей (если переменные сходятся к 4) или девяток (если они стремятся к 5).
- RSS
Наши услуги: