SlideShare a Scribd company logo
1 of 46
Download to read offline
BAB 5
Operasi
Geometrik
Setelah bab ini berakhir, diharapkan pembaca
mendapatkan pengetahuan mengenai hal-hal berikut dan
mampu mempraktikkannya.
 Pengantar operasi geometrik

 Penggeseran citra
 Pemutaran citra
 Interpolasi piksel
 Pemutaran citra berdasarkan sebarang koordi
 Pemutaran citra secara utuh
 Pembesaran citra
 Pengecilan citra
 Pembesaran citra dengan skala vertikal dan
horizontal
 Pencerminan citra
 Transformasi affine
 Efek ripple
 Efek twirl

 Transformasi spherical
 Transformasi bilinear
122

Pengolahan Citra, Teori dan Aplikasi

5.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 5.1.

Citra masukan

Citra keluaran

(b) Pemetaan ke depan

Citra masukan

Citra keluaran

(a) Pemetaan ke belakang
(mundur)

Gambar 5.1 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.
Operasi Geometrik

123

Lubang yang ditimbulkan karena piksel tidak diberi nilai pada
pemetaan ke depan dapat dilihat pada Gambar 5.5.

Pada Gambar 5.1(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).
5.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.
Contoh berikut menunjukkan program yang digunakan untuk melakukan
penggeseran citra.

Program : geser.m

% GESER Melakukan operasi penggeseran citra.
F = imread('c:Imagegedung.png');
[tinggi, lebar] = size(F);
124

Pengolahan Citra, Teori dan Aplikasi

sx = 45; % Penggesaran arah horisontal
sy = -35; % Penggesaran arah vertikal
F2 = double(F);
G = zeros(size(F2));
for y=1 : tinggi
for x=1 : lebar
xlama = x - sx;
ylama = y - sy;
if (xlama>=1) && (xlama<=lebar) && ...
(ylama>=1) && (ylama<=tinggi)
G(y, x) = F2(ylama, xlama);
else
G(y, x) = 0;
end
end
end
G = uint8(G);
figure(1); imshow(G);
clear all;

Akhir Program

Pada contoh di atas, citra digeser ke kanan sebesar 45 piksel (ditentukan
melalui sx) dan ke atas sebesar 35 piksel (diatur melalui sy). Apabila xlama
hasil perhitungan di luar jangkauan [1, lebar] atau ylama hasil perhitungan di
luar jangkauan [1, tinggi], intensitas piksel pada posisi (y, x) diisi dengan nol
(warna hitam). Posisi yang tidak berada pada posisi koordinat yang valid dalam
citra lama akan diisi dengan nilai nol melalui

G(y, x) = 0;

Hasilnya diperlihatkan pada Gambar 5.2.
Operasi Geometrik

125

(a) Citra gedung asli

(b) Hasil penggeseran

Gambar 5.2 Contoh penggeseran citra

Gambar hitam di bagian kiri dan bagian atas adalah efek dari
5.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
5.3 menjelaskan bentuk pemutaran citra. Adapun rumus yang digunakan untuk
memutar citra dengan sudut 𝜃 berlawanan arah jam berupa:
𝑥 𝑏𝑎𝑟𝑢 = 𝑥 ∗ 𝐶𝑜𝑠( 𝜃) + 𝑦 ∗ 𝑆𝑖𝑛 ( 𝜃)

(5.3)

𝑦 𝑏𝑎𝑟𝑢 = 𝑦 ∗ 𝐶𝑜𝑠( 𝜃) − 𝑥 ∗ 𝑆𝑖𝑛(𝜃)

(5.4)
126

Pengolahan Citra, Teori dan Aplikasi

(0,0)

Bingkai
citra hasil
rotasi

Bagian citra asli
yang masuk di
bingkai citra hasil

Hasil pemanfaatan pembalikan
perhitungan pemutaran citra
(pemetaan ke belakang)

Citra asli yang
diputar

Gambar 5.3 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. Implementasinya dapat dilihat berikut ini.

Program : rotasi.m

% ROTASI Melakukan Operasi pemutaran citra.
%
Versi 1
%
Menggunakan pendekatan pemetaan ke belakang
F = imread('c:Imagesungai.png');
[tinggi, lebar] = size(F);
sudut = 10; % Sudut pemutaran
rad = pi * sudut/180;
cosa = cos(rad);
Operasi Geometrik

127

sina = sin(rad);
F2 = double(F);
for y=1 : tinggi
for x=1 : lebar
x2 = round(x * cosa + y * sina);
y2 = round(y * cosa - x * sina);
if (x2>=1)
(y2>=1)
G(y, x)
else
G(y, x)
end

&& (x2<=lebar) && ...
&& (y2<=tinggi)
= F2(y2, x2);
= 0;

end
end
G = uint8(G);
figure(1); imshow(G);
clear all;

Akhir Program

Contoh hasil pemutaran dapat dilihat pada Gambar 5.4.

(a) Citra sungai asli

(b) Hasil pemutaran

Gambar 5.4 Contoh pemutaran citra

Apa yang terjadi kalau dilaksanakan pemetaan ke depan dengan
menggunakan rumus pada Persamaan 5.3 dan 5.4? Sebagaimana telah dijelaskan
di depan (Subbab 5.1), cara seperti itu dapat menimbulkan lubang pada citra hasil.
Artinya, akan ada piksel yang tidak terisi dengan piksel dari citra masukan. Untuk
melihat efek ini, cobalah jalankan program berikut.
128

Pengolahan Citra, Teori dan Aplikasi

Program : rotasi2.m

% ROTASI2 Melakukan operasi pemutaran citra.
%
Versi 2
%
Menggunakan pemetaan ke depan
F = imread('c:Imagegedung.png');
[tinggi, lebar] = size(F);
sudut = 5; % Sudut pemutaran
rad = pi * sudut/180;
cosa = cos(rad);
sina = sin(rad);
F2 = double(F);
G=zeros(tinggi, lebar);
for y=1 : tinggi
for x=1 : lebar
x2 = round(x * cosa - y * sina);
y2 = round(y * cosa + x * sina);
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
G(y2, x2) = F2(y, x);
end
end
end
G = uint8(G);
figure(1); imshow(G);
clear all;

Akhir Program

Hasilnya bisa dilihat pada gambar berikut.
Operasi Geometrik

129

(a) Citra gedung asli

(b) Hasil pemutaran yang
menimbulkan lubang-lubang
(bintik-bintik gelap) pada citra

Gambar 5.5 Efek pemetaan ke depan

Perhatikan pada Gambar 5.5(b). Titik-titik hitam pada citra adalah efek lubang
yang memerlukan penanganan lebih lanjut untuk menghilangkannya.
5.4 Interpolasi Piksel
Hasil pemutaran citra menggunakan rotasi.m menimbulkan efek bergerigi
pada objek citra. Hal itu diakibatkan oleh penggunaan nilai intensitas didasarkan
pada piksel tetangga terdekat, yang dilakukan melalui:
x2 = round(x * cosa + y * sina);
y2 = round(y * cosa - x * sina);

Penggunaan fungsi round (pembulatan ke atas) merupakan upaya untuk
menggunakan intensitas piksel terdekat. Alternatif

lain dilakukan dengan

menggunakan floor (pembulatan ke bawah). Gambar berikut menunjukkan
keadaan tersebut ketika hasil pada Gambar 5.4 (b) diperbesar.
130

Pengolahan Citra, Teori dan Aplikasi

Gambar 5.6 Efek bergerigi pada citra hasil pemutaran
memberikan citra terlihat tidak mulus
Keadaan seperti itu dapat diperhalus melalui interpolasi piksel.
Idenya seperti berikut. Misalnya, hasil perhitungan menghasilkan

xlama = 47,09
ylama = 59,85

Pada contoh di depan, piksel yang digunakan berposisi (60, 47) dengan
melakukan pembulatan ke atas. Namun, sesungguhnya bisa saja piksel yang
digunakan adalah yang berada pada posisi (59, 47) jika dilakukan pembulatan ke
bawah. Hal yang perlu diketahui, kemungkinan yang terjadi dapat melibatkan
empat buah piksel. Gambar 5.7 menunjukkan keadaan ini. Oleh karena itu, nilai
intensitas yang digunakan dapat melibatkan keempat piksel tersebut.
Operasi Geometrik

131

Jika ukuran piksel, yaitu di bawah ukuran kepekaan mata
pemandang, spek zig-zag tidak akan terlihat. Namun, bila
pemutran citra terjadi berulang secara serial, cacat gerigi akan
membesar.

f(p,q)

f(p,q+1)

a
f(p’,q’)
b

f(p+1,q)

p = floor(p’)
q = floor(q’)

f(p+1,q+1)

Gambar 5.7 Model pendekatan bilinear interpolation
Perhatikan bahwa f(p’. q’) mempunyai empat piksel terdekat berupa f(p,q),
f(p,q+1), f(p+1,q), dan f(p+1,q+1).
Pratt (2001) menunjukkan cara menghitung nilai intensitas yang digunakan
untuk suatu piksel berdasarkan empat piksel. Rumusnya sebagai berikut:
𝑓( 𝑝′ , 𝑞 ′ ) = (1 − 𝑎)[(1 − 𝑏) 𝑓( 𝑝, 𝑞 ) + 𝑏 𝑓( 𝑝, 𝑞 + 1)] +
𝑎[(1 − 𝑏) 𝑓( 𝑝 + 1, 𝑞 ) + 𝑏 𝑓(𝑝 + 1, 𝑞 + 1)]

(5.5)

Dalam hal ini, a dan b dihitung melalui:
𝑎 = 𝑝′ − 𝑝

(5.6)
132

Pengolahan Citra, Teori dan Aplikasi

𝑏 = 𝑞′ − 𝑞

(5.7)

Rumus dalam Persamaan 5.5 itulah yang disebut sebagai bilinear interpolation.

Selain bilinear interpolation, sebenarnya terdapat beberapa cara
untuk melakukan interpolasi. Dua cara lain yang populer yaitu
bicubic interpolation, yang menggunakan 16 piksel tetangga untuk
memperoleh interpolasi intensitas piksel dan bikuadratik yang
melibatkan 9 piksel terdekat.

Contoh program yang menggunakan interpolasi bilinear untuk mendapatkan
intensitas piksel dapat dilihat di bawah ini.

Program : rotasi3.m

% ROTASI3 Melakukan operasi pemutaran citra.
%
Versi 3 - menggunakan bilinear interpolation
F = imread('c:Imagegedung.png');
[tinggi, lebar] = size(F);
Operasi Geometrik

133

sudut = 15; % Sudut pemutaran
rad = pi * sudut/180;
cosa = cos(rad);
sina = sin(rad);
F2 = double(F);
for y=1 : tinggi
for x=1 : lebar
x2 = x * cosa + y * sina;
y2 = y * cosa - x * sina;
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
% Lakukan interpolasi bilinear
p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;
if (x2 == lebar) || (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
else
G(y, x) = 0;
end
end
end
G = uint8(G);
figure(1); imshow(G);
clear all;

Akhir Program

Gambar 5.8 memperlihatkan perbedaan hasil antara pemutaran citra yang
menggunakan pendekatan interpolasi bilinear dan yang tidak.
134

Pengolahan Citra, Teori dan Aplikasi

(a) Tanpa interpolasi 

(b) Dengan interpolasi 

Gambar 5.8 Perbandingan efek penggunaan interpolasi bilinear
Terlihat bahwa hasil yang menggunakan interpolasi bilinear lebih halus. Namun,
tentu saja, kehalusan tersebut harus dibayar dengan waktu komputasi yang lebih
lama.
5.5 Memutar Berdasarkan Sebarang Koordinat
Operasi pemutaran citra dapat dilakukan dengan pusat di mana saja; tidak
harus dari (0, 0). Gambar 5.9 memperlihatkan keadaan ini.
Operasi Geometrik

135

Bingkai citra asli
Bingkai citra hasil
pemutaran

m
n

Gambar 5.9 Pemutaran citra melalui titik pusat citra
Rumus untuk melakukan pemutaran berlawanan arah jarum jam sebesar 
yang diperlihatkan pada Gambar 5.9 diperoleh melalui pemodifikasian Persamaan
5.3 dan 5.4:
𝑥 𝑏𝑎𝑟𝑢 = ( 𝑥 − 𝑛) ∗ 𝐶𝑜𝑠( 𝜃) + ( 𝑦 − 𝑚) ∗ 𝑆𝑖𝑛 ( 𝜃) + 𝑛

(5.8)

𝑦 𝑏𝑎𝑟𝑢 = ( 𝑦 − 𝑚) ∗ 𝐶𝑜𝑠( 𝜃) − ( 𝑥 − 𝑛) ∗ 𝑆𝑖𝑛( 𝜃) + 𝑚

(5.9)

Untuk kepentingan pemutaran citra sejauh 𝜃 searah jarum jam, intensitas
piksel (y, x) dapat diperoleh melalui intensitas pada piksel (ybaru, xbaru) yang tertera
pada Persamaan 5.8 dan 5.9. Implementasi program dapat dilihat pada contoh
berikut.

Program : rotasi4.m

% ROTASI4 Melakukan operasi pemutaran citra.
%
Versi 4 - pusat putaran pada pusat citra
136

Pengolahan Citra, Teori dan Aplikasi

F = imread('c:Imagegedung.png');
[tinggi, lebar] = size(F);
sudut = 5; % Sudut pemutaran
rad = pi * sudut/180;
cosa = cos(rad);
sina = sin(rad);
F2 = double(F);
m = floor(tinggi / 2);
n = floor(lebar / 2);
for y=1 : tinggi
for x=1 : lebar
x2 = (x-n) * cosa + (y-m) * sina + n;
y2 = (y-m) * cosa - (x-n) * sina + m;
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
% Lakukan interpolasi bilinear
p = floor(y2);
q = floor(x2);
a = y2-p;
b = x2-q;
if (x2==lebar) || (y2 == tinggi)
G(y, x) = F(y2, x2);
else
intensitas = (1-a)*((1-bF(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
else
G(y, x) = 0;
end
end
end
G = uint8(G);
figure(1); imshow(G);
clear all;

Akhir Program

Contoh di atas menggunakan interpolasi bilinear. Hasilnya dapat dilihat pada
Gambar 5.10.
Operasi Geometrik

(a) Citra gedung asli

137

(b) Hasil pemutaran 5o

Gambar 5.10 Pemutaran melalui titik pusat citra
5.6 Memutar Citra Secara Utuh
Pada seluruh contoh yang telah diberikan, ada bagian gambar yang hilang
ketika pemutaran dilaksanakan. Namun, adakalanya dihendaki agar pemutaran
citra tidak membuat ada bagian citra asli hilang. Untuk keperluan ini, ukuran citra
hasil pemutaran harus diubah sesuai dengan sudut putaran. Dalam hal ini,
Persamaan 5.8 dan 5.9 digunakan untuk menentukan keempat pojok gambar
semula. Adapun lebar dan tinggi gambar hasil pemutaran dengan menghitung nilai
terkecil dan terbesar dari koordinat keempat pojok hasil pemutaran. Untuk lebih
jelasnya, lihat Gambar 5.11.
138

Pengolahan Citra, Teori dan Aplikasi

(y21,x21)
Citra asli

(y22,x22)

Citra hasil utuh
m’= max(y21, y22, y23, y24)min(y21, y22, y23, y24)+1

(y24,x24)

m
n
(y23,x23)

m’= max(x21, x22, x23, x24)- min(x21, x22, x23, x24)+1

Gambar 5.11 Penentuan lebar dan tinggi citra hasil pemutaran

Implementasi pemutaran citra secara utuh

diperlihatkan pada program

rotasi5.m.

Program : rotasi5.m

% ROTASI5 Melakukan operasi pemutaran citra.
%
Versi 5
%
Memutar dengan hasil utuh
F = imread('c:Imagegedung.png');
[tinggi, lebar] = size(F);
sudut = 45; % Sudut pemutaran
rad = pi * sudut/180;
cosa = cos(rad);
sina = sin(rad);
x11
x12
x13
x14

=
=
=
=

1;
lebar;
lebar;
1;

y11
y12
y13
y14

=
=
=
=

1;
1;
tinggi;
tinggi;
Operasi Geometrik

m = floor(tinggi/2);
n = floor(lebar/2);
% Menentukan pojok
x21 = ((x11-n) * cosa + (y11-m) * sina + n);
y21 = ((y11-m) * cosa - (x11-n) * sina + m);
x22 = ((x12-n) * cosa + (y12-m) * sina + n);
y22 = ((y12-m) * cosa - (x12-n) * sina + m);
x23 = ((x13-n) * cosa + (y13-m) * sina + n);
y23 = ((y13-m) * cosa - (x13-n) * sina + m);
x24 = ((x14-n) * cosa + (y14-m) * sina + n);
y24 = ((y14-m) * cosa - (x14-n) * sina + m);
ymin = min([y21 y22 y23 y24]);
xmin = min([x21 x22 x23 x24]);
ymak = max([y21 y22 y23 y24]);
xmak = max([x21 x22 x23 x24]);
lebar_baru = xmak - xmin + 1;
tinggi_baru = ymak - ymin + 1;
tambahan_y = floor((tinggi_baru-tinggi)/2);
tambahan_x = floor((lebar_baru-lebar)/2);
F2=zeros(tinggi_baru, lebar_baru);
for y=1 : tinggi
for x=1 : lebar
F2(y+tambahan_y, x+tambahan_x) = F(y, x);
end
end
figure(1);
imshow( uint8(F2));
% Putar citra
m = floor(tinggi_baru/2);
n = floor(lebar_baru/2);
for y=1 : tinggi_baru
for x=1 : lebar_baru
x2 = round((x-n) * cosa + (y-m) * sina + n);
y2 = round((y-m) * cosa - (x-n) * sina + m);
if (x2>=1) && (x2<=lebar_baru) && ...
(y2>=1) && (y2<=tinggi_baru)
G(y, x) = F2(y2,x2);
else
G(y,x) = 0;
end
end
end
figure(2);
G = uint8(G);
imshow(G);

139
140

Pengolahan Citra, Teori dan Aplikasi

clear all;

Akhir Program

Hasil pemutaran gambar dengan menggunakan rotasi5.m ditunjukkan pada
Gambar 5.12.

Gambar 5.12 Pemutaran citra secara utuh
5.7 Memperbesar Citra
Suatu citra dapat diperbesar dengan membuat setiap piksel menjadi beberapa
piksel. Gambar 5.13 memberikan contoh cara memperbesar citra.
Operasi Geometrik

141

Gambar 5.13 Cara memperbesar citra

Pada contoh di atas pembesaran pada arah vertikal dan horizontal sebesar 2 kali.
Berikut adalah fungsi yang memperlihatkan cara perbesaran tersebut.
Program : perbesar.m

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));
142

Pengolahan Citra, Teori dan Aplikasi

end
end
G = uint8(G);

Akhir Program

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 1 sampai dengan lebar
citra asli. Hal yang serupa dilakukan untuk x2 yang dilaksanakan melalui
x2 = ((x-1) / sx) + 1;

Berdasar fungsi perbesar di atas, dapat diberikan perintah seperti berikut:
>> Img = perbesar('C:Imagelena128.png', 3, 3); 

Pada perintah di atas, citra lena12.png diperbesar tiga kali baik pada arah vertikal
maupun horizontal.
Selanjutnya, hasil perbesaran ditampilkan melalui
>> imshow(Img); 
Hasilnya dapat dilihat pada Gambar 5.14.
Operasi Geometrik

143

(a) Citra lena 128x128

(b) Pembesaran 3x tanpa interpolasi

Gambar 5.14 Contoh pembesaran citra

Untuk memperhalus hasil perbesaran citra, interpolasi piksel perlu dilakukan.
Contoh dapat dilihat pada kode berikut.

Program : perbesar2.m

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
144

Pengolahan Citra, Teori dan Aplikasi

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);

Akhir Program

Penghalusan citra keluaran dilakukan melalui interpolasi bilinear, seperti yang
telah dibahas di Subbab 5.4.
Untuk melihat hasil interpolasi pada pembesaran citra, dapat diberikan
perintah seperti berikut:
>> Img = Perbesar2('C:Imagelena128.png', 4, 4); 
>> imshow(Img); 

Hasilnya dapat dilihat pada Gambar 5.15.
Operasi Geometrik

145

(a) Citra lena 128x128

(b) Pembesaran 3x

Gambar 5.15 Contoh perbesaran citra dengan interpolasi

Cobalah untuk membandingkan hasil di atas dengan hasil pada Gambar 5.14.
5.8 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:Imagelena256.png', 0.5, 0.5); 
>> imshow(Img); 

Hasilnya dapat dilihat pada Gambar 5.16.
146

Pengolahan Citra, Teori dan Aplikasi

(b) Hasil pengecilan 0,5 x
pada arah vertikal dan horisontal

(a) Citra lena 256x256

Gambar 5.16 Contoh pengecilan dengan interpolasi
5.9 Perbesaran dengan Skala Vertikal dan Horizontal Berbeda
Fungsi perbesar dan perbesar2 dapat digunakan untuk melakukan
perbesaran/pengecilan dengan skala horizontal dan vertikal yang berbeda. Sebagai
contoh, dapat diberikan perintah seperti berikut:
>> Img = perbesar2('C:Imagegedung.png', 0.5, 2.5); 
>> imshow(Img); 

Hasilnya ditunjukkan pada Gambar 5.17.

Gambar 5.17 Gedung diperbesar 1/2 kali pada arah vertikal dan
2,5 kali pada arah horizontal
5.10 Pencerminan Citra
Pencerminan yang umum dilakukan berupa pencerminan secara vertikal dan
pencerminan secara horizontal. Pencerminan secara horizontal dilakukan dengan
menukarkan dua piksel yang berseberangan kir-kanan, sebagaimana diperlihatkan
Operasi Geometrik

147

pada Gambar 5.18. Algoritma untuk menangani pencerminan secara horizontal
diperlihatkan Algoritma 5.1.

Gambar 5.18 Pencerminan secara horizontal
ALGORITMA 5.1 – Mencerminkan gambar secara horizontal
Masukan:
 f (M,N): Citra masukan berukuran M baris dan N kolom
Keluaran:
 g (M, N): Hasil citra yang telah dicerminkan secara
horizontal
1. FOR baris  1 TO M
2.
FOR kolom  1 TO N
3.
g(baris, kolom)  f(N – baris + 1, kolom)
4.
END-FOR
5. END-FOR
Implementasinya ditunjukkan pada program berikut.

Program : cerminh.m

function G = cerminh(F)
% CERMINH Berfungsi untuk mencerminkan citra
%
secara horizontal
148

%

Pengolahan Citra, Teori dan Aplikasi

Masukan: F = Citra berskala keabuan

[tinggi, lebar] = size(F);
for y=1 : tinggi
for x=1 : lebar
x2 = lebar - x + 1;
y2 = y;
G(y, x) = F(y2, x2);
end
end
G = uint8(G);

Akhir Program

Contoh pemakaian fungsi cerminh:
>> F = imread('C:Imageboneka.png');
>> G = cerminh(F); imshow(G)

Contoh pencerminan gambar secara horizontal ditunjukkan pada Gambar 5.19.

(a) Citra boneka.tif

(b) Pencerminan secara horizontal

Gambar 5.19 Pencerminan secara horizontal
Pencerminan secara vertikal dilakukan dengan menukarkan dua piksel yang
berseberangan atas-bawah, sebagaimana diperlihatkan pada Gambar 5.20.
Algoritma untuk menangani pencerminan secara horizontal diperlihatkan
Algoritma 5.2.
Operasi Geometrik

Gambar 5.20 Pencerminan secara vertikal
ALGORITMA 5.2 – Mencerminkan gambar secara vertikal
Masukan:


f (M,N): Citra masukan berukuran M baris dan N kolom

Keluaran:


g (M, N): Hasil citra yang telah dicerminkan secara
horizontal

1. FOR baris  1 TO M
2.
3.
4.

FOR kolom  1 TO N
g(baris, kolom)  f(baris, N – kolom + 1)
END-FOR

5. END-FOR

Implementasinya ditunjukkan pada program berikut.

Program : cerminv.m

function G = cerminv(F)
% CERMINV Berfungsi untuk mencerminkan citra
%
secara vertikal
%
Masukan: F = Citra berskala keabuan

149
150

Pengolahan Citra, Teori dan Aplikasi

[tinggi, lebar] = size(F);
for y=1 : tinggi
for x=1 : lebar
x2 = x;
y2 = tinggi - y + 1;
G(y, x) = F(y2, x2);
end
end
G = uint8(G);

Akhir Program

Contoh pemakaian fungsi cerminv:
>> F = imread('C:Imageboneka.png'); 
>> G = cerminv(F); imshow(G) 

Contoh pencerminan gambar secara vertikal ditunjukkan pada Gambar 5.21.

(a) Citra boneka.tif

(b) Pencerminan secara vertikal

Gambar 5.21 Pencerminan secara vertikal
Operasi Geometrik

151

Di beberapa software, pencerminan secara horizontal justru
dinamakan vertical flip.

5.11 Transformasi Affine
Transformasi affine adalah transformasi linear yang menyertakan penskalaan,
pemutaran, penggeseran, dan shearing (pembengkokan). Transformasi affine
dapat dinyatakan dengan persamaan seperti berikut:
𝑎11
𝑥′
[ ]=*𝑎
𝑦′
21

𝑎12 𝑥
𝑡𝑥
+ * 𝑦+ + [ 𝑡 ]
𝑎22
𝑦

(5.10)

Persamaan di atas dapat ditulis pula menjadi seperti berikut:
𝑎11
𝑥′
[ 𝑦′] = [ 𝑎21
0
1

𝑎12
𝑎22
0

𝑡𝑥 𝑥
𝑡 𝑦 ] [ 𝑦]
1 1

(5.11)

Berdasarkan persamaan di atas, terlihat bahwa transformasi affine memiliki enam
derajat kebebasan: dua untuk translasi (t x dan ty) dan empat buah untuk rotasi,
penskalaan, stretching, dan shearing (a11, a12, a21, dan a22).
Tabel 5.1 menunjukkan koefisien yang digunakan dalam matriks di depan
untuk menyatakan operasi dasar penskalaan, rotasi, translasi, dan pembengkokan.
Tentu saja, keenam koefisien tersebut dapat diatur secara bebas untuk
mendapatkan transformasi affine. Untuk melakukan penggabungan dua operasi
dasar, koefisien yang sama dari dua jenis transformasi dapat dikalikan. Contoh
dapat dilihat pada Gambar 5.22.
152

Pengolahan Citra, Teori dan Aplikasi

Tabel 5.1 Koefisien untuk menentukan efek penskalaan, rotasi.
translasi, dan pembengkokan
Transformasi
a11
a12
a21
a22
tx
ty
Translasi sebesar (y, x)

1

0

0

1

x

Y

Rotasi sebesar 

cos 

sin 

-sin

cos

0

0





Penyekalaan sebesar s

s

0

0

S

0

0

Pembengkokan secara

1

S

0

1

0

0

1

0

s

1

0

0

vertikal sebesar s
Pembengkokan secara
horizontal sebesar s

Gambar 5.22 Contoh transformasi linear yang mencakup rotasi,
penyekalaan, dan affine
Operasi Geometrik

153

Fungsi berikut berguna untuk mewujudkan transformasi affine.
Program : taffine.m

function G = taffine(F, a11, a12, a21, a22, tx, ty)
% TAFFINE Digunakan untuk melakukan transformasi affine.
%
Masukan: F = Citra berskala keabuan
%
a11, a12, a21, a22, tx, ty = mengatur
%
transformasi affine
[tinggi, lebar] = size(F);
for y=1 : tinggi
for x=1 : lebar
x2 = a11 * x + a12 * y + tx;
y2 = a21 * x + a22 * y + ty;
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
%
p
q
a
b

Lakukan interpolasi bilinear
= floor(y2);
= floor(x2);
= y2-p;
= 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
else
G(y, x) = 0;
end
end
end
G = uint8(G);

Akhir Program

Contoh penggunaan fungsi taffine untuk melakukan pembengkokan:
154

Pengolahan Citra, Teori dan Aplikasi

>> F = imread('C:Imagegedung.png'); 
>> G = taffine(F,1,0.15,0,1,0,0); 
>> imshow(G) 

Contoh berikut digunakan untuk memutar gambar:
>> rad = 10 * pi / 180;
>> G = taffine(F,cos(rad),sin(rad), …
-sin(rad),cos(rad),0,0);
>> imshow(G) 

Contoh penggabungan rotasi dan translasi:
>> G = taffine(F,cos(rad),sin(rad),-sin(rad), …
cos(rad),-30,-50); 

Contoh penggabungan rotasi, penskalaan, dan translasi:
>> G = taffine(F,2 * cos(rad),sin(rad),-sin(rad), …
2 * cos(rad),-30,-50); 

Perlu diketahui, angka seperti 2 di depan cos(rad) menyatakan bahwa hasilnya
adalah kebalikannya, yaitu ½ kalinya.
5.12 Efek Ripple
Efek ripple (riak) adalah aplikasi transformasi citra yang membuat gambar
terlihat bergelombang. Efek riak dapaat dibuat baik pada arah x maupun y.
Transformasinya seperti berikut:
𝑥 = 𝑥 ′ + 𝑎 𝑥 𝑠𝑖𝑛

2𝜋𝑦′

𝑦 = 𝑦 ′ + 𝑎 𝑦 𝑠𝑖𝑛

2𝜋𝑥′

𝑇𝑥
𝑇𝑦

(5.12)
(5.13)
Operasi Geometrik

155

Dalam hal ini, ax dan ay menyatakan amplitudo riak gelombang sinus, sedangkan
Tx dan Ty menyatakan periode gelombang sinus.
Implementasi efek gelombang dapat dilihat di bawah ini.

Program : ripple.m

function G = ripple(F, ax, ay, tx, ty)
% RIPPLE Berfungsi untuk melakukan transformasi 'ripple'.
dimensi = size(F);
tinggi = dimensi(1);
lebar = dimensi(2);
for y=1 : tinggi
for x=1 : lebar
x2 = x + ax *
y2 = y + ay *
if (x2>=1) &&
(y2>=1) &&
%
p
q
a
b

sin(2 * pi * y / tx);
sin(2 * pi * x / ty);
(x2<=lebar) && ...
(y2<=tinggi)

Lakukan interpolasi bilinear
= floor(y2);
= floor(x2);
= y2-p;
= 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
else
G(y, x) = 0;
end
end
end
G = uint8(G);

Akhir Program

...
156

Pengolahan Citra, Teori dan Aplikasi

Contoh penggunaan fungsi ripple:
>> F = imread('C:imagegedung.png'); 
>> G = ripple(F,10,15,120, 250); 
>> imshow(G) 

Pada contoh di atas, amplitude gelombang sinus yang digunakan berupa 10 dan
15, sedangkan periode yang digunakan 120 dan 250. Contoh hasil perintah di atas
ditunjukkan pada Gambar 5.23.

Gambar 5.23 Contoh hasil efek ripple

Beberapa contoh yang lain dapat dilihat pada Gambar 5.24.
Operasi Geometrik

157

Gambar 5.24 Berbagai hasil efek ripple
5.13 Efek Twirl
Transformasi twirl (olak atau puntiran) dilakukan dengan memutar citra
berdasarkan titik pusat citra, tetapi tidak bersifat linear. Salah satu varian bentuk
transformasinya, yang diadaptasi dari Burger & Burge (2008), sebagai berikut:
𝑥′ = 𝑥 𝑐 + 𝑟 cos(𝛽)
𝑦′ = 𝑦 𝑐 + 𝑟 sin(𝛽)
(5.15)

(5.14)
158

Pengolahan Citra, Teori dan Aplikasi

dengan
𝑟 = √( 𝑥 − 𝑥 𝑐 )2 + ( 𝑦 − 𝑦 𝑐 )2

(5.16)

𝛽 = 𝐴𝑟𝑐𝑇𝑎𝑛(𝑑 𝑦 , 𝑑 𝑥 ) + 𝛼(𝑟 𝑚𝑎𝑘𝑠 − 𝑟)/𝑟 𝑚𝑎𝑘𝑠

(5.17)

Contoh berikut menggunakan rmaks sebesar ½ diagonal citra dan  sebesar 43o.
Program : twirl.m

function G = twirl(F)
% TWIRL Berfungsi untuk melakukan transformasi 'twirl'
dimensi = size(F);
tinggi = dimensi(1);
lebar = dimensi(2);
xc = round(lebar / 2);
yc = round(tinggi / 2);
alpha = 43 * pi / 180;
rmaks = 0.5 * sqrt(xc^2 + yc ^ 2); % 1/2 diagonal citra
for y=1 : tinggi
for x=1 : lebar
r = sqrt((x-xc)^2+(y-yc)^2);
beta = atan2(y-yc, x-xc) + …
alpha * (rmaks - r) / rmaks;
x2 = xc + r * cos(beta);
y2 = yc + r * sin(beta);
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
%
p
q
a
b

Lakukan interpolasi bilinear
= floor(y2);
= floor(x2);
= y2-p;
= 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;

...
Operasi Geometrik

159

end
else
G(y, x) = 0;
end
end
end
G = uint8(G);

Akhir Program

Contoh penggunaan fungsi twirl:
>> F = imread('C:Imagekotatua.png'); 
>> G = swirl(F); imshow(G) 

Hasil ditunjukkan pada Gambar 5.25.

Gambar 5.25 Efek transformasi twirl
5.14 Transformasi Spherical
Transformasi spherical memberikan efek bulatan (bola), seperti melihat
gambar menggunakan lensa pembesar. Bagian tengah terlihat membesar. Hal
seperti itu diperoleh dengan menggunakan transformasi seperti berikut.

𝑥′ = {

𝑥 − 𝑧 ∗ tan( 𝑏 𝑥 ) ,
𝑥,

𝑗𝑖𝑘𝑎 𝑟 ≤ 𝑟 𝑚𝑎𝑘𝑠
𝑗𝑖𝑘𝑎 𝑟 > 𝑟 𝑚𝑎𝑘𝑠

(5.18)
160

Pengolahan Citra, Teori dan Aplikasi

𝑦′ = {

𝑦 − 𝑧 ∗ tan(𝑏 𝑦 ) ,
𝑦,

𝑗𝑖𝑘𝑎 𝑟 ≤ 𝑟 𝑚𝑎𝑘𝑠
𝑗𝑖𝑘𝑎 𝑟 > 𝑟 𝑚𝑎𝑘𝑠

(5.19)

dengan
1

𝑏 𝑥 = (1 − 𝜌) ∗ 𝑎𝑟𝑐 sin (

𝑥−𝑥 𝑐
√(𝑥−𝑥 𝑐 )2 +𝑧 2

1

𝑏 𝑦 = (1 − 𝜌) ∗ 𝑎𝑟𝑐 sin (

)

(5.20)

)

(5.21)

𝑦−𝑦 𝑐
√(𝑦−𝑦 𝑐 )2 +𝑧 2

𝑟 = √( 𝑥 − 𝑥 𝑐 )2 + ( 𝑦 − 𝑦 𝑐 )2

(5.22)

𝑧 = √𝑟 𝑚𝑎𝑘𝑠 2 + 𝑟 2

(5.23)

𝑟 𝑚𝑎𝑘𝑠 = 𝑥 𝑐

(5.24)

𝑥 𝑐 = 𝑙𝑒𝑏𝑎𝑟/2

(5.25)

𝑦 𝑐 = 𝑡𝑖𝑛𝑔𝑔𝑖/2

(5.26)

Perlu diketahui, 𝜌 disebut indeks refraksi atau indeks pantulan.
Implementasi transformasi spherical dapat dilihat pada program berikut.

Program : spheri.m

function G = spheri(F, rho)
% SPHERI Berfungsi untuk melakukan transformasi 'spherical'
dimensi = size(F);
tinggi = dimensi(1);
lebar = dimensi(2);
xc = round(lebar / 2);
yc = round(tinggi / 2);
rmaks = xc;

% 1/2 lebar gambar

for y=1 : tinggi
for x=1 : lebar
r = sqrt((x-xc)^2+(y-yc)^2);
z = sqrt(rmaks^2-r^2);
bx = (1 - 1/rho) * asin((x-xc)/...
sqrt((x-xc)^2+z^2));
by = (1 - 1/rho) * asin((y-yc)/...
Operasi Geometrik

161

sqrt((y-yc)^2+z^2));
if r <= rmaks
x2 = x - z * tan(bx);
y2 = y - z * tan(by);
else
x2 = x;
y2 = y;
end
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
%
p
q
a
b

Lakukan interpolasi bilinear
= floor(y2);
= floor(x2);
= y2-p;
= 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
else
G(y, x) = 0;
end
end
end
G = uint8(G);

Akhir Program

Pemakaian skrip di atas dapat dilihat pada contoh berikut:
>> F = imread('C:Imagekotatua.png'); 
>> G = spheri(F, 1.8); imshow(G) 
Hasil ditunjukkan pada Gambar 5.26.
162

Pengolahan Citra, Teori dan Aplikasi

Gambar 5.26 Transformasi spherical
5.15 Transformasi bilinear
Transformasi bilinear mempunyai fungsi pemetaan seperti berikut:
𝑥 ′ = 𝑎1 𝑥 + 𝑎2 𝑦 + 𝑎3 𝑥𝑦 + 𝑎4

(5.27)

𝑦 ′ = 𝑏1 𝑥 + 𝑏2 𝑦 + 𝑏3 𝑥𝑦 + 𝑏4

(5.28)

Transformasi ini termasuk dalam transformasi nonlinear mengingat terdapat
pencampuran xy. Implementasi dalam bentuk program dapat dilihat berikut ini.
Program : tbilin.m

function G = tbilin(F, a1, a2, a3, a4, b1, b2, b3, b4)
% Fungsi untuk melakukan transformasi bilinear
dimensi = size(F);
tinggi = dimensi(1);
lebar = dimensi(2);
for y=1 : tinggi
for x=1 : lebar
x2 = a1 * x + a2 * y + a3 * x * y + a4;
y2 = b1 * x + b2 * y + b3 * x * y + b4;
if (x2>=1) && (x2<=lebar) && ...
(y2>=1) && (y2<=tinggi)
Operasi Geometrik
%
p
q
a
b

163

Lakukan interpolasi bilinear
= floor(y2);
= floor(x2);
= y2-p;
= 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
else
G(y, x) = 0;
end
end
end
G = uint8(G);

Akhir Program

Contoh pemanggilan fungsi tbilin seperti berikut:
>> F = imread('C:Imagekotatua.png'); 
>> G = tbilin(F, 1.2,0.1,0.005,-45,0.1,1,0.005,-30); 
>> imshow(G) 

Hasinya dapat dilihat pada Gambar 5.27.
164

Pengolahan Citra, Teori dan Aplikasi

Gambar 5.27 Transformasi bilinear

 Latihan
1. Jelaskan pengertian operasi geometrik.
2. Apa yang disebut dengan istilah berikut.
(a) Pemetaan ke belakang
(b) Pemetaan ke depan
3. Jelaskan yang dimaksud dengan interpolasi bilinear.
4. Tuliskan persamaan matematika yang menggambarkan operasi pencerminan
secara vertikal.
5. Tuliskan sebuah algoritma yang sekaligus digunakan untuk mencerminkan
secara horizontal dan vertikal. Implementasikan dalam bentuk program dan
ujilah.
6. Cobalah untuk menguji skrip untuk pencerminan dengan menggunakan
gambar berwarna. Apa yang terjadi dengan hasilnya? Mengapa begitu?
7. Cobalah untuk memodifikasi cerminh dan cerminv agar bisa digunakan untuk
melakukan pencerminan terhadap gambar berwarna.
8. Jelaskan apa yang dimaksud dengan transformasi-transformasi berikut.
(a) Affine
(b) Spherical
Operasi Geometrik

165

(c) Twirl
(d) Ripple
(e) Bilinear

9. Gambar berikut memberikan gambaran mengenai proses interpolasi linear
(berdimensi satu), yang menjadi dasar dalam penentuan interpolasi bilinear
(berdimensi dua).

Berdasarkan gambar di atas, buktikan bahwa
f(q’) = (1-a) f(q) + a f(q+1)
166

Pengolahan Citra, Teori dan Aplikasi

More Related Content

What's hot

pembentukan citra (pengolahan citra digital)
pembentukan citra (pengolahan citra digital)pembentukan citra (pengolahan citra digital)
pembentukan citra (pengolahan citra digital)
khaerul azmi
 
Interaksi Manusia dan Komputer : Conceptual Model
Interaksi Manusia dan Komputer : Conceptual ModelInteraksi Manusia dan Komputer : Conceptual Model
Interaksi Manusia dan Komputer : Conceptual Model
Eko Kurniawan Khannedy
 
Metode numerik pada persamaan diferensial (new)
Metode numerik pada persamaan diferensial (new)Metode numerik pada persamaan diferensial (new)
Metode numerik pada persamaan diferensial (new)
Khubab Basari
 

What's hot (20)

Tutorial operasi geometrik menggunakan octave
Tutorial operasi geometrik menggunakan octaveTutorial operasi geometrik menggunakan octave
Tutorial operasi geometrik menggunakan octave
 
Pcd 05 - transformasi citra
Pcd   05 - transformasi citraPcd   05 - transformasi citra
Pcd 05 - transformasi citra
 
Pengolahan Citra 3 - Operasi-operasi Digital
Pengolahan Citra 3 - Operasi-operasi DigitalPengolahan Citra 3 - Operasi-operasi Digital
Pengolahan Citra 3 - Operasi-operasi Digital
 
Pertemuan 3 - Digital Image Processing - Spatial Filtering - Citra Digital
Pertemuan 3 - Digital Image Processing - Spatial Filtering - Citra DigitalPertemuan 3 - Digital Image Processing - Spatial Filtering - Citra Digital
Pertemuan 3 - Digital Image Processing - Spatial Filtering - Citra Digital
 
Histogram - Citra Digital
Histogram - Citra DigitalHistogram - Citra Digital
Histogram - Citra Digital
 
Slide minggu 6 (citra digital)
Slide minggu 6 (citra digital)Slide minggu 6 (citra digital)
Slide minggu 6 (citra digital)
 
Bab 7 integrasi numerik
Bab 7 integrasi numerikBab 7 integrasi numerik
Bab 7 integrasi numerik
 
Bab 11 citra biner
Bab 11 citra binerBab 11 citra biner
Bab 11 citra biner
 
Image processing
Image processingImage processing
Image processing
 
Regula falsi
Regula falsiRegula falsi
Regula falsi
 
Chap 3 - Dasar Pengolahan Citra
Chap 3 - Dasar Pengolahan CitraChap 3 - Dasar Pengolahan Citra
Chap 3 - Dasar Pengolahan Citra
 
4 Menggambar Grafik Fungsi Dengan Matlab
4 Menggambar Grafik Fungsi Dengan Matlab4 Menggambar Grafik Fungsi Dengan Matlab
4 Menggambar Grafik Fungsi Dengan Matlab
 
pembentukan citra (pengolahan citra digital)
pembentukan citra (pengolahan citra digital)pembentukan citra (pengolahan citra digital)
pembentukan citra (pengolahan citra digital)
 
Kriptograf - Algoritma Kriptografi Klasik (bagian 1)
Kriptograf - Algoritma Kriptografi Klasik (bagian 1)Kriptograf - Algoritma Kriptografi Klasik (bagian 1)
Kriptograf - Algoritma Kriptografi Klasik (bagian 1)
 
Graf ( Matematika Diskrit)
Graf ( Matematika Diskrit)Graf ( Matematika Diskrit)
Graf ( Matematika Diskrit)
 
Tugas mandiri pengolahan citra digital
Tugas mandiri pengolahan citra digitalTugas mandiri pengolahan citra digital
Tugas mandiri pengolahan citra digital
 
Interaksi Manusia dan Komputer : Conceptual Model
Interaksi Manusia dan Komputer : Conceptual ModelInteraksi Manusia dan Komputer : Conceptual Model
Interaksi Manusia dan Komputer : Conceptual Model
 
Bab 10 pemampatan citra
Bab 10 pemampatan citraBab 10 pemampatan citra
Bab 10 pemampatan citra
 
Contoh soal dan penyelesaian metode biseksi
Contoh soal dan penyelesaian metode biseksiContoh soal dan penyelesaian metode biseksi
Contoh soal dan penyelesaian metode biseksi
 
Metode numerik pada persamaan diferensial (new)
Metode numerik pada persamaan diferensial (new)Metode numerik pada persamaan diferensial (new)
Metode numerik pada persamaan diferensial (new)
 

Similar to Pcd 5

05-Operasi-dasar-pengolahan-citra-2021 (1).pptx
05-Operasi-dasar-pengolahan-citra-2021 (1).pptx05-Operasi-dasar-pengolahan-citra-2021 (1).pptx
05-Operasi-dasar-pengolahan-citra-2021 (1).pptx
nyomans1
 
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docxLaporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
komzud
 

Similar to Pcd 5 (20)

LN s04-machine vision-s2
LN s04-machine vision-s2LN s04-machine vision-s2
LN s04-machine vision-s2
 
Bab 05
Bab 05Bab 05
Bab 05
 
Pcd 4
Pcd 4Pcd 4
Pcd 4
 
Pcd 4
Pcd 4Pcd 4
Pcd 4
 
Pcd 8
Pcd 8Pcd 8
Pcd 8
 
Pcd 8
Pcd 8Pcd 8
Pcd 8
 
Open GL Tutorial04
Open GL Tutorial04Open GL Tutorial04
Open GL Tutorial04
 
Segmentasi Citra Wajah Menggunakan Metode Level Set
Segmentasi Citra Wajah  Menggunakan Metode Level SetSegmentasi Citra Wajah  Menggunakan Metode Level Set
Segmentasi Citra Wajah Menggunakan Metode Level Set
 
Tugas Akhir Modul 3 Profesional Matematika PPG Daljab
Tugas Akhir Modul 3 Profesional Matematika PPG DaljabTugas Akhir Modul 3 Profesional Matematika PPG Daljab
Tugas Akhir Modul 3 Profesional Matematika PPG Daljab
 
05-Operasi-dasar-pengolahan-citra-2021 (1).pptx
05-Operasi-dasar-pengolahan-citra-2021 (1).pptx05-Operasi-dasar-pengolahan-citra-2021 (1).pptx
05-Operasi-dasar-pengolahan-citra-2021 (1).pptx
 
Pcd 14
Pcd 14Pcd 14
Pcd 14
 
Peningkatan Kualitas Citra Spasial.pdf
Peningkatan Kualitas Citra Spasial.pdfPeningkatan Kualitas Citra Spasial.pdf
Peningkatan Kualitas Citra Spasial.pdf
 
Koreksi Geometrik Citra Satelit Menggunakan Software Bilko
Koreksi Geometrik Citra Satelit Menggunakan Software BilkoKoreksi Geometrik Citra Satelit Menggunakan Software Bilko
Koreksi Geometrik Citra Satelit Menggunakan Software Bilko
 
TM pengolahan citra digital
TM pengolahan citra digitalTM pengolahan citra digital
TM pengolahan citra digital
 
Ayuk pcd
Ayuk pcdAyuk pcd
Ayuk pcd
 
TM pengolahan citra digital
TM pengolahan citra digitalTM pengolahan citra digital
TM pengolahan citra digital
 
Fotogrametri dijital sift dan surf
Fotogrametri dijital sift dan surfFotogrametri dijital sift dan surf
Fotogrametri dijital sift dan surf
 
File
FileFile
File
 
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docxLaporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
Laporan tugasgrafikakomputer merancangbangun3ddenganopeng-ldanvb6.docx
 
Pcd 11
Pcd 11Pcd 11
Pcd 11
 

More from Roziq Bahtiar

7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman struktur
Roziq Bahtiar
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointer
Roziq Bahtiar
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
Roziq Bahtiar
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsi
Roziq Bahtiar
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman
Roziq Bahtiar
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data
Roziq Bahtiar
 
Open GL T0074 56 sm3
Open GL T0074 56 sm3Open GL T0074 56 sm3
Open GL T0074 56 sm3
Roziq Bahtiar
 
Open GL T0074 56 sm2
Open GL T0074 56 sm2Open GL T0074 56 sm2
Open GL T0074 56 sm2
Roziq Bahtiar
 

More from Roziq Bahtiar (20)

Techarea company profile
Techarea company profileTecharea company profile
Techarea company profile
 
static and dynamic routing
static and dynamic routingstatic and dynamic routing
static and dynamic routing
 
Perintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating SistemPerintah perintah dasar linux Operating Sistem
Perintah perintah dasar linux Operating Sistem
 
Pengantar algoritma pemrograman
Pengantar algoritma pemrogramanPengantar algoritma pemrograman
Pengantar algoritma pemrograman
 
Flowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulatFlowchart progrm linear bilangan bulat
Flowchart progrm linear bilangan bulat
 
Tarby magazine salafiyah kajen
Tarby magazine  salafiyah kajenTarby magazine  salafiyah kajen
Tarby magazine salafiyah kajen
 
7. pemrograman struktur
7. pemrograman struktur7. pemrograman struktur
7. pemrograman struktur
 
6. pemrograman pointer
6. pemrograman pointer6. pemrograman pointer
6. pemrograman pointer
 
5. pemrograman array dan_string
5. pemrograman array dan_string5. pemrograman array dan_string
5. pemrograman array dan_string
 
4. pemrograman fungsi
4. pemrograman fungsi4. pemrograman fungsi
4. pemrograman fungsi
 
3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman3. teknik looping dalam_pemrograman
3. teknik looping dalam_pemrograman
 
2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman2. teknik pemilihan dalam_pemrograman
2. teknik pemilihan dalam_pemrograman
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data
 
Alpro tutor
Alpro tutorAlpro tutor
Alpro tutor
 
Pcd 7
Pcd 7Pcd 7
Pcd 7
 
Eigen
EigenEigen
Eigen
 
2 pengolahan_citra
 2 pengolahan_citra 2 pengolahan_citra
2 pengolahan_citra
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
 
Open GL T0074 56 sm3
Open GL T0074 56 sm3Open GL T0074 56 sm3
Open GL T0074 56 sm3
 
Open GL T0074 56 sm2
Open GL T0074 56 sm2Open GL T0074 56 sm2
Open GL T0074 56 sm2
 

Recently uploaded

Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptxBab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
ssuser35630b
 
Membuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docxMembuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docx
NurindahSetyawati1
 
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
pipinafindraputri1
 
mengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdfmengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdf
saptari3
 
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdfAksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
JarzaniIsmail
 

Recently uploaded (20)

7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
7.PPT TENTANG TUGAS Keseimbangan-AD-AS .pptx
 
Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat UI 2024
Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat  UI 2024Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat  UI 2024
Tim Yang Lolos Pendanaan Hibah Kepedulian pada Masyarakat UI 2024
 
vIDEO kelayakan berita untuk mahasiswa.ppsx
vIDEO kelayakan berita untuk mahasiswa.ppsxvIDEO kelayakan berita untuk mahasiswa.ppsx
vIDEO kelayakan berita untuk mahasiswa.ppsx
 
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptxBab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
Bab 7 - Perilaku Ekonomi dan Kesejahteraan Sosial.pptx
 
Integrasi nasional dalam bingkai bhinneka tunggal ika
Integrasi nasional dalam bingkai bhinneka tunggal ikaIntegrasi nasional dalam bingkai bhinneka tunggal ika
Integrasi nasional dalam bingkai bhinneka tunggal ika
 
Sosialisasi PPDB SulSel tahun 2024 di Sulawesi Selatan
Sosialisasi PPDB SulSel tahun 2024 di Sulawesi SelatanSosialisasi PPDB SulSel tahun 2024 di Sulawesi Selatan
Sosialisasi PPDB SulSel tahun 2024 di Sulawesi Selatan
 
Membuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docxMembuat Komik Digital Berisi Kritik Sosial.docx
Membuat Komik Digital Berisi Kritik Sosial.docx
 
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITASMATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
MATEMATIKA EKONOMI MATERI ANUITAS DAN NILAI ANUITAS
 
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
Modul 2 - Bagaimana membangun lingkungan belajar yang mendukung transisi PAUD...
 
mengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdfmengapa penguatan transisi PAUD SD penting.pdf
mengapa penguatan transisi PAUD SD penting.pdf
 
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdfAksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
Aksi Nyata Sosialisasi Profil Pelajar Pancasila.pdf
 
CAPACITY BUILDING Materi Saat di Lokakarya 7
CAPACITY BUILDING Materi Saat di Lokakarya 7CAPACITY BUILDING Materi Saat di Lokakarya 7
CAPACITY BUILDING Materi Saat di Lokakarya 7
 
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
Prakarsa Perubahan ATAP (Awal - Tantangan - Aksi - Perubahan)
 
Modul Projek - Batik Ecoprint - Fase B.pdf
Modul Projek  - Batik Ecoprint - Fase B.pdfModul Projek  - Batik Ecoprint - Fase B.pdf
Modul Projek - Batik Ecoprint - Fase B.pdf
 
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptxDEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
DEMONSTRASI KONTEKSTUAL MODUL 1.3 CGP 10.pptx
 
power point bahasa indonesia "Karya Ilmiah"
power point bahasa indonesia "Karya Ilmiah"power point bahasa indonesia "Karya Ilmiah"
power point bahasa indonesia "Karya Ilmiah"
 
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdfMAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
MAKALAH KELOMPOK 7 ADMINISTRASI LAYANAN KHUSUS.pdf
 
Materi Sosialisasi US 2024 Sekolah Dasar pptx
Materi Sosialisasi US 2024 Sekolah Dasar pptxMateri Sosialisasi US 2024 Sekolah Dasar pptx
Materi Sosialisasi US 2024 Sekolah Dasar pptx
 
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdfSalinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
Salinan dari JUrnal Refleksi Mingguan modul 1.3.pdf
 
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptxKontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
 

Pcd 5

  • 1. BAB 5 Operasi Geometrik Setelah bab ini berakhir, diharapkan pembaca mendapatkan pengetahuan mengenai hal-hal berikut dan mampu mempraktikkannya.  Pengantar operasi geometrik  Penggeseran citra  Pemutaran citra  Interpolasi piksel  Pemutaran citra berdasarkan sebarang koordi  Pemutaran citra secara utuh  Pembesaran citra  Pengecilan citra  Pembesaran citra dengan skala vertikal dan horizontal  Pencerminan citra  Transformasi affine  Efek ripple  Efek twirl  Transformasi spherical  Transformasi bilinear
  • 2. 122 Pengolahan Citra, Teori dan Aplikasi 5.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 5.1. Citra masukan Citra keluaran (b) Pemetaan ke depan Citra masukan Citra keluaran (a) Pemetaan ke belakang (mundur) Gambar 5.1 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.
  • 3. Operasi Geometrik 123 Lubang yang ditimbulkan karena piksel tidak diberi nilai pada pemetaan ke depan dapat dilihat pada Gambar 5.5. Pada Gambar 5.1(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). 5.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. Contoh berikut menunjukkan program yang digunakan untuk melakukan penggeseran citra. Program : geser.m % GESER Melakukan operasi penggeseran citra. F = imread('c:Imagegedung.png'); [tinggi, lebar] = size(F);
  • 4. 124 Pengolahan Citra, Teori dan Aplikasi sx = 45; % Penggesaran arah horisontal sy = -35; % Penggesaran arah vertikal F2 = double(F); G = zeros(size(F2)); for y=1 : tinggi for x=1 : lebar xlama = x - sx; ylama = y - sy; if (xlama>=1) && (xlama<=lebar) && ... (ylama>=1) && (ylama<=tinggi) G(y, x) = F2(ylama, xlama); else G(y, x) = 0; end end end G = uint8(G); figure(1); imshow(G); clear all; Akhir Program Pada contoh di atas, citra digeser ke kanan sebesar 45 piksel (ditentukan melalui sx) dan ke atas sebesar 35 piksel (diatur melalui sy). Apabila xlama hasil perhitungan di luar jangkauan [1, lebar] atau ylama hasil perhitungan di luar jangkauan [1, tinggi], intensitas piksel pada posisi (y, x) diisi dengan nol (warna hitam). Posisi yang tidak berada pada posisi koordinat yang valid dalam citra lama akan diisi dengan nilai nol melalui G(y, x) = 0; Hasilnya diperlihatkan pada Gambar 5.2.
  • 5. Operasi Geometrik 125 (a) Citra gedung asli (b) Hasil penggeseran Gambar 5.2 Contoh penggeseran citra Gambar hitam di bagian kiri dan bagian atas adalah efek dari 5.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 5.3 menjelaskan bentuk pemutaran citra. Adapun rumus yang digunakan untuk memutar citra dengan sudut 𝜃 berlawanan arah jam berupa: 𝑥 𝑏𝑎𝑟𝑢 = 𝑥 ∗ 𝐶𝑜𝑠( 𝜃) + 𝑦 ∗ 𝑆𝑖𝑛 ( 𝜃) (5.3) 𝑦 𝑏𝑎𝑟𝑢 = 𝑦 ∗ 𝐶𝑜𝑠( 𝜃) − 𝑥 ∗ 𝑆𝑖𝑛(𝜃) (5.4)
  • 6. 126 Pengolahan Citra, Teori dan Aplikasi (0,0) Bingkai citra hasil rotasi Bagian citra asli yang masuk di bingkai citra hasil Hasil pemanfaatan pembalikan perhitungan pemutaran citra (pemetaan ke belakang) Citra asli yang diputar Gambar 5.3 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. Implementasinya dapat dilihat berikut ini. Program : rotasi.m % ROTASI Melakukan Operasi pemutaran citra. % Versi 1 % Menggunakan pendekatan pemetaan ke belakang F = imread('c:Imagesungai.png'); [tinggi, lebar] = size(F); sudut = 10; % Sudut pemutaran rad = pi * sudut/180; cosa = cos(rad);
  • 7. Operasi Geometrik 127 sina = sin(rad); F2 = double(F); for y=1 : tinggi for x=1 : lebar x2 = round(x * cosa + y * sina); y2 = round(y * cosa - x * sina); if (x2>=1) (y2>=1) G(y, x) else G(y, x) end && (x2<=lebar) && ... && (y2<=tinggi) = F2(y2, x2); = 0; end end G = uint8(G); figure(1); imshow(G); clear all; Akhir Program Contoh hasil pemutaran dapat dilihat pada Gambar 5.4. (a) Citra sungai asli (b) Hasil pemutaran Gambar 5.4 Contoh pemutaran citra Apa yang terjadi kalau dilaksanakan pemetaan ke depan dengan menggunakan rumus pada Persamaan 5.3 dan 5.4? Sebagaimana telah dijelaskan di depan (Subbab 5.1), cara seperti itu dapat menimbulkan lubang pada citra hasil. Artinya, akan ada piksel yang tidak terisi dengan piksel dari citra masukan. Untuk melihat efek ini, cobalah jalankan program berikut.
  • 8. 128 Pengolahan Citra, Teori dan Aplikasi Program : rotasi2.m % ROTASI2 Melakukan operasi pemutaran citra. % Versi 2 % Menggunakan pemetaan ke depan F = imread('c:Imagegedung.png'); [tinggi, lebar] = size(F); sudut = 5; % Sudut pemutaran rad = pi * sudut/180; cosa = cos(rad); sina = sin(rad); F2 = double(F); G=zeros(tinggi, lebar); for y=1 : tinggi for x=1 : lebar x2 = round(x * cosa - y * sina); y2 = round(y * cosa + x * sina); if (x2>=1) && (x2<=lebar) && ... (y2>=1) && (y2<=tinggi) G(y2, x2) = F2(y, x); end end end G = uint8(G); figure(1); imshow(G); clear all; Akhir Program Hasilnya bisa dilihat pada gambar berikut.
  • 9. Operasi Geometrik 129 (a) Citra gedung asli (b) Hasil pemutaran yang menimbulkan lubang-lubang (bintik-bintik gelap) pada citra Gambar 5.5 Efek pemetaan ke depan Perhatikan pada Gambar 5.5(b). Titik-titik hitam pada citra adalah efek lubang yang memerlukan penanganan lebih lanjut untuk menghilangkannya. 5.4 Interpolasi Piksel Hasil pemutaran citra menggunakan rotasi.m menimbulkan efek bergerigi pada objek citra. Hal itu diakibatkan oleh penggunaan nilai intensitas didasarkan pada piksel tetangga terdekat, yang dilakukan melalui: x2 = round(x * cosa + y * sina); y2 = round(y * cosa - x * sina); Penggunaan fungsi round (pembulatan ke atas) merupakan upaya untuk menggunakan intensitas piksel terdekat. Alternatif lain dilakukan dengan menggunakan floor (pembulatan ke bawah). Gambar berikut menunjukkan keadaan tersebut ketika hasil pada Gambar 5.4 (b) diperbesar.
  • 10. 130 Pengolahan Citra, Teori dan Aplikasi Gambar 5.6 Efek bergerigi pada citra hasil pemutaran memberikan citra terlihat tidak mulus Keadaan seperti itu dapat diperhalus melalui interpolasi piksel. Idenya seperti berikut. Misalnya, hasil perhitungan menghasilkan xlama = 47,09 ylama = 59,85 Pada contoh di depan, piksel yang digunakan berposisi (60, 47) dengan melakukan pembulatan ke atas. Namun, sesungguhnya bisa saja piksel yang digunakan adalah yang berada pada posisi (59, 47) jika dilakukan pembulatan ke bawah. Hal yang perlu diketahui, kemungkinan yang terjadi dapat melibatkan empat buah piksel. Gambar 5.7 menunjukkan keadaan ini. Oleh karena itu, nilai intensitas yang digunakan dapat melibatkan keempat piksel tersebut.
  • 11. Operasi Geometrik 131 Jika ukuran piksel, yaitu di bawah ukuran kepekaan mata pemandang, spek zig-zag tidak akan terlihat. Namun, bila pemutran citra terjadi berulang secara serial, cacat gerigi akan membesar. f(p,q) f(p,q+1) a f(p’,q’) b f(p+1,q) p = floor(p’) q = floor(q’) f(p+1,q+1) Gambar 5.7 Model pendekatan bilinear interpolation Perhatikan bahwa f(p’. q’) mempunyai empat piksel terdekat berupa f(p,q), f(p,q+1), f(p+1,q), dan f(p+1,q+1). Pratt (2001) menunjukkan cara menghitung nilai intensitas yang digunakan untuk suatu piksel berdasarkan empat piksel. Rumusnya sebagai berikut: 𝑓( 𝑝′ , 𝑞 ′ ) = (1 − 𝑎)[(1 − 𝑏) 𝑓( 𝑝, 𝑞 ) + 𝑏 𝑓( 𝑝, 𝑞 + 1)] + 𝑎[(1 − 𝑏) 𝑓( 𝑝 + 1, 𝑞 ) + 𝑏 𝑓(𝑝 + 1, 𝑞 + 1)] (5.5) Dalam hal ini, a dan b dihitung melalui: 𝑎 = 𝑝′ − 𝑝 (5.6)
  • 12. 132 Pengolahan Citra, Teori dan Aplikasi 𝑏 = 𝑞′ − 𝑞 (5.7) Rumus dalam Persamaan 5.5 itulah yang disebut sebagai bilinear interpolation. Selain bilinear interpolation, sebenarnya terdapat beberapa cara untuk melakukan interpolasi. Dua cara lain yang populer yaitu bicubic interpolation, yang menggunakan 16 piksel tetangga untuk memperoleh interpolasi intensitas piksel dan bikuadratik yang melibatkan 9 piksel terdekat. Contoh program yang menggunakan interpolasi bilinear untuk mendapatkan intensitas piksel dapat dilihat di bawah ini. Program : rotasi3.m % ROTASI3 Melakukan operasi pemutaran citra. % Versi 3 - menggunakan bilinear interpolation F = imread('c:Imagegedung.png'); [tinggi, lebar] = size(F);
  • 13. Operasi Geometrik 133 sudut = 15; % Sudut pemutaran rad = pi * sudut/180; cosa = cos(rad); sina = sin(rad); F2 = double(F); for y=1 : tinggi for x=1 : lebar x2 = x * cosa + y * sina; y2 = y * cosa - x * sina; if (x2>=1) && (x2<=lebar) && ... (y2>=1) && (y2<=tinggi) % Lakukan interpolasi bilinear p = floor(y2); q = floor(x2); a = y2-p; b = x2-q; if (x2 == lebar) || (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 else G(y, x) = 0; end end end G = uint8(G); figure(1); imshow(G); clear all; Akhir Program Gambar 5.8 memperlihatkan perbedaan hasil antara pemutaran citra yang menggunakan pendekatan interpolasi bilinear dan yang tidak.
  • 14. 134 Pengolahan Citra, Teori dan Aplikasi (a) Tanpa interpolasi  (b) Dengan interpolasi  Gambar 5.8 Perbandingan efek penggunaan interpolasi bilinear Terlihat bahwa hasil yang menggunakan interpolasi bilinear lebih halus. Namun, tentu saja, kehalusan tersebut harus dibayar dengan waktu komputasi yang lebih lama. 5.5 Memutar Berdasarkan Sebarang Koordinat Operasi pemutaran citra dapat dilakukan dengan pusat di mana saja; tidak harus dari (0, 0). Gambar 5.9 memperlihatkan keadaan ini.
  • 15. Operasi Geometrik 135 Bingkai citra asli Bingkai citra hasil pemutaran m n Gambar 5.9 Pemutaran citra melalui titik pusat citra Rumus untuk melakukan pemutaran berlawanan arah jarum jam sebesar  yang diperlihatkan pada Gambar 5.9 diperoleh melalui pemodifikasian Persamaan 5.3 dan 5.4: 𝑥 𝑏𝑎𝑟𝑢 = ( 𝑥 − 𝑛) ∗ 𝐶𝑜𝑠( 𝜃) + ( 𝑦 − 𝑚) ∗ 𝑆𝑖𝑛 ( 𝜃) + 𝑛 (5.8) 𝑦 𝑏𝑎𝑟𝑢 = ( 𝑦 − 𝑚) ∗ 𝐶𝑜𝑠( 𝜃) − ( 𝑥 − 𝑛) ∗ 𝑆𝑖𝑛( 𝜃) + 𝑚 (5.9) Untuk kepentingan pemutaran citra sejauh 𝜃 searah jarum jam, intensitas piksel (y, x) dapat diperoleh melalui intensitas pada piksel (ybaru, xbaru) yang tertera pada Persamaan 5.8 dan 5.9. Implementasi program dapat dilihat pada contoh berikut. Program : rotasi4.m % ROTASI4 Melakukan operasi pemutaran citra. % Versi 4 - pusat putaran pada pusat citra
  • 16. 136 Pengolahan Citra, Teori dan Aplikasi F = imread('c:Imagegedung.png'); [tinggi, lebar] = size(F); sudut = 5; % Sudut pemutaran rad = pi * sudut/180; cosa = cos(rad); sina = sin(rad); F2 = double(F); m = floor(tinggi / 2); n = floor(lebar / 2); for y=1 : tinggi for x=1 : lebar x2 = (x-n) * cosa + (y-m) * sina + n; y2 = (y-m) * cosa - (x-n) * sina + m; if (x2>=1) && (x2<=lebar) && ... (y2>=1) && (y2<=tinggi) % Lakukan interpolasi bilinear p = floor(y2); q = floor(x2); a = y2-p; b = x2-q; if (x2==lebar) || (y2 == tinggi) G(y, x) = F(y2, x2); else intensitas = (1-a)*((1-bF(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 else G(y, x) = 0; end end end G = uint8(G); figure(1); imshow(G); clear all; Akhir Program Contoh di atas menggunakan interpolasi bilinear. Hasilnya dapat dilihat pada Gambar 5.10.
  • 17. Operasi Geometrik (a) Citra gedung asli 137 (b) Hasil pemutaran 5o Gambar 5.10 Pemutaran melalui titik pusat citra 5.6 Memutar Citra Secara Utuh Pada seluruh contoh yang telah diberikan, ada bagian gambar yang hilang ketika pemutaran dilaksanakan. Namun, adakalanya dihendaki agar pemutaran citra tidak membuat ada bagian citra asli hilang. Untuk keperluan ini, ukuran citra hasil pemutaran harus diubah sesuai dengan sudut putaran. Dalam hal ini, Persamaan 5.8 dan 5.9 digunakan untuk menentukan keempat pojok gambar semula. Adapun lebar dan tinggi gambar hasil pemutaran dengan menghitung nilai terkecil dan terbesar dari koordinat keempat pojok hasil pemutaran. Untuk lebih jelasnya, lihat Gambar 5.11.
  • 18. 138 Pengolahan Citra, Teori dan Aplikasi (y21,x21) Citra asli (y22,x22) Citra hasil utuh m’= max(y21, y22, y23, y24)min(y21, y22, y23, y24)+1 (y24,x24) m n (y23,x23) m’= max(x21, x22, x23, x24)- min(x21, x22, x23, x24)+1 Gambar 5.11 Penentuan lebar dan tinggi citra hasil pemutaran Implementasi pemutaran citra secara utuh diperlihatkan pada program rotasi5.m. Program : rotasi5.m % ROTASI5 Melakukan operasi pemutaran citra. % Versi 5 % Memutar dengan hasil utuh F = imread('c:Imagegedung.png'); [tinggi, lebar] = size(F); sudut = 45; % Sudut pemutaran rad = pi * sudut/180; cosa = cos(rad); sina = sin(rad); x11 x12 x13 x14 = = = = 1; lebar; lebar; 1; y11 y12 y13 y14 = = = = 1; 1; tinggi; tinggi;
  • 19. Operasi Geometrik m = floor(tinggi/2); n = floor(lebar/2); % Menentukan pojok x21 = ((x11-n) * cosa + (y11-m) * sina + n); y21 = ((y11-m) * cosa - (x11-n) * sina + m); x22 = ((x12-n) * cosa + (y12-m) * sina + n); y22 = ((y12-m) * cosa - (x12-n) * sina + m); x23 = ((x13-n) * cosa + (y13-m) * sina + n); y23 = ((y13-m) * cosa - (x13-n) * sina + m); x24 = ((x14-n) * cosa + (y14-m) * sina + n); y24 = ((y14-m) * cosa - (x14-n) * sina + m); ymin = min([y21 y22 y23 y24]); xmin = min([x21 x22 x23 x24]); ymak = max([y21 y22 y23 y24]); xmak = max([x21 x22 x23 x24]); lebar_baru = xmak - xmin + 1; tinggi_baru = ymak - ymin + 1; tambahan_y = floor((tinggi_baru-tinggi)/2); tambahan_x = floor((lebar_baru-lebar)/2); F2=zeros(tinggi_baru, lebar_baru); for y=1 : tinggi for x=1 : lebar F2(y+tambahan_y, x+tambahan_x) = F(y, x); end end figure(1); imshow( uint8(F2)); % Putar citra m = floor(tinggi_baru/2); n = floor(lebar_baru/2); for y=1 : tinggi_baru for x=1 : lebar_baru x2 = round((x-n) * cosa + (y-m) * sina + n); y2 = round((y-m) * cosa - (x-n) * sina + m); if (x2>=1) && (x2<=lebar_baru) && ... (y2>=1) && (y2<=tinggi_baru) G(y, x) = F2(y2,x2); else G(y,x) = 0; end end end figure(2); G = uint8(G); imshow(G); 139
  • 20. 140 Pengolahan Citra, Teori dan Aplikasi clear all; Akhir Program Hasil pemutaran gambar dengan menggunakan rotasi5.m ditunjukkan pada Gambar 5.12. Gambar 5.12 Pemutaran citra secara utuh 5.7 Memperbesar Citra Suatu citra dapat diperbesar dengan membuat setiap piksel menjadi beberapa piksel. Gambar 5.13 memberikan contoh cara memperbesar citra.
  • 21. Operasi Geometrik 141 Gambar 5.13 Cara memperbesar citra Pada contoh di atas pembesaran pada arah vertikal dan horizontal sebesar 2 kali. Berikut adalah fungsi yang memperlihatkan cara perbesaran tersebut. Program : perbesar.m 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));
  • 22. 142 Pengolahan Citra, Teori dan Aplikasi end end G = uint8(G); Akhir Program 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 1 sampai dengan lebar citra asli. Hal yang serupa dilakukan untuk x2 yang dilaksanakan melalui x2 = ((x-1) / sx) + 1; Berdasar fungsi perbesar di atas, dapat diberikan perintah seperti berikut: >> Img = perbesar('C:Imagelena128.png', 3, 3);  Pada perintah di atas, citra lena12.png diperbesar tiga kali baik pada arah vertikal maupun horizontal. Selanjutnya, hasil perbesaran ditampilkan melalui >> imshow(Img);  Hasilnya dapat dilihat pada Gambar 5.14.
  • 23. Operasi Geometrik 143 (a) Citra lena 128x128 (b) Pembesaran 3x tanpa interpolasi Gambar 5.14 Contoh pembesaran citra Untuk memperhalus hasil perbesaran citra, interpolasi piksel perlu dilakukan. Contoh dapat dilihat pada kode berikut. Program : perbesar2.m 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
  • 24. 144 Pengolahan Citra, Teori dan Aplikasi 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); Akhir Program Penghalusan citra keluaran dilakukan melalui interpolasi bilinear, seperti yang telah dibahas di Subbab 5.4. Untuk melihat hasil interpolasi pada pembesaran citra, dapat diberikan perintah seperti berikut: >> Img = Perbesar2('C:Imagelena128.png', 4, 4);  >> imshow(Img);  Hasilnya dapat dilihat pada Gambar 5.15.
  • 25. Operasi Geometrik 145 (a) Citra lena 128x128 (b) Pembesaran 3x Gambar 5.15 Contoh perbesaran citra dengan interpolasi Cobalah untuk membandingkan hasil di atas dengan hasil pada Gambar 5.14. 5.8 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:Imagelena256.png', 0.5, 0.5);  >> imshow(Img);  Hasilnya dapat dilihat pada Gambar 5.16.
  • 26. 146 Pengolahan Citra, Teori dan Aplikasi (b) Hasil pengecilan 0,5 x pada arah vertikal dan horisontal (a) Citra lena 256x256 Gambar 5.16 Contoh pengecilan dengan interpolasi 5.9 Perbesaran dengan Skala Vertikal dan Horizontal Berbeda Fungsi perbesar dan perbesar2 dapat digunakan untuk melakukan perbesaran/pengecilan dengan skala horizontal dan vertikal yang berbeda. Sebagai contoh, dapat diberikan perintah seperti berikut: >> Img = perbesar2('C:Imagegedung.png', 0.5, 2.5);  >> imshow(Img);  Hasilnya ditunjukkan pada Gambar 5.17. Gambar 5.17 Gedung diperbesar 1/2 kali pada arah vertikal dan 2,5 kali pada arah horizontal 5.10 Pencerminan Citra Pencerminan yang umum dilakukan berupa pencerminan secara vertikal dan pencerminan secara horizontal. Pencerminan secara horizontal dilakukan dengan menukarkan dua piksel yang berseberangan kir-kanan, sebagaimana diperlihatkan
  • 27. Operasi Geometrik 147 pada Gambar 5.18. Algoritma untuk menangani pencerminan secara horizontal diperlihatkan Algoritma 5.1. Gambar 5.18 Pencerminan secara horizontal ALGORITMA 5.1 – Mencerminkan gambar secara horizontal Masukan:  f (M,N): Citra masukan berukuran M baris dan N kolom Keluaran:  g (M, N): Hasil citra yang telah dicerminkan secara horizontal 1. FOR baris  1 TO M 2. FOR kolom  1 TO N 3. g(baris, kolom)  f(N – baris + 1, kolom) 4. END-FOR 5. END-FOR Implementasinya ditunjukkan pada program berikut. Program : cerminh.m function G = cerminh(F) % CERMINH Berfungsi untuk mencerminkan citra % secara horizontal
  • 28. 148 % Pengolahan Citra, Teori dan Aplikasi Masukan: F = Citra berskala keabuan [tinggi, lebar] = size(F); for y=1 : tinggi for x=1 : lebar x2 = lebar - x + 1; y2 = y; G(y, x) = F(y2, x2); end end G = uint8(G); Akhir Program Contoh pemakaian fungsi cerminh: >> F = imread('C:Imageboneka.png'); >> G = cerminh(F); imshow(G) Contoh pencerminan gambar secara horizontal ditunjukkan pada Gambar 5.19. (a) Citra boneka.tif (b) Pencerminan secara horizontal Gambar 5.19 Pencerminan secara horizontal Pencerminan secara vertikal dilakukan dengan menukarkan dua piksel yang berseberangan atas-bawah, sebagaimana diperlihatkan pada Gambar 5.20. Algoritma untuk menangani pencerminan secara horizontal diperlihatkan Algoritma 5.2.
  • 29. Operasi Geometrik Gambar 5.20 Pencerminan secara vertikal ALGORITMA 5.2 – Mencerminkan gambar secara vertikal Masukan:  f (M,N): Citra masukan berukuran M baris dan N kolom Keluaran:  g (M, N): Hasil citra yang telah dicerminkan secara horizontal 1. FOR baris  1 TO M 2. 3. 4. FOR kolom  1 TO N g(baris, kolom)  f(baris, N – kolom + 1) END-FOR 5. END-FOR Implementasinya ditunjukkan pada program berikut. Program : cerminv.m function G = cerminv(F) % CERMINV Berfungsi untuk mencerminkan citra % secara vertikal % Masukan: F = Citra berskala keabuan 149
  • 30. 150 Pengolahan Citra, Teori dan Aplikasi [tinggi, lebar] = size(F); for y=1 : tinggi for x=1 : lebar x2 = x; y2 = tinggi - y + 1; G(y, x) = F(y2, x2); end end G = uint8(G); Akhir Program Contoh pemakaian fungsi cerminv: >> F = imread('C:Imageboneka.png');  >> G = cerminv(F); imshow(G)  Contoh pencerminan gambar secara vertikal ditunjukkan pada Gambar 5.21. (a) Citra boneka.tif (b) Pencerminan secara vertikal Gambar 5.21 Pencerminan secara vertikal
  • 31. Operasi Geometrik 151 Di beberapa software, pencerminan secara horizontal justru dinamakan vertical flip. 5.11 Transformasi Affine Transformasi affine adalah transformasi linear yang menyertakan penskalaan, pemutaran, penggeseran, dan shearing (pembengkokan). Transformasi affine dapat dinyatakan dengan persamaan seperti berikut: 𝑎11 𝑥′ [ ]=*𝑎 𝑦′ 21 𝑎12 𝑥 𝑡𝑥 + * 𝑦+ + [ 𝑡 ] 𝑎22 𝑦 (5.10) Persamaan di atas dapat ditulis pula menjadi seperti berikut: 𝑎11 𝑥′ [ 𝑦′] = [ 𝑎21 0 1 𝑎12 𝑎22 0 𝑡𝑥 𝑥 𝑡 𝑦 ] [ 𝑦] 1 1 (5.11) Berdasarkan persamaan di atas, terlihat bahwa transformasi affine memiliki enam derajat kebebasan: dua untuk translasi (t x dan ty) dan empat buah untuk rotasi, penskalaan, stretching, dan shearing (a11, a12, a21, dan a22). Tabel 5.1 menunjukkan koefisien yang digunakan dalam matriks di depan untuk menyatakan operasi dasar penskalaan, rotasi, translasi, dan pembengkokan. Tentu saja, keenam koefisien tersebut dapat diatur secara bebas untuk mendapatkan transformasi affine. Untuk melakukan penggabungan dua operasi dasar, koefisien yang sama dari dua jenis transformasi dapat dikalikan. Contoh dapat dilihat pada Gambar 5.22.
  • 32. 152 Pengolahan Citra, Teori dan Aplikasi Tabel 5.1 Koefisien untuk menentukan efek penskalaan, rotasi. translasi, dan pembengkokan Transformasi a11 a12 a21 a22 tx ty Translasi sebesar (y, x) 1 0 0 1 x Y Rotasi sebesar  cos  sin  -sin cos 0 0   Penyekalaan sebesar s s 0 0 S 0 0 Pembengkokan secara 1 S 0 1 0 0 1 0 s 1 0 0 vertikal sebesar s Pembengkokan secara horizontal sebesar s Gambar 5.22 Contoh transformasi linear yang mencakup rotasi, penyekalaan, dan affine
  • 33. Operasi Geometrik 153 Fungsi berikut berguna untuk mewujudkan transformasi affine. Program : taffine.m function G = taffine(F, a11, a12, a21, a22, tx, ty) % TAFFINE Digunakan untuk melakukan transformasi affine. % Masukan: F = Citra berskala keabuan % a11, a12, a21, a22, tx, ty = mengatur % transformasi affine [tinggi, lebar] = size(F); for y=1 : tinggi for x=1 : lebar x2 = a11 * x + a12 * y + tx; y2 = a21 * x + a22 * y + ty; if (x2>=1) && (x2<=lebar) && ... (y2>=1) && (y2<=tinggi) % p q a b Lakukan interpolasi bilinear = floor(y2); = floor(x2); = y2-p; = 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 else G(y, x) = 0; end end end G = uint8(G); Akhir Program Contoh penggunaan fungsi taffine untuk melakukan pembengkokan:
  • 34. 154 Pengolahan Citra, Teori dan Aplikasi >> F = imread('C:Imagegedung.png');  >> G = taffine(F,1,0.15,0,1,0,0);  >> imshow(G)  Contoh berikut digunakan untuk memutar gambar: >> rad = 10 * pi / 180; >> G = taffine(F,cos(rad),sin(rad), … -sin(rad),cos(rad),0,0); >> imshow(G)  Contoh penggabungan rotasi dan translasi: >> G = taffine(F,cos(rad),sin(rad),-sin(rad), … cos(rad),-30,-50);  Contoh penggabungan rotasi, penskalaan, dan translasi: >> G = taffine(F,2 * cos(rad),sin(rad),-sin(rad), … 2 * cos(rad),-30,-50);  Perlu diketahui, angka seperti 2 di depan cos(rad) menyatakan bahwa hasilnya adalah kebalikannya, yaitu ½ kalinya. 5.12 Efek Ripple Efek ripple (riak) adalah aplikasi transformasi citra yang membuat gambar terlihat bergelombang. Efek riak dapaat dibuat baik pada arah x maupun y. Transformasinya seperti berikut: 𝑥 = 𝑥 ′ + 𝑎 𝑥 𝑠𝑖𝑛 2𝜋𝑦′ 𝑦 = 𝑦 ′ + 𝑎 𝑦 𝑠𝑖𝑛 2𝜋𝑥′ 𝑇𝑥 𝑇𝑦 (5.12) (5.13)
  • 35. Operasi Geometrik 155 Dalam hal ini, ax dan ay menyatakan amplitudo riak gelombang sinus, sedangkan Tx dan Ty menyatakan periode gelombang sinus. Implementasi efek gelombang dapat dilihat di bawah ini. Program : ripple.m function G = ripple(F, ax, ay, tx, ty) % RIPPLE Berfungsi untuk melakukan transformasi 'ripple'. dimensi = size(F); tinggi = dimensi(1); lebar = dimensi(2); for y=1 : tinggi for x=1 : lebar x2 = x + ax * y2 = y + ay * if (x2>=1) && (y2>=1) && % p q a b sin(2 * pi * y / tx); sin(2 * pi * x / ty); (x2<=lebar) && ... (y2<=tinggi) Lakukan interpolasi bilinear = floor(y2); = floor(x2); = y2-p; = 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 else G(y, x) = 0; end end end G = uint8(G); Akhir Program ...
  • 36. 156 Pengolahan Citra, Teori dan Aplikasi Contoh penggunaan fungsi ripple: >> F = imread('C:imagegedung.png');  >> G = ripple(F,10,15,120, 250);  >> imshow(G)  Pada contoh di atas, amplitude gelombang sinus yang digunakan berupa 10 dan 15, sedangkan periode yang digunakan 120 dan 250. Contoh hasil perintah di atas ditunjukkan pada Gambar 5.23. Gambar 5.23 Contoh hasil efek ripple Beberapa contoh yang lain dapat dilihat pada Gambar 5.24.
  • 37. Operasi Geometrik 157 Gambar 5.24 Berbagai hasil efek ripple 5.13 Efek Twirl Transformasi twirl (olak atau puntiran) dilakukan dengan memutar citra berdasarkan titik pusat citra, tetapi tidak bersifat linear. Salah satu varian bentuk transformasinya, yang diadaptasi dari Burger & Burge (2008), sebagai berikut: 𝑥′ = 𝑥 𝑐 + 𝑟 cos(𝛽) 𝑦′ = 𝑦 𝑐 + 𝑟 sin(𝛽) (5.15) (5.14)
  • 38. 158 Pengolahan Citra, Teori dan Aplikasi dengan 𝑟 = √( 𝑥 − 𝑥 𝑐 )2 + ( 𝑦 − 𝑦 𝑐 )2 (5.16) 𝛽 = 𝐴𝑟𝑐𝑇𝑎𝑛(𝑑 𝑦 , 𝑑 𝑥 ) + 𝛼(𝑟 𝑚𝑎𝑘𝑠 − 𝑟)/𝑟 𝑚𝑎𝑘𝑠 (5.17) Contoh berikut menggunakan rmaks sebesar ½ diagonal citra dan  sebesar 43o. Program : twirl.m function G = twirl(F) % TWIRL Berfungsi untuk melakukan transformasi 'twirl' dimensi = size(F); tinggi = dimensi(1); lebar = dimensi(2); xc = round(lebar / 2); yc = round(tinggi / 2); alpha = 43 * pi / 180; rmaks = 0.5 * sqrt(xc^2 + yc ^ 2); % 1/2 diagonal citra for y=1 : tinggi for x=1 : lebar r = sqrt((x-xc)^2+(y-yc)^2); beta = atan2(y-yc, x-xc) + … alpha * (rmaks - r) / rmaks; x2 = xc + r * cos(beta); y2 = yc + r * sin(beta); if (x2>=1) && (x2<=lebar) && ... (y2>=1) && (y2<=tinggi) % p q a b Lakukan interpolasi bilinear = floor(y2); = floor(x2); = y2-p; = 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; ...
  • 39. Operasi Geometrik 159 end else G(y, x) = 0; end end end G = uint8(G); Akhir Program Contoh penggunaan fungsi twirl: >> F = imread('C:Imagekotatua.png');  >> G = swirl(F); imshow(G)  Hasil ditunjukkan pada Gambar 5.25. Gambar 5.25 Efek transformasi twirl 5.14 Transformasi Spherical Transformasi spherical memberikan efek bulatan (bola), seperti melihat gambar menggunakan lensa pembesar. Bagian tengah terlihat membesar. Hal seperti itu diperoleh dengan menggunakan transformasi seperti berikut. 𝑥′ = { 𝑥 − 𝑧 ∗ tan( 𝑏 𝑥 ) , 𝑥, 𝑗𝑖𝑘𝑎 𝑟 ≤ 𝑟 𝑚𝑎𝑘𝑠 𝑗𝑖𝑘𝑎 𝑟 > 𝑟 𝑚𝑎𝑘𝑠 (5.18)
  • 40. 160 Pengolahan Citra, Teori dan Aplikasi 𝑦′ = { 𝑦 − 𝑧 ∗ tan(𝑏 𝑦 ) , 𝑦, 𝑗𝑖𝑘𝑎 𝑟 ≤ 𝑟 𝑚𝑎𝑘𝑠 𝑗𝑖𝑘𝑎 𝑟 > 𝑟 𝑚𝑎𝑘𝑠 (5.19) dengan 1 𝑏 𝑥 = (1 − 𝜌) ∗ 𝑎𝑟𝑐 sin ( 𝑥−𝑥 𝑐 √(𝑥−𝑥 𝑐 )2 +𝑧 2 1 𝑏 𝑦 = (1 − 𝜌) ∗ 𝑎𝑟𝑐 sin ( ) (5.20) ) (5.21) 𝑦−𝑦 𝑐 √(𝑦−𝑦 𝑐 )2 +𝑧 2 𝑟 = √( 𝑥 − 𝑥 𝑐 )2 + ( 𝑦 − 𝑦 𝑐 )2 (5.22) 𝑧 = √𝑟 𝑚𝑎𝑘𝑠 2 + 𝑟 2 (5.23) 𝑟 𝑚𝑎𝑘𝑠 = 𝑥 𝑐 (5.24) 𝑥 𝑐 = 𝑙𝑒𝑏𝑎𝑟/2 (5.25) 𝑦 𝑐 = 𝑡𝑖𝑛𝑔𝑔𝑖/2 (5.26) Perlu diketahui, 𝜌 disebut indeks refraksi atau indeks pantulan. Implementasi transformasi spherical dapat dilihat pada program berikut. Program : spheri.m function G = spheri(F, rho) % SPHERI Berfungsi untuk melakukan transformasi 'spherical' dimensi = size(F); tinggi = dimensi(1); lebar = dimensi(2); xc = round(lebar / 2); yc = round(tinggi / 2); rmaks = xc; % 1/2 lebar gambar for y=1 : tinggi for x=1 : lebar r = sqrt((x-xc)^2+(y-yc)^2); z = sqrt(rmaks^2-r^2); bx = (1 - 1/rho) * asin((x-xc)/... sqrt((x-xc)^2+z^2)); by = (1 - 1/rho) * asin((y-yc)/...
  • 41. Operasi Geometrik 161 sqrt((y-yc)^2+z^2)); if r <= rmaks x2 = x - z * tan(bx); y2 = y - z * tan(by); else x2 = x; y2 = y; end if (x2>=1) && (x2<=lebar) && ... (y2>=1) && (y2<=tinggi) % p q a b Lakukan interpolasi bilinear = floor(y2); = floor(x2); = y2-p; = 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 else G(y, x) = 0; end end end G = uint8(G); Akhir Program Pemakaian skrip di atas dapat dilihat pada contoh berikut: >> F = imread('C:Imagekotatua.png');  >> G = spheri(F, 1.8); imshow(G)  Hasil ditunjukkan pada Gambar 5.26.
  • 42. 162 Pengolahan Citra, Teori dan Aplikasi Gambar 5.26 Transformasi spherical 5.15 Transformasi bilinear Transformasi bilinear mempunyai fungsi pemetaan seperti berikut: 𝑥 ′ = 𝑎1 𝑥 + 𝑎2 𝑦 + 𝑎3 𝑥𝑦 + 𝑎4 (5.27) 𝑦 ′ = 𝑏1 𝑥 + 𝑏2 𝑦 + 𝑏3 𝑥𝑦 + 𝑏4 (5.28) Transformasi ini termasuk dalam transformasi nonlinear mengingat terdapat pencampuran xy. Implementasi dalam bentuk program dapat dilihat berikut ini. Program : tbilin.m function G = tbilin(F, a1, a2, a3, a4, b1, b2, b3, b4) % Fungsi untuk melakukan transformasi bilinear dimensi = size(F); tinggi = dimensi(1); lebar = dimensi(2); for y=1 : tinggi for x=1 : lebar x2 = a1 * x + a2 * y + a3 * x * y + a4; y2 = b1 * x + b2 * y + b3 * x * y + b4; if (x2>=1) && (x2<=lebar) && ... (y2>=1) && (y2<=tinggi)
  • 43. Operasi Geometrik % p q a b 163 Lakukan interpolasi bilinear = floor(y2); = floor(x2); = y2-p; = 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 else G(y, x) = 0; end end end G = uint8(G); Akhir Program Contoh pemanggilan fungsi tbilin seperti berikut: >> F = imread('C:Imagekotatua.png');  >> G = tbilin(F, 1.2,0.1,0.005,-45,0.1,1,0.005,-30);  >> imshow(G)  Hasinya dapat dilihat pada Gambar 5.27.
  • 44. 164 Pengolahan Citra, Teori dan Aplikasi Gambar 5.27 Transformasi bilinear  Latihan 1. Jelaskan pengertian operasi geometrik. 2. Apa yang disebut dengan istilah berikut. (a) Pemetaan ke belakang (b) Pemetaan ke depan 3. Jelaskan yang dimaksud dengan interpolasi bilinear. 4. Tuliskan persamaan matematika yang menggambarkan operasi pencerminan secara vertikal. 5. Tuliskan sebuah algoritma yang sekaligus digunakan untuk mencerminkan secara horizontal dan vertikal. Implementasikan dalam bentuk program dan ujilah. 6. Cobalah untuk menguji skrip untuk pencerminan dengan menggunakan gambar berwarna. Apa yang terjadi dengan hasilnya? Mengapa begitu? 7. Cobalah untuk memodifikasi cerminh dan cerminv agar bisa digunakan untuk melakukan pencerminan terhadap gambar berwarna. 8. Jelaskan apa yang dimaksud dengan transformasi-transformasi berikut. (a) Affine (b) Spherical
  • 45. Operasi Geometrik 165 (c) Twirl (d) Ripple (e) Bilinear 9. Gambar berikut memberikan gambaran mengenai proses interpolasi linear (berdimensi satu), yang menjadi dasar dalam penentuan interpolasi bilinear (berdimensi dua). Berdasarkan gambar di atas, buktikan bahwa f(q’) = (1-a) f(q) + a f(q+1)