亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ezwdos.pas

?? ezw的pascal源碼
?? PAS
字號:
{
EZW.PAS

Unit for Embedded Zero Tree coding.

Based on "Embedded Image Coding Using Zerotrees of Wavelet Coefficients"
by Jerome M. Shapiro, IEEE Transactions on Signal Processing, Vol.41, No.12,
December 1993, pp 3445-3462.

A fifo is used in the dominant pass which results in a so-called Morton order
scan instead of Shapiro's raster scan (see figure 2 in "Analysis Based Coding
of Image Transform and Subband Coefficients" by V. Ralph Algazi and Robert
R. Estes, Jr.).

Morton order scan:
==================

   1 | 2 |  5   6 | 17  18  21  22
  ---+---|        |
   3 | 4 |  7   8 | 19  20  23  24
  -------+--------|
   9  10 | 13  14 | 25  26  29  30
         |        |
  11  12 | 15  16 | 27  28  31  32
  ----------------+---------------
  33  34   37  38 | 49  50  53  54
                  |
  35  36   39  40 | 51  52  55  56
                  |
  41  42   45  46 | 57  58  61  62
                  |
  43  44   47  48 | 59  60  63  64


Raster scan:
============

   1 | 2 |  5   6 | 17  18  19  20
  ---+---|        |
   3 | 4 |  7   8 | 21  22  23  24
  -------+--------|
   9  10 | 13  14 | 25  26  27  28
         |        |
  11  12 | 15  16 | 29  30  31  32
  ----------------+---------------
  33  34   35  36 | 49  50  51  52
                  |
  37  38   39  40 | 53  54  55  56
                  |
  41  42   43  44 | 57  58  59  60
                  |
  45  46   47  48 | 61  62  63  64


Subband distribution:
=====================

  LL | HL | HL   HL | HL   HL   HL   HL
  ---+--- |         |
  LH | HH | HL   HL | HL   HL   HL   HL
  --------+---------|
  LH   LH | HH   HH | HL   HL   HL   HL
          |         |
  LH   LH | HH   HH | HL   HL   HL   HL
  ------------------+------------------
  LH   LH   LH   LH | HH   HH   HH   HH
                    |
  LH   LH   LH   LH | HH   HH   HH   HH
                    |
  LH   LH   LH   LH | HH   HH   HH   HH
                    |
  LH   LH   LH   LH | HH   HH   HH   HH


(C) C. Valens, <c.valens@mindless.com>

Created    : 01/05/1998
Last update: 25/05/1998
}

program ezwdos;

{$define debug}
{$define disk}

uses
{$ifdef disk}
  matrices, diskfifo, disklist;
{$else}
  matrices, fifo, list;
{$endif}

type
  ezw_file_header = record
    height, width: integer;
    threshold: element_type;
  end;

const
(* Shapiro's example data *)
  example: array[0..7, 0..7] of integer = (
    ( 63,-34, 49, 10,  7, 13,-12,  7 ),
    (-31, 23, 14,-13,  3,  4,  6, -1 ),
    ( 15, 14,  3,-12,  5, -7,  3,  9 ),
    ( -9, -7,-14,  8,  4, -2,  3,  2 ),
    ( -5,  9, -1, 47,  4,  6, -2,  2 ),
    (  3,  0, -3,  2,  3, -2,  0,  4 ),
    (  2, -3,  6, -4,  3,  6,  3,  6 ),
    (  5, 11,  5,  6,  0,  3, -4,  4 )
  );

(* Code alphabet. *)
  zero = 0; (* binary 0 *)
  one  = 1; (* binary 1 *)
  ztr  = 2; (* binary 00 *)
  pos  = 3; (* binary 01 *)
  neg  = 4; (* binary 11 *)
  iz   = 5; (* binary 10 *)

var
  M: matrix;
  error: boolean;
  zeroes, ones: longint;
  ezw_file: file;
  output_byte, mask: char;
  header: ezw_file_header;

procedure load_data(var m: matrix);
var
  i, j: integer;
begin
  for i:=0 to 7 do begin
    for j:=0 to 7 do begin
      put_matrix_element(m,i,j,element_type(example[i,j]));
    end;
  end;
end;

(*
* Puts a bit in the output stream.
*)
procedure put_bit(bit: char);
begin
  if bit='1' then begin
    output_byte := Chr(Ord(output_byte) or Ord(mask));
    inc(ones);
  end
  else inc(zeroes);

  mask := Chr(Ord(mask) shr 1);
  if Ord(mask)=0 then begin
    BlockWrite(ezw_file,output_byte,1);
    output_byte := Chr(0);
    mask := Chr($80);
  end;
end;

(*
* Puts dominant-pass and subordinate-pass codes in the output stream.
*)
procedure output_code(code: integer);
begin
  case code of
    zero: begin
            put_bit('0');
{$ifdef debug}
            Write('0');
{$endif debug}
          end;
    one : begin
            put_bit('1');
{$ifdef debug}
            Write('1');
{$endif debug}
          end;
    pos : begin
            put_bit('0');
            put_bit('1');
{$ifdef debug}
            Write('p');
{$endif debug}
          end;
    neg : begin
            put_bit('1');
            put_bit('1');
{$ifdef debug}
            Write('n');
{$endif debug}
          end;
    ztr : begin
            put_bit('0');
            put_bit('0');
{$ifdef debug}
            Write('t');
{$endif debug}
          end;
    iz  : begin
            put_bit('1');
            put_bit('0');
{$ifdef debug}
            Write('i');
{$endif debug}
          end;
  end;
end;

(*
* Returns the largest value in a descendance tree.
*)
function max_descendant(m: matrix; x, y: integer): element_type;
var
  i, j, min_x, max_x, min_y, max_y: integer;
  temp, max: element_type;
begin
  if (x=0) and (y=0) then begin
    temp := get_matrix_element(m,0,0);
    put_matrix_element(m,0,0,min_element_type);
    max := abs_matrix_max(m);
    put_matrix_element(m,0,0,temp);
  end
  else begin
    min_x := x shl 1;
    min_y := y shl 1;
    max_x := (x+1) shl 1;
    max_y := (y+1) shl 1;
    if (min_x=m.c) or (min_y=m.r) then max_descendant := 0;

    max := 0;
    while (max_y<=m.r) and (max_x<=m.c) do begin
      for i:=min_y to max_y-1 do begin
        for j:=min_x to max_x-1 do begin
          temp := Abs(get_matrix_element(m,i,j));
          if temp>max then max := temp;
        end;
      end;
      min_x := min_x shl 1;
      max_x := max_x shl 1;
      min_y := min_y shl 1;
      max_y := max_y shl 1;
    end;

  end;

  max_descendant := max;

end;

(*
* Returns TRUE if descendance tree is a zerotree.
*)
function zerotree(m: matrix; x, y, threshold: integer): boolean;
var
  i, j, min_x, max_x, min_y, max_y: integer;
  temp, max: element_type;
  stop: boolean;
begin
  stop := FALSE;
  if (x=0) and (y=0) then begin
    temp := get_matrix_element(m,0,0);
    put_matrix_element(m,0,0,min_element_type);
    max := abs_matrix_max(m);
    put_matrix_element(m,0,0,temp);
    if max>=threshold then stop := TRUE;
  end
  else begin
    min_x := x shl 1;
    min_y := y shl 1;
    max_x := (x+1) shl 1;
    max_y := (y+1) shl 1;
    if (min_x=m.c) or (min_y=m.r) then zerotree := TRUE;

    max := 0;
    while (max_y<=m.r) and (max_x<=m.c) do begin
      for i:=min_y to max_y-1 do begin
        for j:=min_x to max_x-1 do begin
          temp := Abs(get_matrix_element(m,i,j));
          if temp>=threshold then begin
            stop := TRUE;
            break;
          end;
        end;
        if stop=TRUE then break;
      end;
      if stop=TRUE then break;
      min_x := min_x shl 1;
      max_x := max_x shl 1;
      min_y := min_y shl 1;
      max_y := max_y shl 1;
    end;
  end;
  if stop=TRUE then zerotree := FALSE
  else zerotree := TRUE;
end;

(*
* Returns a dominant-pass-code from the alphabet [pos,neg,ztr,iz].
*)
function code(m: matrix; x, y: integer; threshold: element_type): integer;
var
  temp: element_type;
begin
  temp := get_matrix_element(m,y,x);
  if Abs(temp)>=threshold then begin
    if temp>=0 then code := pos
    else code := neg;
  end
  else begin
(*    if (max_descendant(m,x,y)<threshold) then code := ztr*)
    if zerotree(m,x,y,threshold)=TRUE then code := ztr
    else code := iz;
  end;
end;

(*
* Appends a value to the subordinate list.
*)
procedure to_sub_list(value: element_type);
var
  d: list_type;
begin
(* Put only coefficient magnitude in list, sign is allready coded. *)
  d.x := Abs(value);
  d.y := 0;
  append_to_list(d);
end;

(*
* Builds a dominant pass EZW-element from a matrix element and a threshold.
*)
procedure process_element(m: matrix; threshold: element_type;
                          var s: ezw_element);
begin
  s.code := code(m,s.x,s.y,threshold);
  if (s.code=pos) or (s.code=neg) then begin
    to_sub_list(get_matrix_element(m,s.y,s.x));
    put_matrix_element(m,s.y,s.x,0);
  end;
end;

(*
* Performs one complete dominant pass. Dominant-pass-codes are sent to the
* output stream and the subordinate list is updated.
*)
procedure dominant_pass(m: matrix; threshold: element_type);
var
  s: ezw_element;
  min_x, max_x, min_y, max_y: integer;
  level: integer;
begin
  s.x := 0;
  s.y := 0;
  process_element(m,threshold,s);
  output_code(s.code);

  s.x := 1;
  s.y := 0;
  process_element(m,threshold,s);
  put_in_fifo(s);
  s.x := 0;
  s.y := 1;
  process_element(m,threshold,s);
  put_in_fifo(s);
  s.x := 1;
  s.y := 1;
  process_element(m,threshold,s);
  put_in_fifo(s);

  get_from_fifo(s);
  if fifo_empty=FALSE then output_code(s.code);

  while fifo_empty=FALSE do begin
    if s.code<>ztr then begin
      min_x := s.x shl 1;
      max_x := min_x+1;
      min_y := s.y shl 1;
      max_y := min_y+1;
      if (max_x<=m.c) and (max_y<=m.r) then begin
        for s.y:=min_y to max_y do begin
          for s.x:=min_x to max_x do begin
            process_element(m,threshold,s);
            put_in_fifo(s);
          end;
        end;
      end;
    end;
    get_from_fifo(s);
    if fifo_empty=FALSE then output_code(s.code);
  end;

end;

(*
* Performs one subordinate pass.
*)
procedure subordinate_pass(threshold: element_type);
var
  d: list_type;
  i: Longint;
  found: boolean;
begin
  if threshold>0 then begin
    for i:=0 to list_length-1 do begin
      get_list_element(d,i,found);
      if found=TRUE then begin
        if (d.x and threshold<>0) then output_code(one)
        else output_code(zero);
      end;
    end;
  end;
end;

(*
* EZW-codes matrix m, returns initial threshold.
*)
procedure EZW_code(m: matrix; threshold: element_type);
begin
  while threshold<>0 do begin
    dominant_pass(m,threshold);
    subordinate_pass(threshold shr 1);
    threshold := threshold shr 1;
  end;
end;

(*
* Main.
*)
begin
  Writeln;

  header.height := 8;
  header.width := 8;
  create_matrix(M,header.height,header.width,error);
  if error=TRUE then Exit;
  load_data(M);
  header.threshold := 1 shl Trunc((Ln(abs_matrix_max(M))/Ln(2)));

  Assign(ezw_file,'out.ezw');
  Rewrite(ezw_file,1);
  BlockWrite(ezw_file,header,SizeOf(header));

  zeroes := 0;
  ones := 0;
  output_byte := Chr(0);
  mask := Chr($80);
{$ifdef debug}
  write_matrix(M);
{$endif debug}
  EZW_code(M,header.threshold);
  if Ord(mask)<>0 then BlockWrite(ezw_file,output_byte,1);
{$ifdef debug}
  Writeln;
  Writeln(zeroes+ones,' bits: ',zeroes,' zeroes, ',ones,' ones.');
{$endif debug}

  Close(ezw_file);

  destroy_matrix(M);
  destroy_fifo;
  destroy_list;
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品电影一区二区三区 | 亚洲国产高清在线观看视频| 成人蜜臀av电影| 久久99精品久久久久久动态图| 一区二区高清视频在线观看| 中国av一区二区三区| 久久精品亚洲一区二区三区浴池 | 日韩欧美卡一卡二| 6080日韩午夜伦伦午夜伦| 91成人免费电影| 99久久精品国产麻豆演员表| 丁香婷婷深情五月亚洲| 国产在线精品一区二区三区不卡| 老司机免费视频一区二区三区| 日韩黄色免费电影| 午夜精品久久久久久不卡8050| 尤物av一区二区| 亚洲丝袜美腿综合| 亚洲欧美激情视频在线观看一区二区三区| 日韩三级中文字幕| 亚洲精品一线二线三线| 精品国产乱码久久久久久图片| 日韩欧美高清一区| 精品国产乱子伦一区| 久久影音资源网| 久久网站热最新地址| 国产亚洲欧美日韩俺去了| 国产亚洲1区2区3区| 国产精品美女一区二区在线观看| 中文字幕永久在线不卡| 亚洲欧洲精品一区二区精品久久久| 中文字幕一区日韩精品欧美| 成人免费在线播放视频| 一区二区三区日韩欧美精品| 亚洲一区二区av在线| 午夜精品久久久久久久久久 | 国产毛片精品视频| 国产乱一区二区| 国产成人亚洲综合a∨婷婷| 国产麻豆欧美日韩一区| 成人免费毛片高清视频| 色噜噜夜夜夜综合网| 欧美日韩极品在线观看一区| 日韩免费在线观看| 国产欧美精品一区aⅴ影院| 亚洲欧洲日本在线| 亚洲sss视频在线视频| 欧美aa在线视频| 国产69精品一区二区亚洲孕妇| 91麻豆免费观看| 欧美日韩dvd在线观看| 国产精品全国免费观看高清| 1024国产精品| 亚洲精品日日夜夜| 天天综合网天天综合色| 国产一区二区91| 国产成人av一区二区三区在线| 91一区二区三区在线观看| 欧美日本韩国一区二区三区视频| 精品国产1区2区3区| 国产精品久久看| 天堂成人国产精品一区| 国产精品一区一区三区| 色狠狠桃花综合| 精品国产乱码久久久久久免费 | 亚洲一区二区免费视频| 美日韩黄色大片| 成人av影院在线| 8v天堂国产在线一区二区| 久久久久久久久久久久久女国产乱 | 欧美羞羞免费网站| 欧美日韩一二三| 国产嫩草影院久久久久| 日韩高清一级片| 91在线看国产| 日韩一区二区在线看| 国产精品日产欧美久久久久| 日韩成人午夜电影| 不卡一区二区中文字幕| 91精品国产综合久久精品| 亚洲视频在线一区观看| 韩国成人精品a∨在线观看| 色综合一个色综合亚洲| 日韩亚洲欧美一区二区三区| 国产欧美日韩精品a在线观看| 亚洲国产精品一区二区久久| 国产精品99久久久久久宅男| 欧美精品色综合| 久久久噜噜噜久久中文字幕色伊伊 | 一本到三区不卡视频| 欧美精品第一页| 亚洲少妇30p| 国产高清亚洲一区| 这里只有精品99re| 亚洲精品欧美专区| 不卡av在线免费观看| 久久久亚洲精华液精华液精华液 | 久久综合九色综合欧美98| 亚洲一线二线三线久久久| 99国产精品99久久久久久| 国产片一区二区三区| 麻豆91精品91久久久的内涵| 91黄视频在线| 亚洲精品一二三| 91亚洲精华国产精华精华液| 精品国产乱码久久久久久免费 | 91精品国产乱| 亚洲国产三级在线| 91视频91自| 国产精品系列在线| 国产成人免费av在线| 337p粉嫩大胆噜噜噜噜噜91av | 久久只精品国产| 美女一区二区在线观看| 91精品欧美一区二区三区综合在| 亚洲成人av一区二区| 91伊人久久大香线蕉| 亚洲国产高清在线观看视频| 成人午夜激情片| 亚洲欧洲www| 99re视频这里只有精品| 国产精品久久久久久久久久免费看 | 一区二区三区久久| 91视频.com| 亚洲一卡二卡三卡四卡无卡久久| 91久久免费观看| 国产精品一区在线观看你懂的| 日韩精品一区在线观看| 洋洋成人永久网站入口| 欧美色综合网站| 天天影视色香欲综合网老头| 91精品国产色综合久久| 日韩精品久久理论片| av在线不卡免费看| 一区二区成人在线| 91精品国产色综合久久不卡蜜臀 | 久草中文综合在线| 久久精品这里都是精品| 看片网站欧美日韩| 国产午夜精品久久久久久久 | 国产一区在线视频| 亚洲国产精品精华液2区45| 九九**精品视频免费播放| 久久尤物电影视频在线观看| 国产69精品久久久久毛片| 一区在线中文字幕| 欧美性猛片xxxx免费看久爱| 午夜久久久久久久久久一区二区| 欧美性大战久久久| 久久精品99国产精品日本| 欧美激情一区二区三区四区| 91免费观看视频| 日韩在线一区二区三区| 日韩视频中午一区| 高清成人在线观看| 亚洲精品国久久99热| 日韩女优av电影在线观看| 91影视在线播放| 日本va欧美va瓶| 亚洲天堂网中文字| 91麻豆精品国产自产在线观看一区| 国产精品88av| 亚洲精品国产品国语在线app| 久久综合久色欧美综合狠狠| 日本丰满少妇一区二区三区| 精品一区二区三区免费| 亚洲一级二级三级| 精品国产欧美一区二区| 精品视频在线免费| 国产精品一区二区你懂的| 亚洲福利视频一区| 久久夜色精品国产噜噜av| 欧美最猛黑人xxxxx猛交| 国产69精品久久777的优势| 亚洲成人tv网| 亚洲欧美国产高清| 久久亚洲精精品中文字幕早川悠里| 欧美日韩一卡二卡| 国产高清不卡一区二区| 日韩中文欧美在线| 亚洲一级电影视频| 中文字幕巨乱亚洲| 久久久久9999亚洲精品| 欧美日韩国产小视频在线观看| 91在线播放网址| 成人精品小蝌蚪| 久草这里只有精品视频| 亚洲国产精品久久不卡毛片| 国产日韩欧美精品综合| 欧美一区二区美女| 色婷婷狠狠综合| 日韩精品一区二区在线观看| 欧美亚洲动漫精品| av电影在线观看一区| 粉嫩绯色av一区二区在线观看 | 国产精品系列在线播放| 日韩福利视频网| 亚洲欧美另类图片小说| 亚洲国产精品av| 久久久精品人体av艺术|