OPERASI GEOMETRIK - andyusuf-informatika

New Post

Kamis, 08 Juni 2017

OPERASI GEOMETRIK




1. Pengantar Operasi Geometrik

Operasi geometrik adalah operasi pada citra yang dilakukan secara geometris seperti translasi, rotasi, dan penyekalaan. Pada operasi seperti ini terdapat pemetaan geometrik, yang menyatakan hubungan pemetaan antara piksel pada citra masukan dan piksel pada citra keluaran. Secara prinsip, terdapat dua cara yang dapat dipakai. Pertama yaitu pemetaan ke depan dan kedua berupa pemetaan ke belakang. Perbedaan secara visual kedua cara tersebut diperlihatkan pada Gambar Dibawah ini: 

Gambar pemetaan geometrik

Gambar di atas menjelaskan bahwa pada cara pemetaan ke depan, posisi pada citra keluaran ditentukan dengan acuan pemrosesan pada citra masukan. Pada gambar tersebut terlihat bahwa kalau piksel keluaran berada pada posisi yang tidak tepat (tidak berupa bilangan bulat), penempatannya dapat berada pada salah satu dari empat kemungkinan.

Dengan cara seperti ini, ada kemungkinan sebuah piksel pada citra keluaran tidak pernah diberi nilai atau malah diberi nilai lebih dari satu kali. Hal ini berbeda dengan pada pemetaan ke belakang. Pada pemetaan ke belakang, mengingat pemrosesan dimulai dari citra keluaran maka dipastikan bahwa semua piksel pada citra keluaran akan diberi nilai sekali saja berdasarkan piksel masukan.

Pada Gambar diatas (a), piksel yang digunakan untuk menentukan piksel keluaran dapat ditentukan oleh salah satu piksel yang tercakup dalam kotak yang menggantung pada keempat piksel. Hal itu merupakan cara tersederhana yang dapat dilakukan dan biasa dinamakan sebagai pemilihan berdasarkan tetangga terdekat. Cara lain yang dapat dilakukan adalah dengan memperhitungkan empat piksel yang dapat mewakilinya. Cara ini dikenal dengan sebutan interpolasi bilinear, yaitu linear di arah vertikal dan mendatar. Kedua cara ini akan dibahas saat membicarakan pemutaran citra (Subbab 5.3). 


2. Menggeser Citra

Penggeseran citra ke arah mendatar atau vertikal dapat dilaksanakan dengan mudah. Rumus yang digunakan sebagai berikut: 

𝑥𝑏𝑎𝑟𝑢 = 𝑥𝑙𝑎𝑚𝑎 + 𝑠𝑥       (5.1)
 
𝑦𝑏𝑎𝑟𝑢 = 𝑦𝑙𝑎𝑚𝑎 + 𝑠𝑦       (5.2)

Untuk penyederhanaan pembahasan, sx dan sy dianggap bertipe bilangan bulat.

3. Memutar Citra

Suatu citra dapat diputar dengan sudut 𝜃 seiring arah jarum jam atau berlawanan arah jarum jam dengan pusat putaran pada koordinat (0,0). Gambar dibawah ini menjelaskan bentuk pemutaran citra. Adapun rumus yang digunakan untuk memutar citra dengan sudut 𝜃 berlawanan arah jam berupa:
𝑥𝑏𝑎𝑟𝑢 = 𝑥 ∗ 𝐶𝑜𝑠(𝜃) + 𝑦∗ 𝑆𝑖𝑛(𝜃)     (5.3)
 
𝑦𝑏𝑎𝑟𝑢 = 𝑦 ∗ 𝐶𝑜𝑠(𝜃) − 𝑥 ∗ 𝑆𝑖𝑛(𝜃)     (5.4)

Gambar Pemutaran citra dengan pusat (0, 0)
Berdasarkan Persamaan 5.3 dan 5.4, pemutaran citra dengan sudut 𝜃 searah jarum jam dapat dilakukan. Caranya, dengan menggunakan x dan y sebagai posisi baru dan xbaru justru sebagai posisi lama. Pada saat menghitung dengan rumus di atas, apabila posisi koordinat (ybaru ,xbaru) berada di luar area [1, lebar] dan [1, tinggi], intensitas yang digunakan berupa nol. Cara inilah yang merupakan contoh pemetaan ke belakang.


4. Memperbesar Citra

Suatu citra dapat diperbesar dengan membuat setiap piksel menjadi beberapa piksel gambar dibawah ini memberikan contoh cara memperbesar citra.

Gambar cara memperbesar citra

Pada contoh diatas pembesaran pada arah vertikal dan horizontal sebesar 2 kali

Berikut adalah fungsi yang memperlihatkan cara pembesaran citra tersebut.


function G = perbesar(berkas, sy, sx)
% PERBESAR Melakukan operasi pembesaran citra.
% Masukan: berkas = nama berkas image
% sy : skala
pembesaran pada sumbu Y
% sx : skala pembesaran pada sumbu X
%
% Versi 1
F = imread(berkas);
[tinggi, lebar] = size(F);
tinggi_baru = tinggi * sy;
lebar_baru = lebar * sx;
F2 = double(F);
for y=1 : tinggi_baru
y2 = ((y
-
1) / sy) + 1;
for x=1 : lebar_baru
x2 = ((x
-
1) / sx) + 1;
G(y, x) = F(floor(y2), floor(x2));
end
end
G = uint8(G);
Perlu diketahui tinggi dan lebar citra keluaran dihitung berdasarkan
tinggi_baru = tinggi * sy;
lebar_baru = lebar * sx;

Kemudian

y2 = ((y-1) / sy) + 1;

Digunakan untuk memperoleh nilai y2 yang berkisar antara satu sampai dengan lebar citra asli. Hal serupa dilakukan untuk x2 yang dilaksanakan melalui

x2 = ((x-1) / sx) + 1; 
 
 Brdasarkan fungsi perbesar diatas, dapat diberikan perintah seperti berikut:

>> Img=perbesar('C:\Image\lena128.png',3,3);

 Pada perintah diatas citra lena12.png diperbesar tiga kali baik pada arah vertikal maupun horizontal.
Selanjutnya hasil pembesaran ditampilkan melalui

>> imshow(Img);

Maka hasilnya dapat dilihat pada gambar dibawah ini:

Gambar contoh pembesaran citra

Untuk memperhalus hasil pembesaran citra, interpolasi citra perlu dilakukan.
Contoh dapat dilihat pada kode berikut:


function G = perbesar2(berkas, sy, sx)
% PERBESAR2 Melakukan operasi pembesaran citra
% dengan interpolasi.
% Masukan: berkas = nama berkas image
% sy : skala pembesaran pada
sumbu Y
% sx : skala pembesaran pada sumbu X
%
% Versi 2
F = imread(berkas);
[tinggi, lebar] = size(F);
tinggi_baru = round(tinggi * sy);
lebar_baru = round(lebar * sx);
F2 = double(F);
for y=1 : tinggi_baru
y2 = (y
-
1) / sy + 1;
for x=1 : lebar_baru
x2 = (x-1) / sx + 1;
% Lakukan interpolasi bilinear
p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;
if (floor(x2)==lebar) || …
(floor(y2) == tinggi)
G(y, x) = F(floor(y2), floor(x2));
else
intensitas = (1-a)*((1-b)*F(p,q) + ...
b * F(p, q+1)) + ...
a *((1-b)* F(p+1, q) + ...
b * F(p+1, q+1));
G(y, x) = intensitas;
end
end
end
G = uint8(G);




Penghalusan citra keluaran dilakukan melalui interpolasi bilinear, seperti yang telah dibahas pada bahasan sebelumnya.

Untuk melihat hasil interpolasi pada pembesaran citra, dapatdiberikan perintah seperti berikut:

>> Img = Perbesar2('C:\Image\lena128.png', 4, 4);
>> imshow(Img);


Hasilnya dapat dilihat pada gambar dibawah ini:


Gambar contoh pembesaran citra dengan interpolasi

Cobalah untuk membandingkan hasil di atas dengan hasil pada Gambar sebelumnya.


5. Memperkecil Citra

Bagaimana kalau ingin memperkecil citra? Secara prinsip, pengecilan citra berarti mengurangi jumlah piksel. Algoritma yang digunakan untuk mewujudkan perbesar.m maupun perbesar2.m dapat digunakan untuk keperluan ini dengan m berupa bilangan pecahan seperti 1/2, ¼, 1/8, dan seterusnya. Contoh:

>> Img = perbesar2('C:\Image\lena256.png', 0.5, 0.5);
>> imshow(Img);

Hasilnya dapat dilihat pada Gambar dibawah ini:

Gambar contoh pengecilan dengan interpolasi



6. Pencerminan Citra

Operasi pencerminan merupakan salah satu operasi geometrik yang paling sederhana.

Efek pencerminan
horisontal : pencerminan pada sumbu Y
vertikal : pencerminan pada sumbu X
kombinasi : pencerminan pada sumbu Y dan X


Formula/rumus yang digunakan untuk pencerminan horizontal

x’ = –x

karena koordinat asal (x) bernilai nol atau positif, maka koordinat hasil (x’) yang diperoleh dari rumus akan selalu  bernilai nol atau negatif.
Padahal koordinat piksel citra tidak ada (tidak boleh) negatif.
Maka rumus dimodifikasi menjadi :



x’ – xc = –(x – xc) , dengan xc nilai koordinat garis tengah citra.
  x’ – xc = – x + xc
        x’ = 2xc – x

          w = lebar citra
          w – 1
          xc = (w–1)/2
          Karena xc = (w–1)/2

Karena xc = (w–1)/2
  Maka :
  x’ = 2 ((w–1)/2) – x
  x’ = w – 1 – x
Untuk pencerminan vertikal, tinggal mengganti rumus, menjadi :
y’ = –y
  y’ = h – 1 – y
Untuk pencerminan kombinasi, rumus keduanya digabungkan.
Kesimpulan :

  • PencerminanHorisontal :    x’ = w – 1 – x
               y’ = y (nilai koordinat y tetap)
  • Pencerminan Vertical         y’ = h – 1 – y
               x’ = x (nilai koordinat x tetap)
  • PencerminanKombinasi     x’ = w – 1 – x
                                         y’ = h –1 – y

Gambar Pencerminan Citra

Terima Kasih dan Semangat Belajar

Tidak ada komentar:

Posting Komentar