Zig-Zag Image Scanning

yadi on Sep 19th, 2007 said:

Mas pebbie..saya minta tolong ni…
saya buat fungsi untuk baca image bmp grayscale kemudian saya mau ubah nilai matriks pixel bmp ke dalam baris(array) dengan metode zig-zag misalnya.
matriks 4 x 4
23 10 3 1
9 7 2 0
8 1 0 0
4 1 0 0

jadi kalo di ubah ke dalam baris [23 10 9 8 7 3 1 2 1 4 1 0 0 0 0 0]

untuk melakukan traversal terhadap citra dengan alur zig-zag sebenarnya cukup melakukan modifikasi terhadap variabel iterasi dengan arah yang sesuai (kanan atas). misal untuk matriks berukuran 4×5 (lebar x tinggi) maka pembacaannya akan sesuai dengan angka pada contoh berikut :

1 2 6 7
3 5 8 14
4 9 13 15
10 12 16 19
11 17 18 20

untuk kasus pembacaan seperti pada pertanyaan di atas, yang perlu diubah dari kode di bawah ini hanya bagian operasi utama yang diganti dengan pembacaan nilai pixel citra.

procedure fill_matrix;
var
  i, j : integer;
  dx, dy : integer;
  ctr : integer;
  procedure turn;
  begin
    dy := -dy;
    dx := -dx;
  end;
begin
  { posisi awal }
  i := 0;
  j := 0;
  { arah awal : kanan atas }
  dx := 1;
  dy := -1;

  for ctr := 1 to width*height do begin
    { operasi utama : tulis }
    matriks[j][i] := ctr;

    { update posisi }
    i := i + dx;
    j := j + dy;
    
    { kasus pojok }
    if (j<0) and (i>=width) then begin
      j := 1;
      i := width-1;
      turn;
      continue;
    end;
    if (i<0) and (j>=height) then begin
      i := 1;
      j := height-1;
      turn;
      continue;
    end;
    
    { kasus mentok segitiga atas }
    if (dy&lt;0) and (j&lt;0) then begin
      j := 0;
      turn;
      continue;
    end;
    if (dx&lt;0) and (i < 0) then begin
      i := 0;
      turn;
      continue;
    end;
    
   { kasus mentok segitiga bawah }
    if (dy > 0) and (j >= height) then begin
      j := height-1;
      i := i + 2;
      turn;
      continue;
    end;
    if (dx > 0) and (i >= width) then begin
      i := width-1;
      j := j + 2;
      turn;
      continue;
    end;
  end;
end;

5 comments

  1. pebbie · September 27, 2007

    huh.. saya tidak yakin masalahnya dimana.. padahal dah disunting berkali-kali tetapi tetap saja tanda < tsb tidak mau hilang..

  2. Ping-balik: PressPosts / User / lullabyprincess / Submitted
  3. dimaz · Februari 8, 2008

    thank for a bit. yaahh hehe,, a lot..

  4. vals · Februari 24, 2008

    mas pebbie,,saya mau minta tolong ne…sorry lo ngerepotin..
    saya bingung cari algoritma buat Run-length encoding scanning vertical dan zig-zag..trims

  5. initial.nVn · Januari 26, 2012

    wew…
    ini yang saya cari”…
    maaf kalo rada pemalas untuk memikirkan algoritmanya…
    capi ijin Kopas boleh yah…
    thx…

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s