Operasi Geometrik dan Pengolahan citra di kawasan Frekuensi
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:
Interpolasi piksel
Hasil pemutaran citra 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).
Misalnya, hasil perhitungan menghasilkan
xlama = 47,09
ylama = 59,85
Penerapan dalam bentuk Program
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 * sin(2 * pi * y / tx);
y2 = y + ay * sin(2 * pi * x / ty);
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 (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);
Contoh penggunaan fungsi twirl
>> F = imread(' C: \Image \kotatua.png ');
>> G = swirl(F); imshow(G)
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),
Program efek twirl
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)
% 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
else
G(y, x) = 0;
end
end
end
G = uint8(G);
Contoh penggunaan fungsi twirl:
>> F=imread('C:\Image\kotatua.png
>> G=swirl(F); imshow(G)
citra dapat ditransformasikan dikawasan spasial atau keruangan maupun frekuensi.
Dua cara untuk melakuan transformasi ditunjukkan dengan gambar berikut
kk
Comments
Post a Comment