Latest Updates
Showing posts with label Pengolahan Citra. Show all posts
Showing posts with label Pengolahan Citra. Show all posts

Transformasi Geometri

Transformasi Geometri
Dalam pengolahan citra digital terkadang diperlukan transformasi geometri untuk merepresentasikan citra dalam arah yang lain. Transformasi geometri di antaranya meliputi operasi flip dan rotasi. Berikut ini merupakan contoh aplikasi pemrograman GUI Matlab mengenai Geometric Image Transformations:
1. Citra Asli (Original Image)
2. Operasi Flip Horizontal
3. Operasi Flip Vertical
4. Operasi Flip Horizontal dilanjutkan Flip Vertical
5. Operasi rotasi searah jarum jam dengan sudut 54°
6. Operasi rotasi berlawanan arah jarum jam dengan sudut 162°

Region of Interest (ROI)

Region of Interest (ROI)
Dalam pengolahan citra, terkadang kita hanya menginginkan pengolahan hanya pada daerah/bagian tertentu dari citra. Daerah yang kita inginkan tersebut disebut dengan Region of Interest (ROI).
Proses untuk mendapatkan ROI salah satunya adalah dengan cara melakukan cropping pada suatu citra. Berikut ini merupakan contoh tampilan pemrograman GUI Matlab untuk meng-crop sebuah citra:
1. Citra Asli (Original Image)
2. Rectangle Crop
3. Square Crop
4. Circle Crop
5. Ellipse Crop
6. Polygon Crop

Operasi morfologi citra

Operasi morfologi citra
Operasi morfologi citra merupakan suatu proses yang bertujuan untuk mengubah bentuk objek pada citra asli. Proses tersebut dapat dilakukan pada citra grayscale maupun citra biner.
Jenis-jenis operasi morfologi di antaranya adalah dilasi, erosi, closing, dan opening. Secara berurutan, persamaan yang digunakan untuk masing-masing operasi yaitu:

di mana A adalah citra asli dan B adalah structuring element. Structuring element merupakan matriks operator yang dapat berbentuk garis, persegi, disk, diamond, dll.
Contoh aplikasi pemrograman GUI Matlab untuk operasi morfologi adalah sebagai berikut:
1. Membaca dan menampilkan citra asli


2. Operasi erosi dengan structure element ‘line’ dan R = 10

3. Operasi erosi dengan structure element ‘disk’ dan R = 5

4. Operasi dilasi dengan structure element ‘diamond’ dan R = 8

5. Operasi dilasi dengan structure element ‘square’ dan R = 10

6. Operasi opening dengan structure element ‘diamond’ dan R = 4

7. Operasi closing dengan structure element ‘line’ dan R = 10

Ekstraksi Ciri Citra

Ekstraksi Ciri Citra
Ekstraksi ciri citra merupakan tahapan mengekstrak ciri/informasi dari objek di dalam citra yang ingin dikenali/dibedakan dengan objek lainnya
Ciri yang telah diekstrak kemudian digunakan sebagai parameter/nilai masukan untuk membedakan antara objek satu dengan lainnya pada tahapan identifikasi/ klasifikasi.
Ciri yang umumnya diekstrak antara lain:
1. Ekstraksi Ciri Bentuk
Untuk membedakan bentuk objek satu dengan objek lainnya, dapat menggunakan parameter yang disebut dengan ‘eccentricity’. Eccentricity merupakan nilai perbandingan antara jarak foci ellips minor dengan foci ellips mayor suatu objek. Eccentricity memiliki rentang nilai antara 0 hingga 1. Objek yang berbentuk memanjang/mendekati bentuk garis lurus, nilai eccentricitynya mendekati angka 1, sedangkan objek yang berbentuk bulat/lingkaran, nilai eccentricitynya mendekati angka 0. Penghitungan eccentricity diilustrasikan pada gambar di bawah ini:

Parameter lainnya yang dapat digunakan untuk membedakan bentuk suatu objek yaitu ‘metric’. Metric merupakan nilai perbandingan antara luas  dan keliling objek. Metric memiliki rentang nilai antara 0 hingga 1. Objek yang berbentuk memanjang/mendekati bentuk garis lurus, nilai metricnya mendekati angka 0, sedangkan objek yang berbentuk bulat/lingkaran, nilai metricnya mendekati angka 1. Penghitungan metric diilustrasikan pada gambar di bawah ini:
2. Ekstraksi Ciri Ukuran
Untuk membedakan ukuran objek satu dengan objek lainnya dapat menggunakan parameter luas dan keliling. Luas merupakan banyaknya piksel yang menyusun suatu objek. Sedangkan keliling merupakan banyaknya piksel yang mengelilingi suatu objek. Materi mengenai pemrograman matlab untuk menghitung luas dan keliling suatu objek dapat dilihat pada laman berikut ini: Cara menghitung luas dan keliling suatu citra
3. Ekstraksi Ciri Geometri
Ciri geometri merupakan ciri yang didasarkan pada hubungan antara dua buah titik, garis, atau bidang dalam citra digital. Ciri geometri di antaranya adalah jarak dan sudut. Jarak antara dua buah titik (dengan satuan piksel) dapat ditentukan menggunakan persamaan euclidean, minkowski, manhattan, dll. Jarak dengan satuan piksel tersebut dapat dikonversi menjadi satuan panjang seperti milimeter, centimeter, meter, dll dengan cara membaginya dengan resolusi spasial (materi mengenai perhitungan jarak dapat dilihat pada laman berikut ini: Cara mengukur jarak antara dua objek dalam citra). Sedangkan sudut antara dua buah garis dapat ditentukan dengan perhitungan trigonometri maupun dengan analisis vektor.

4. Ekstraksi Ciri Tekstur
Untuk membedakan tekstur objek satu dengan objek lainnya dapat menggunakan ciri statistik orde pertama atau ciri statistik orde dua. Ciri orde pertama didasarkan pada karakteristik histogram citra. Ciri orde pertama umumnya digunakan untuk membedakan tekstur makrostruktur (perulangan pola lokal secara periodik). Ciri orde pertama antara lain: mean, variance, skewness, kurtosis, dan entropy. Sedangkan ciri orde dua didasarkan pada probabilitas hubungan ketetanggaan antara dua piksel pada jarak dan orientasi sudut tertentu. Ciri orde dua umumnya digunakan untuk membedakan tekstur mikrostruktur (pola lokal dan perulangan tidak begitu jelas). Ciri orde dua antara lain: Angular Second Moment, Contrast, Correlation, Variance, Inverse Different Moment, dan Entropy.
Analisis tekstur juga dapat dilakukan dalam domain frekuensi antara lain menggunakan filter bank gabor.
5. Ekstraksi Ciri Warna
Untuk membedakan suatu objek dengan warna tertentu dapat menggunakan nilai hue yang merupakan representasi dari cahaya tampak (merah, jingga, kuning, hijau, biru, ungu). Nilai hue dapat dikombinasikan dengan nilai saturation dan value yang merupakan tingkat kecerahan suatu warna. Untuk mendapatkan ketiga nilai tersebut, perlu dilakukan konversi ruang warna citra yang semula RGB (Red, Green, Blue) menjadi HSV (Hue, Saturation, Value) melalui persamaan berikut:
R‘ = R/255
G‘ = G/255
B‘ = B/255
Cmax = max(R‘, G‘, B‘)
Cmin = min(R‘, G‘, B‘)
Δ = CmaxCmin
 Perhitungan nilai Hue:

Perhitungan nilai Saturation:

Perhitungan nilai Value:
V = Cmax
sehingga ruang warna citra yang semula berbentuk kubus berubah bentuk menjadi kerucut
rgb colorspace
hsv colorspace
Ekstraksi ciri citra merupakan tahapan penting dalam bidang computer vision (pengolahan citra dan pengenalan pola).
Beberapa hal yang perlu diperhatikan dalam memilih ciri yang tepat yang akan digunakan sebagai masukan pada tahapan klasifikasi citra antara lain:
1. Secara visual (penglihatan manusia), ciri apakah yang membedakan antara kelas satu dengan kelas lainnya?
2. Domain apakah yang akan kita gunakan untuk mengekstrak ciri tersebut? (domain spasial atau domain frekuensi?)
3. Parameter apa sajakah yang akan dipilih untuk mewakili ciri tersebut?
4. Berapa jumlah parameter yang akan kita gunakan?
5. Ciri lain apakah yang memungkinkan untuk kita kombinasikan?

Segmentasi Citra

Segmentasi Citra
Dalam pengolahan citra, terkadang kita menginginkan pengolahan hanya pada obyek tertentu. Oleh sebab itu, perlu dilakukan proses segmentasi citra yang bertujuan untuk memisahkan antara objek (foreground) dengan background. Pada umumnya keluaran hasil segmentasi citra adalah berupa citra biner di mana objek (foreground) yang dikehendaki berwarna putih (1), sedangkan background yang ingin dihilangkan berwarna hitam (0). Sama halnya pada proses perbaikan kualitas citra, proses segmentasi citra juga bersifat eksperimental, subjektif, dan bergantung pada tujuan yang hendak dicapai.
Beberapa metode segmentasi citra diantaranya adalah:
1. Thresholding
2. Active Contour
3. Segmentasi Warna berdasarkan komponen Hue
4. Deteksi Tepi
5. Transformasi Hough
6. Watershed
Segmentasi citra merupakan tahapan penting dalam proses pengenalan pola. Setelah objek berhasil tersegmentasi, maka kita dapat melakukan proses ekstraksi ciri citra. Ekstraksi ciri merupakan tahapan yang bertujuan untuk mengekstrak ciri dari suatu objek di mana ciri tersebut digunakan untuk membedakan antara objek satu dengan objek lainnya.
Materi mengenai segmentasi citra digital di antaranya adalah:
1. Segmentasi Pola Tekstur menggunakan Filter Gabor
2. Segmentasi Warna menggunakan Algoritma Fuzzy C-Means Clustering
3. Segmentasi Warna menggunakan Algoritma K-Means Clustering
4. Segmentasi Warna dalam ruang warna HSV
5. Segmentasi Citra dengan Metode Multi Thresholding dan K-Means Clustering
6. Segmentasi Citra Grayscale dengan Metode K-Means Clustering
Sedangkan contoh citra hasil segmentasi antara lain:


Perbaikan Kualitas Citra

Perbaikan Kualitas Citra
Proses ini biasanya bersifat eksperimental, subjektif, dan bergantung pada tujuan yang hendak dicapai. Operasi pengolahan citra untuk meningkatkan kualitas citra antara lain adalah:
1.   Operasi Titik
Operasi titik dalam image enhancement dilakukan dengan memodifikasi histogram citra masukan agar sesuai dengan karakteristik yang diharapkan. Teknik image enhancement melalui operasi titik antara lain adalah intensity adjustment dan histogram equalization.
Intensity Adjustment
Intensity adjustment bekerja dengan cara melakukan pemetaan linear terhadap nilai intensitas pada histogram awal menjadi nilai intensitas pada histogram yang baru.
Contoh1 (increase the contrast of an image):
Citra rice.tif memiliki nilai kekontrasan yang rendah. Berdasarkan histogramnya, dapat diketahui bahwa citra ini tidak memiliki piksel dengan intensitas di bawah 40 dan di atas 204. Untuk memperbaikinya, kita dapat memetakan histogram secara linear sehingga diperoleh sebuah citra baru yang memiliki rentang histogram antara 0 hingga 255. Contoh perintah untuk melakukan peningkatan kontras adalah:
1
2
3
4
5
6
I=imread('rice.png');
J=imadjust(I,[40/255 204/255],[0/255 255/255]);
figure,imshow(I);
figure,imhist(I);
figure,imshow(J);
figure,imhist(J);
Hasil yang diperoleh ditunjukkan pada Gambar 2.1.
Contoh2 (decrease the contrast of an image):
Citra cameraman.tif memiliki nilai kekontrasan yang tinggi. Dengan menurunkan kontras dari citra tersebut, jas yang dikenakan oleh cameraman akan tampak lebih detail. Contoh perintah untuk melakukan penurunan kontras adalah:
1
2
3
4
5
6
I=imread('cameraman.tif');
J=imadjust(I,[0 0.2],[0.5 1]);
figure,imshow(I);
figure,imhist(I);
figure,imshow(J);
figure,imhist(J);
 Hasil yang diperoleh ditunjukkan pada Gambar 2.2.
Histogram Equalization
Histogram equalization bertujuan untuk menghasilkan citra keluaran yang memiliki nilai histogram yang relatif sama. Contoh perintah untuk melakukan histogram equalization adalah:
1
2
3
4
5
6
I=imread('mandril_gray.tif');
J=histeq(I);
figure,imshow(I);
figure,imhist(I);
figure,imshow(J);
figure,imhist(J);
Hasil yang diperoleh ditunjukkan pada Gambar 2.3.
2.     Operasi Spasial
Operasi spasial dalam pengolahan citra digital dilakukan melalui penggunaan suatu kernel konvolusi 2-dimensi. Metode image enhancement dalam operasi spasial antara lain low-pass filtering dan high-pass filtering.
Low-pass Filtering
Low-pass filtering adalah proses filter yang melewatkan komponen citra dengan nilai intensitas yang rendah dan meredam komponen citra dengan nilai intensitas yang tinggi. Low pass filter akan menyebabkan citra menjadi lebih halus dan lebih blur.
Aturan kernel untuk low-pass filter adalah:
1. Semua koefisien kernel harus positif
2. Jumlah semua koefisien kernel harus sama dengan 1
Contoh kernel  yang dapat digunakan pada low-pass filtering adalah
Low-pass filtering menggunakan kernel (iii) disebut juga neighborhood averaging. Contoh perintah untuk melakukan low-pass filtering adalah:
1
2
3
4
5
6
7
8
9
10
11
I=imread('bicycle.tif');
lpf1=[1/16 1/8 1/16;1/8 1/4 1/8;1/16 1/8 1/16];
lpf2=[1/10 1/10 1/10;1/10 1/5 1/10;1/10 1/10 1/10];
lpf3=[1 1 1;1 1 1;1 1 1]/9;
J1=uint8(conv2(double(I),lpf1,'same'));
J2=uint8(conv2(double(I),lpf2,'same'));
J3=uint8(conv2(double(I),lpf3,'same'));
figure,imshow(I);
figure,imshow(J1);
figure,imshow(J2);
figure,imshow(J3);
Hasil yang diperoleh ditunjukkan pada Gambar 2.4.
Median Filtering
Median filter merupakan salah satu jenis low-pass filter, yang bekerja dengan mengganti nilai suatu piksel pada citra asal dengan nilai median dari piksel tersebut dan lingkungan tetangganya. Dibandingkan dengan neighborhood averaging, filter ini lebih tidak sensitif terhadap perbedaan intensitas yang ekstrim. Contoh perintah untuk melakukan median filtering terhadap citra yang terkontaminasi noise adalah:
1
2
3
4
5
6
7
8
I=imread('eight.tif');
IN=imnoise(I,'salt & pepper',0.02);
J1=medfilt2(IN,[3 3]);
J2=medfilt2(IN,[5 5]);
figure,imshow(I);
figure,imshow(IN);
figure,imshow(J1);
figure,imshow(J2);
Hasil yang diperoleh ditunjukkan pada Gambar 2.5.
High-pass Filtering
Berkebalikan dengan low-pass filtering, high-pass filtering adalah proses filter yang melewatkan komponen citra dengan nilai intensitas yang tinggi dan meredam komponen citra dengan nilai intensitas yang rendah. High pass filter akan menyebabkan tepi objek tampak lebih tajam dibandingkan sekitarnya.
Aturan kernel untuk high-pass filter adalah:
1. Koefisien kernel boleh positif, negative, atau nol
2. Jumlah semua koefisien kernel adalah 0 atau 1
Contoh kernel  yang dapat digunakan pada high-pass filtering adalah
1
2
3
4
5
6
7
8
9
10
11
I=imread('girl_gray.tif');
hpf1=[-1 -1 -1;-1 8 -1;-1 -1 -1];
hpf2=[ 0 -1 0;-1 5 -1; 0 -1 0];
hpf3=[ 1 -2 1;-2 5 -2; 1 -2 1];
J1=uint8(conv2(double(I),hpf1,'same'));
J2=uint8(conv2(double(I),hpf2,'same'));
J3=uint8(conv2(double(I),hpf3,'same'));
figure,imshow(I);
figure,imshow(J1);
figure,imshow(J2);
figure,imshow(J3);
Hasil yang diperoleh ditunjukkan pada Gambar 2.6.
3.     Operasi Transformasi
Proses image enhancement berbasis transformasi citra dilakukan dengan:
a. mentransformasi domain citra asal ke dalam domain lain yang sesuai bagi proses enhancement
b. melakukan proses enhancement pada domain baru tersebut
c. mengembalikan citra ke dalam domain spasial untuk ditampilkan/diproses lebih lanjut
Salah satu metode transformasi yang populer dalam aplikasi pengolahan citra digital adalah Fast Fourier Transform (FFT). Transformasi ini memindahkan informasi citra dari domain spasial ke dalam domain frekuensi, yaitu dengan merepresentasikan citra spasial sebagai suatu penjumlahan eksponensial kompleks dari beragam frekuensi, magnituda, dan fasa. Setelah dilakukan proses enhancement dalam domain frekuensi, informasi citra dikembalikan ke domain spasial. Contoh perintah untuk melakukan low-pass filtering dan high-pass filtering melalui FFT adalah:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
I=imread('cameraman.tif');
IF=fft2(double(I));
mask_high=double(imread('maskpojok.bmp'));
mask_low=1-mask_high;
IFH=(IF.*mask_high);
IFL=(IF.*mask_low );
hasil_high=abs(ifft2(IFH));
hasil_low=abs(ifft2(IFL));
figure,imagesc(I),colormap gray,colorbar,axis image;
figure,imagesc(log(abs(IF +1)),[0 17]),colormap hot,colorbar,axis image;
figure,imagesc(hasil_high),colormap gray,colorbar,axis image;
figure,imagesc(log(abs(IFH+1)),[0 17]),colormap hot,colorbar,axis image;
figure,imagesc(hasil_low ),colormap gray,colorbar,axis image;
figure,imagesc(log(abs(IFL+1)),[0 17]),colormap hot,colorbar,axis image;
Hasil yang diperoleh ditunjukkan pada Gambar 2.7.

Histogram Citra

Histogram Citra
Histogram citra merupakan diagram yang menggambarkan distribusi frekuensi nilai intensitas warna dalam suatu citra.
Sumbu horizontal merupakan nilai intensitas warna sedangkan sumbu vertikal merupakan frekuensi/jumlah piksel.
Histogram dapat merepresentasikan karakteristik dari suatu citra.
Berikut ini merupakan representasi citra dan histogramnya:
1. Citra RGB
2. Kanal Merah
3. Kanal Hijau
4. Kanal Biru
5. Citra Grayscale
Source code untuk menampilkan histogram dari citra adalah sebagai berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
clc;clear;close all;
Img = imread('peppers.png');
 
R = Img(:,:,1);
G = Img(:,:,2);
B = Img(:,:,3);
 
Red = cat(3,R,G*0,B*0);
Green = cat(3,R*0,G,B*0);
Blue = cat(3,R*0,G*0,B);
 
Gray = rgb2gray(Img);
 
rmap = zeros(256,3);
rmap(:,1) = 0:255;
rmap = rmap/255;
 
gmap = zeros(256,3);
gmap(:,2) = 0:255;
gmap = gmap/255;
 
bmap = zeros(256,3);
bmap(:,3) = 0:255;
bmap = bmap/255;
 
figure,
imshow(Img);
 
figure,
histogram(R(:),256,'FaceColor','r','EdgeColor','r')
hold on
histogram(G(:),256,'FaceColor','g','EdgeColor','g')
histogram(B(:),256,'FaceColor','b','EdgeColor','b')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 10000])
hold off
 
figure,
imshow(Red), colormap(rmap), colorbar
 
figure,
histogram(R(:),256,'FaceColor','r','EdgeColor','r')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 10000])
grid on
 
figure,
imshow(Green), colormap(gmap), colorbar
 
figure,
histogram(G(:),256,'FaceColor','g','EdgeColor','g')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 10000])
grid on
 
figure,
imshow(Blue), colormap(bmap), colorbar
 
figure,
histogram(B(:),256,'FaceColor','b','EdgeColor','b')
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 10000])
grid on
 
figure,
imshow(Gray), colormap(gray), colorbar
 
figure,
histogram(Gray(:),256,'FaceColor',[.5 .5 .5],'EdgeColor',[.5 .5 .5])
set(gca,'XLim',[0 255])
set(gca,'YLim',[0 10000])
grid on