Wednesday, January 22, 2020

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

Sinopsis

Istilah segmentasi dalam pengolahan citra digital sangat luas tapi secara umum digunakan ada 2 yaitu dengan teknik threshholding dan clustering. Operasi thresholding seperti mengubah warna grayscale menjadi hitam putih dengan cara
1.    Menentukan nilai ambang batas secara statis
2.    Ataupun menggunakan teknik otsu
Sedangkan clustering biasa digunakan untuk format truecolor dengan
1.    teknik clustering dan
2.    semantic.
Teknik clustering pun ada beberapa metode yaitu K-Means Clustering, Fuzzy C Means Clustering, sedangkan teknik semantic melihat kepada korelasi tiap objek yang dilatih menggunakan machine learning dan deep learning.

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

Ref: https://towardsdatascience.com/detection-and-segmentation-through-convnets-47aa42de27ea

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

Ref: http://vladlen.info/publications/feature-space-optimization-for-semantic-video-segmentation/

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

Ref: https://www.frontiersin.org/articles/10.3389/fonc.2017.00315/full

Begitu pentingnya teknik segmentasi serta penerapan dalam dunia real seperti (mobil otonom), maka kalian harus mempelajari dasar-dasar segmentasi pengolahan citra digital.  Khusus untuk machine learning/deep learning akan dibuat buku khusus karena selain kalian harus mempelajari dasar-dasar pemrograman kalian juga harus memahami simbol persamaan matematika karena merupakan ilmu terapan dari matrix, statistika.

Segmentasi Statis

Segmentasi Statis yang dimaksud yaitu menggunakan nilai T (ambang batas) yang ditentukan secara manual. Secara umum untuk operasi segmentasi yaitu mengubah grayscale ke hitam putih (binary), pada kode dibawah ini menggunakan nilai \(T=0.35\). Penerapan function nya \(im2bw()\) yang merupakan function overloading (terdiri dari banyak input argument).

clc;clear all;close all;
I = imread('D:/gambar.jpg');
if ndims(I)==3
 gray = rgb2gray(I);
else
 gray = I;
end
%untuk menerapkan batas secara manual
T = 0.35; %dalam skala 0 s.d 1 
bw = im2bw(gray,T);

figure
imshow(bw),
hold on
colorbar()
hold offhold off


Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

Variabel \(bw\) bertype logical atau terdiri dari angka 1 dan 0, dengan \(1=putih\) dan \(0=hitam\)

whos bw


Hasil

  Name        Size              Bytes  Class      Attributes

  bw        296x399            118104  logical



Kalian bisa cek sendiri yang terlihat dari \(colorbar\) yang menginformasikan 0 dan 1. Nilai \(T=0.35\) dalam skala grayscale yaitu \(T=0.35*255\) yaitu $$T=89.250$$ Atau dibulatkan dalam type \(uint8\) menjadi \(T=89\)

Segmentasi Dinamis Adaptive dan Otsu

Operasi segmentasi statis dirasa kurang efektif karena tidak mempertimbangkan kedinamisan sebuah nilai histogram. Kalian bisa cek distribusi histogram

clc;clear all;close all;
I = imread('D:/gambar.jpg');
if ndims(I)==3
 gray = rgb2gray(I);
else
 gray = I;
end

figure
imhist(gray);
xlabel('Nilai Pixel')
ylabel('Frekuensi/Jumlah Kemunculan')


Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

Dari grafik distribusi histogram diatas akan terlihar nilai \(peak\) atau disebut titik global minimum yaitu antara 100 s.d 150. Untuk menentukan nilai T tersebut kalian bisa menggunakan metode Otsu. Otsu, N., "A Threshold Selection Method from Gray-Level Histograms." IEEE Transactions on Systems, Man, and Cybernetics. Vol. 9, No. 1, 1979, pp. 62–66.

Matlab telah menyedian function untuk perhitungan otsu yaitu \(graythresh\) yang secara otomatis akan mengubah truecolor menjadi grayscale yang menghasilkan nilai \(T\) ataupun penggunakan function \(im2bw\) yang secara otomatis menerapkan metode otsu.

clc;clear all;close all;
I = imread('panoramic.jpg');
T = graythresh(I)
bw = im2bw(I,T); %atau langsung bw=im2bw(I)
 
figure
imshow(bw);
hold on
colorbar();
hold off;



Hasil

T =

    0.5059

 Buku Pengolahan Citra Digital dengan Matlab - Segmentasi

nilai \(T\) diatas dalam skala uint8 yaitu \(T=0.5059*255\)
$$T=129$$
Persis apa yang telah kita jelaskan diatas bahwa nilai \(T\) berada di rentang \(100\leq129\leq150\)

Kalian bisa reverse gambar diatas menggunakan tanda \(~\) atau disebut \(negasi\)

Monday, January 20, 2020

Buku Pemrograman Matlab - Linear Programming

Linear Programming


Linear Programming dibangun atas model SPL / Sistem Persamaan Linear dengan kumpulan dari lebih dari satu persamaan linear yang dapat membentuk terhingga banyaknya solusi, tak hingga banyaknya solusi atau tidak mempunyai solusi. Berikut Linear Programming dengan 2 variabel \(a_1x+b_1y=c_2\) dan \(a_2x+b_2y=c_2\)


Program linear adalah suatu metode yang digunakan untuk memecahkan masalah yang berkaitan dengan optimasi linear (nilai maksimum dan nilai minimum).  Misalkan sebuah perusahaan mempunyai tujuan umum seperti memaksimalkan keuntungan dan meminimalkan biaya karena ada batasan berupa sumber daya seperti SDM, waktu, ataupun material/peralatan.

Ciri Khusus Linier Programming:

  1. Masalah mengarah pada pencapaian tujuan maksimisasi atau minimisasi
  2. Kendala yang ada membatasi tingkat pencapaian tujuan
  3. Ada beberapa alternatif penyelesaian
  4. Hubungan bersifat linear

Syarat Linear Programming

Dari 4 ciri khusus diatas, maka Linear Programming harus mempunyai syarat seperti berikut
  1. Certainty (kepastian): fungsi tujuan dan fungsi kendala sudah diketahui dengan pasti dan tidak berubah selama periode analisa.
  2. Proportionality (proporsionalitas): proporsionalitas dalam fungsi tujuan dan fungsi kendala.
  3. Additivity (penambahan): aktivitas total sama dengan penjumlahan aktivitas individu.
  4. Divisibility (bisa dibagi-bagi) : solusi tidak harus merupakan bilangan integer (bilangan bulat), tetapi bisa juga berupa pecahan.
  5. Non-negative variable (variabel tidak negatif): Artinya bahwa semua nilai jawaban atau variabel tidak negatif.

Tahapan dari Linear Programming

  1. Fungsi Tujuan (objective function) Fungsi yang menyatakan tujuan yang akan dicapai, dapat berupa maksimal atau minimal. Misalkan maksimalkan laba/keuntungan ataupun minimalkan biaya.
  2. Fungsi Kendala (contrains or subject to) Fungsi yang menyatakan batasan atau kendala dari faktor produksi yang dimiliki  Simbol yang digunakan : <, >, =
  3. Fungsi Status (status function) Fungsi yang menyatakan bahwa setiap variabel yang terdapat di dalam model programasi linear tidak boleh negatif.

Setelah kalian pahami Tahapan dari Linear Programming, kalian bisa selesaikan persoalan berikut menggunakan function built in di Matlab:

Untuk menggambar persamaan SPL (Sistem Persamaan Linear) kalian bisa kunjungi link: http://www.softscients.web.id/2020/01/dasar-dasar-pemrograman-matlab-grafik.html

PT. SRIL memiliki sebuah pabrik yang akan memproduksi 2 jenis  produk, yaitu kain sutera dan kain wol. Untuk  memproduksi  kedua produk  diperlukan bahan baku benang sutera, bahan baku benang wol dan tenaga  kerja. Maksimum penyediaan benang sutera adalah 60 kg per  hari, benang wol 30 kg per hari dan tenaga kerja 40 jam per hari. Kebutuhan setiap unit produk akan bahan baku dan  jam  tenaga kerja dapat dilihat dalam  tabel berikut:


Maka langkah Pemodelan Linear Programming yaitu
  1. Membuat variabel terlebih dahulu, misalkan X1 = kain sutera; X2 = kain wol
  2. Menentunkan fungsi tujuan yaitu maksimalkan laba dengan persamaan umum \(Z = 40X1 + 30X2\)
  3. Menentukan fungsi kendala yaitu untuk memproduksi kain sutera dan kain wol dibutuhkan 3 hal yaitu benang sutera, benang wol, dan tenaga kerja.
benang sutera
$$2X_1+3X_2\leq60$$
benang wol
$$2X_2\leq30$$

tenaga kerja
$$2X_1+1X_2\leq40$$

Kedua jenis produk memberikan keuntungan  sebesar Rp  40  juta  untuk  kain sutera dan Rp 30 juta untuk kain wol. Masalahnya adalah bagaimana menentukan jumlah unit setiap jenis produk yang akan diproduksi setiap hari agar keuntungan yang diperoleh bisa maksimal?

Pemecahan LP ada beberapa cara yaitu
  1. Grafik digunakan hanya untuk 2 variabel saja yang terlibat
  2. Simplex
  3. Dualitas: Digunakan bila terjadi perubahan kapasitas.
Di Matlab untuk memecahkan permasalahan diatas menggunakan function linprog(). Persamaan umum linear programming yaitu
min \(f'*x\) subject to: \(A*x <=b\)
dengan \(linprog(f,A,b,Aeq,beq,LB,UB)\), untuk kasus diatas bisa kita terapkan kode seperti berikut dengan
f : sebagai fungsi tujuan
A : sebagai fungsi batasan
B: konstanta batasan
LB : lower bound dan UB: upper bound


Kalian bisa buat variabel berikut sesuai dengan persamaan diatas
\[f=
\begin{pmatrix}
40\\
30\\
\end{pmatrix}
\]

\[A=
\begin{pmatrix}
2 & 3\\
0 & 2\\
2 & 1\\
\end{pmatrix}
\]

\[b=
\begin{pmatrix}
60\\
30\\
40\\
\end{pmatrix}
\]


clc;clear all;close all;
f = [40;
    30];
A = [2,3;
    0,2;
    2,1];
b =[60;
    30;
    40];
 
[x,fval,flag]= linprog(-f,A,b);
if flag
    disp('Solusi Optimal yaitu')
    optimal = dot(f,x)    
end



hasil


Optimal solution found.

x =
   15.0000
   10.0000
Solusi Optimal yaitu
optimal =
   900
>>


Dengan X1 sebanyak 15 dan X2 sebanyak 10 akan menghasilkan laba sebesar 900.

Thursday, January 16, 2020

Buku Pengolahan Citra Digital dengan Matlab - Enhancement


Sinopsis

Pengolahan citra digital tidak lepas dari operasi perbaikan kualitas citra/gambar seperti perataan histogram, kontras warna, menghilangkan noise. Topik pembahasan ini melibatkan operasi array ditingkat dasar seperti perubahan kontras, perataaan histogram, rotasi, dan translasi.

Pengubahan Kontras Gambar

Operasi Image Enhancement merupakan operasi dasar yang sering ditemui dalam pengolahan citra digital, dalam pembahasan sebelumnya setiap gambar digital akan direpresentasikan dalam sebuah array 2D (grayscale) ataupun 3D (true color – RGB). Kalian bisa mencoba operasi sederhana seperti penambahan, pengurangan, perkalian, serta pembagian terhadap sebuah gambar.

clc;clear all;close all;
I = imread('panoramic.jpg');
a = I+100;
b = I-100;
c = I*2;
d = I/2;
figure
imshow(I),title('Gambar Asli');
 
figure,
subplot(2,2,1),imshow(a),title('Tambah');
subplot(2,2,2),imshow(b),title('Kurang');
subplot(2,2,3),imshow(c),title('Kali');
subplot(2,2,4),imshow(d),title('Bagi');

Buku Pengolahan Citra Digital dengan Matlab - Enhancement


Buku Pengolahan Citra Digital dengan Matlab - Enhancement


Dengan type data uint8, maka batasan nilai dari 0 sampai dengan 255 saja sehingga nilai-nilai diatas atau dibawah nilai rentang tersebut akan dibuat 0 atau pun 255. Bisa kalian buktikan dengan kode dibawah ini yang telah dicasting ke uint8

>> a=uint8(200+100)
a =
  uint8
   255
>> 

Mengubah Format Truecolor menjadi Grayscale

Setiap gambar terdiri dari 4 layer secara yaitu 1 Layer transparant dan 3 layer warna (RGB) atapun hanya 1 layer grayscale saja (monocrome). Tapi secara umum dalam format penyimpanan *.jpg *.bmp hanya terdiri dari format RGB ataupun grayscale. Pada sesi sebelumnya kalian sudah belajar membaca gambar dan menampilkannya dalam figure. Gambar Panoramic diatas adalah truecolor RBG, bisa kalian cek akan terdiri dari 3 layer

>> whos I
  Name        Size                Bytes  Class    Attributes

  I         296x399x3            354312  uint8   

Atau dengan perintah ndims()

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    disp('truecolor RGB');
else
    disp('grayscale');
end

Hasil

truecolor RGB

Rumus umum pengubahan RGB to Grayscale yaitu


$$0.2989*R+0.5870*G+0.1140*B$$

Kalian bisa bisa terapkan dalam function seperti berikut

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    disp('truecolor RGB');
else
    disp('grayscale');
end
 
gray = ubahkegray(I);
figure
imshow(gray);

 
 
function gray = ubahkegray(RGB)
    RGB = double(RGB);
    gray = 0.2989*RGB(:,:,1)+0.5870*RGB(:,:,2)+0.1140 * RGB(:,:,3);
    gray = uint8(gray);
    
end

Atau kalian langsung menggunakan saja function built in Matlab rgb2gray()

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    disp('truecolor RGB');
else
    disp('grayscale');
end
 
gray = rgb2gray(I);
 
figure
imshow(gray);


Distribusi Nilai Pixel / Histogram

Setiap gambar (format grayscale) akan mudah terlihat distribusi pixel atau disebut dengan histogram. Perhitungan histogram seperti berikut terdiri dari range 1 sampai dengan 5

Buku Pengolahan Citra Digital dengan Matlab - Enhancement
Buku Pengolahan Citra Digital dengan Matlab - Enhancement

Kalian bisa menggunakan kode berikut untuk menghitung dan menampilkan dalam grafik.

clc;clear all;close all;
a = [4,6,3,1,1,2,4,5,5,5,5,5];
frekuensi = [];
for i=1:6
    frekuensi(i)= sum(sum(a==i));
end
figure
bar(frekuensi)
xlabel('Nilai')
ylabel('Frekuensi')
title('Histogram')

Buku Pengolahan Citra Digital dengan Matlab - Enhancement

Atau menggunakan function Matlab histcounts()

[frekuensi] = histcounts(a,6)

Hasil

frekuensi =

     2     1     1     2     5     1

Setelah kalian tahu kegunaan dari histogram, kalian dapat menampilkan sebuah histogram gambar dengan function imhist()

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    gray = rgb2gray(I);
else
    gray = I;
end
gray = rgb2gray(I);
figure
subplot(1,2,1),imshow(gray),title('Gambar')
subplot(1,2,2),imhist(gray),title('Histogram')

Buku Pengolahan Citra Digital dengan Matlab - Enhancement

Perataan Histogram / Histogram Equalization

Perataan histogram bertujuan untuk meratakan distribusi agar setiap gambar yang dihasilkan mempunyai nilai kontras yang lebih seragam. Penerapan perataan histogram menggunakan function histeq() histogram equalization.

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    gray = rgb2gray(I);
else
    gray = I;
end
gray = rgb2gray(I);
perataan = histeq(gray);
figure
subplot(2,2,1),imshow(gray),title('Gambar')
subplot(2,2,2),imhist(gray),title('Histogram')
subplot(2,2,3),imshow(perataan),title('Perataan Histogram')
subplot(2,2,4),imhist(perataan),title('Perataan Histogram')


Buku Pengolahan Citra Digital dengan Matlab - Enhancement

Kalian bisa melihat perbedaan penggunaan perataan histogram memberikan perbaikan kontras sehingga bagian tertentu yang berwarna gelap akan tampak cerah.

Format Color Space HSV

Selain format RGB (format layar komputer, kalau kalian menggunakan pengolah grafis ada CMYK yaitu format printer) ada lagi format penyajian HSV (ref:https://id.wikipedia.org/wiki/HSL_dan_HSV) atau HSL yang merupakan kepanjangan dari HSL (hue, saturation, lightness) dan HSV (hue, saturation, value)

Buku Pengolahan Citra Digital dengan Matlab - Enhancement



Sebagian besar televisi, layar komputer, dan proyektor menghasilkan warna dengan menggabungkan cahaya merah, hijau, dan biru dalam berbagai intensitas — apa yang disebut warna primer aditif RGB. Campuran yang dihasilkan dalam ruang warna RGB dapat mereproduksi berbagai warna (disebut gamut)


Buku Pengolahan Citra Digital dengan Matlab - Enhancement





Kalian bisa pelajari di ref: https://en.wikipedia.org/wiki/HSL_and_HSV. Di Matlab untuk mengubah RGB ke HSV menggunakan function rgb2hsv()

clc;clear all;close all;
I = imread('panoramic.jpg');
HSV = rgb2hsv(I);
figure
subplot(1,2,1),imshow(I),title('RBG')
subplot(1,2,2),imshow(HSV),title('HSV')

Buku Pengolahan Citra Digital dengan Matlab - Enhancement




Saturday, January 11, 2020

Buku Pemrograman Matlab - Struct - Cell Container Data


Sinopsis

Selain tipe data berupa Array, Table di Matlab ada 2 data yang harus kalian ketahui yaitu cell dan struct. Keduanya sangat berguna sekali untuk menyimpan data yang bersifat tidak seragam dalam satu wadah untuk memudahkan pengolahan dan penyimpanan tingkat lanjut. Di buku-buku yang lain akan jarang dibahas 2 tipe data ini padahal sangatlah penting lho. Berikut point-point yang dibahas
  1. Data Container Struct 
  2. Mengubah value Struct
  3. Tipe data Cell
  4. Mengakses dan mengubah isi cell?