Материал: CCIT

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

CCIT- алгоритм сжатия изображения

Алгоритм Хаффмана с фиксированной таблицей CCITTGroup 3

Близкая модификация алгоритма используется при сжатии черно-белых изображений (один бит на пиксел). Полное название данного алгоритма CCITT Group 3. Это означает, что данный алгоритм был предложен третьей группой по стандартизации Международного Консультационного Комитета по Телеграфии и Телефонии (Consultative Committee International Telegraph and Telephone). Последовательности подряд идущих черных и белых точек в нем заменяются числом, равным их количеству. А этот ряд, уже в свою очередь, сжимается по Хаффману с фиксированной таблицей.

Определение: Набор идущих подряд точек изображения одного цвета называется серией.Длина этого набора точек называется длиной серии.

В таблице, приведенной ниже, заданы два вида кодов:

  • Коды завершения серий — заданы с 0 до 63 с шагом 1.

  • Составные (дополнительные) коды — заданы с 64 до 2560 с шагом 64.

Каждая строка изображения сжимается независимо. Мы считаем, что в нашем изображении существенно преобладает белый цвет, и все строки изображения начинаются с белой точки. Если строка начинается с черной точки, то мы считаем, что строка начинается белой серией с длиной 0. Например, последовательность длин серий 0, 3, 556, 10, ... означает, что в этой строке изображения идут сначала 3 черных точки, затем 556 белых, затем 10 черных и т.д.

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

Алгоритм компрессии выглядит так:

for(по всем строкам изображения) {      Преобразуем строку в набор длин серий;      for(по всем сериям) {          if(серия белая) {              L= длина серии;              while(L > 2623) { // 2623=2560+63                  L=L-2560;                  ЗаписатьБелыйКодДля(2560);              }              if(L > 63) {                  L2=МаксимальныйСостКодМеньшеL(L);                  L=L-L2;                  ЗаписатьБелыйКодДля(L2);              }              ЗаписатьБелыйКодДля(L);              //Это всегда код завершения          }          else {              [Код аналогичный белой серии,              с той разницей, что записываются              черные коды]          }      }      // Окончание строки изображения  }

Поскольку черные и белые серии чередуются, то реально код для белой и код для черной серии будут работать попеременно.

В терминах регулярных выражений мы получим для каждой строки нашего изображения (достаточно длинной, начинающейся с белой точки) выходной битовый поток вида:

((<Б-2560>)*[<Б-сст.>]<Б-зв.>(<Ч-2560>)*[<Ч-сст.>]<Ч-зв.>)+

[(<Б-2560>)*[<Б-сст.>]<Б-зв.>]

Где ()* — повтор 0 или более раз, ()+.— повтор 1 или более раз, [] — включение 1 или 0 раз.

Для приведенного ранее примера: 0, 3, 556, 10... алгоритм сформирует следующий код: <Б-0><Ч-3><Б-512><Б-44><Ч-10>, или, согласно таблице, 001101011001100101001011010000100 (разные коды в потоке выделены для удобства). Этот код обладает свойством префиксных кодов и легко может быть свернут обратно в последовательность длин серий. Легко подсчитать, что для приведенной строки в 569 бит мы получили код длиной в 33 бита, т.е. коэффициент сжатия составляет примерно 17 раз.

Усредняющий фильтр

Усредняющий фильтр 'average'  Усредняющий фильтр относится к классу фильтров низких частот. Он может использоваться для уменьшения влияния шума на изображение, однако его применение приводит к размытию изображения и ухудшению его четкости. Каждый элемент маски такого фильтра равен 1 /(m*n), где ш и п — размеры маски (число строк и столбцов). 

Фильтр average. Синтаксис fspecial ('average',[r c]). Прямоугольный усредняющий фильтр размера r×c. Он предназначен для фильтрации высокочастотного шума, и его работа сопровождается размытием изображения. Применение в программе Matlab фильтра average следующий:

I = imread('1.tif');figure, imshow(I);

h = fspecial ('average', [3 3]);

I2 = imfilter (I,h);figure, imshow(I2);

Применение фильтра average к исходному изображению приводит к небольшому размытию растровых точек.

Алгоритм работы усредняющего фильтра заключается в замене значения

яркости в

текущем пикселе на среднюю яркость, вычисленную по его 8 окрестностям,

включая и сам элемент. Этот фильтр является самым простым. К недостаткам

его можно отнести сглаживание ступенчатых и пилообразных функций. Кроме

того пиксели, имеющее существенно отличное значение яркости и являющимися

шумовыми могут вносить значительный вклад в результат обработки.

Реализация фильтра представлена в виде процедуры:

Procedure AverageFilter(Value:Integer);

Данная процедура осуществляет алгоритм усредняющего фильтра

применительно к объекту TBitmap. В него предварительно должна быть

загружено изображение (Рис. № 2). Результат работы усредняющего филтра

можно увидеть на рис. № 3. Параметр Value – порог при котором производятся

манипуляции с пикселом.

Procedure TMainForm.AverageFilter;

var

PrevisionLine:pByteArray;

CurrentLine:pByteArray;

NextLine:pByteArray;

I,J:Integer;

Summ:Integer;

begin

if Image1.Picture.Bitmap.PixelFormat = pf8bit then

begin

for I := 0 to Image1.Picture.Bitmap.Height - 1 do

begin

CurrentLine := Image1.Picture.Bitmap.ScanLine[I];

for J := 0 to Image1.Picture.Bitmap.Width - 1 do

begin

Summ := 0;

if I > 0 then

begin

PrevisionLine := Image1.Picture.Bitmap.ScanLine[I - 1];

if J > 0 then

begin

Summ := Summ + PrevisionLine^[J - 1];

end;

Summ := Summ + PrevisionLine^[J];

if J + 1 < Image1.Picture.Bitmap.Width then

begin

Summ := Summ + PrevisionLine^[J + 1];

end;

end;

if J > 0 then

begin

Summ := Summ + CurrentLine^[J - 1];

end;

Summ := Summ + CurrentLine^[J];

if J + 1 < Image1.Picture.Bitmap.Width then

begin

Summ := Summ + CurrentLine^[J + 1];

end;

if I + 1 < Image1.Picture.Bitmap.Height then

begin

NextLine := Image1.Picture.Bitmap.ScanLine[I + 1];

if J > 0 then

begin

Summ := Summ + NextLine^[J - 1];

end;

Summ := Summ + NextLine^[J];

if J + 1 < Image1.Picture.Bitmap.Width then

begin

Summ := Summ + NextLine^[J + 1];

end;

end;

if (Summ div 9) <= Value then

CurrentLine^[J] := Summ div 9;

end;

end;

Image1.Visible := False;

Image1.Visible := True;

N4.Enabled := True;

end

else

MessageBox(Handle,'Такой формат файла пока не подерживается...',

'Слабоват я пока...',MB_OK or MB_ICONSTOP or

MB_APPLMODAL);

end;

Ядерный магнитный резонанс

Я́дерний магні́тний резона́нс (ЯМР) — це явище резонансного поглинання радіочастотних хвиль деякими ядрами атомів, що розміщені у зовнішньому магнітному полі. Найчастіше ЯМР досліди проводять на ядрах атомів водню, тобто на протонах, або на ядрах ізотопу вуглецю 13С. На базі ЯМР була розвинута ЯМР-спектроскопія, що дозволяє з великою точністю розрізняти ядра елемента за їхніми властивостями в різному оточенні в молекулі. Ідентифікує структуромінливі сполуки.