Seputar Dunia IT dan Fakta Unik Lainnya

Wednesday 21 June 2017

Contoh Program Pengolahan Citra Menggunakan Octave (Part 2)

Contoh Program Pengolahan Citra Menggunakan Octave (Part 2)


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 :

Contoh Program Pengolahan Citra Menggunakan Octave (Part 2)


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

Blog Archive