Materi Sebelumnya:
1. Pengantar Operasi Geometrik
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.
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:
>> Img = Perbesar2('C:\Image\lena128.png', 4, 4);
>> imshow(Img);
Hasilnya dapat dilihat pada gambar dibawah ini:
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:
Operasi pencerminan merupakan salah satu operasi geometrik yang paling sederhana.
Efek pencerminan
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.
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);
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);
% 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
>> 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
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