Transformasi Bilinear
Transformasi bilinear termasuk ke dalam transformasi nonlinear karena terdapat pencampuran xy. Hasil operasi ini akan membuat citra menyerupai bentuk kerucut.Script :
function G = transformasi_bilinear(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)
% 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);
end
F = imread('c:\image\kartun.tif');
G = transformasi_bilinear(F, 1.2, 0.1, 0.005, -45, 0.1, 1, 0.005, -30);
subplot(1,2,1); imshow(F);
subplot(1,2,2); imshow(G);
Output :
Filter Lolos Rendah
Filter lolos rendah adalah filter yang mempunyai sifat dapat meloloskan bagian citra yang berfrekuensi rendah dan menghilangkan bagian yang berfreuensi tinggi. Efek ini berguna untuk menghaluskan derau.
Script :
function F = ilpf(berkas, d0)
% Melakukan pemfilteran pada bagian citra berfrekuensi rendah
Fs = double(imread(berkas));
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2);
u(idx) = u(idx) - q;
idy = find(v > p/2);
v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u);
% Hitung jarak D(v,u)
D = sqrt(V.^2 + U.^2);
% Hitung frekuensi ambang sebesar d0 kalai lebar citra
ambang = d0 * q;
% Peroleh fungsi transfer
Hf = double(D <= ambang);
% Transformasi via FFT dengan zero padding
Ff = fft2(Fs, p, q);
% Pemfilteran
G = Hf .* Ff;
% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
end
F = imread('c:\image\kotatua.tif');
G = ilpf('c:\image\kotatua.tif', 0.08);
subplot(1,2,1); imshow(F);
subplot(1,2,2); imshow(G);
Output :
Pencerminan Citra Secara Horizontal
Pencerminan secara horizontal dilakukan dengan menukarkan dua piksel yang bersebrangan kiri-kanan
Script :
function G = cerminh(F)
% Mencerminkan citra secara horizontal
% 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
end
F = imread('c:\image\boneka.tif');
G = cerminh(F);
subplot(1,2,1); imshow(F);
subplot(1,2,2); imshow(G);
Output :
Filter Lolos Rendah Butterworth
Filter lolos rendah Butterworth merupakan jenis filter lolos rendah (low pass filter) yang digunakan untuk memperbaiki efek bergelombang yang dikenal dengan sebutan ringing, yang ditimbulkan oleh filter lolos rendah yang biasa.
Script :
function F = blpf(berkas, d0, n)
% Melakukann pemfilteran frekuensi rendah.
% Metode Butterworth
Fs = double(imread(berkas));
[a, b] = size(Fs); %Peroleh ukuran citra
% Menentukan ukuran baru untuk perluasan citra
r = nextpow2(2 * max(a, b));
p = 2 ^ r;
q = p;
% Menentukan jangkauan frekuensi u dan v
u = 0:(p - 1);
v = 0:(q - 1);
% Hitung indeks untuk meshgrid
idx = find(u > q/2);
u(idx) = u(idx) - q;
idy = find(v > p/2);
v(idy) = v(idy) - p;
% Peroleh array meshgrid
[V, U] = meshgrid(v, u);
% Hitung jarak D(v,u)
D = sqrt(V.^2 + U.^2);
% Menentukan n kalau n tidak disebutkan
if nargin == 2
n = 1;
end
ambang = d0 * p; % Hitung frekuensi ambang
Hf = 1 ./ (1 + (D ./ ambang) .^(2 * n));
% Transformasi via FFT dengan zero padding
Ff = fft2(Fs, p, q);
% Pemfilteran
G = Hf .* Ff;
% Transformasi balik
F = real(ifft2(G));
F = uint8(F(1:a, 1:b));
end
F = imread('c:\image\kotatua.tif');
G = blpf('c:\image\kotatua.tif', 0.1, 0.3);
subplot(1,2,1); imshow(F);
subplot(1,2,2); imshow(G);
Output :
Fast Fourier Transform (FFT)
Fast Fourier Transform (FFT) adalah suatu metoda untuk mempercepat komputasi alihragam Fourier.
Script :
% Fast Fourier Transform (FFT)
Img = imread('c:\image\bulat.png');
F = fft2(Img);
G = log(1 + abs(F));
H = fftshift(F);
% Visualisasi hasil FFT
subplot(2,2,1); imshow(Img);
subplot(2,2,2); imshow(abs(F), []);
subplot(2,2,3); imshow(G, []);
subplot(2,2,4); imshow(log(1+abs(H)), []);
Output :
Sumber : romlisapermana.com
No comments:
Post a Comment
BILA ANDA MEMASUKKAN LINK HIDUP, MAKA AKAN OTOMATIS TERDELETE..