Friday, January 31, 2020

Buku Pemrograman Matlab - Quadratic Programming


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/29/buku-pemrograman-matlab-belajar-quadratic-programming/


ref: http://efavdb.com/tag/quadratic-programming/



Sinopis Simple Quadratic Programing

Pada persoalan Non Linear Programming ditandai dengan adanya f(x) yaitu fungsi subjekti dan kendalanya melibatkan non linear seperti mempunyai pangkat orde n. Pembahasan Quadratic Programming merupakan salah satunya yaitu fungsi objektif melibatkan variabel kuadrat dan mempunyai kendala berupa pertidaksamaan linear. Contoh soal Quadratic Programming yaitu


fungsi objektif/tujuan
$$ z = -x_1-x_2+\frac{1}{2}x_1^2+x_2^2-x_1x_2$$
dengan kendala
$$x_x+x_2\leq 3$$
$$2-x_1-3x_2\leq -6$$
$$x_1,x_2\geq0$$

Kalian pelajari saja Quadratic Programming yang merupakan pemecahan masalah pada Support Vector Machine. Quadratic Programming dalam bentuk umum yaitu

$$\underset{\chi}{min} \: \:\frac{1}{2}\chi^TH\chi+f^T\chi$$


kendala

$$A\chi\leq b$$

$$A_{eq}\chi=b{eq}$$

$$lower\leq\chi\leq upper$$


Quadratic Programming bisa kalian selesaikan menggunakan function \(quadprog\) dengan paramater \(fH,f,A,b,A_{eq},b_{eq},l,ug,H\). Seperti pada contoh berikut


$$\underset{x,y}{min} \; \frac{1}{2}x^2+3x+4y$$


dengan kendala

$$x,y\geq 0$$

$$x+3y\geq 15$$

$$2x+5y\leq100$$

$$3x+4y\leq80$$



maka langkah yang harus kalian lakukan adalah mengubah ke bentuk persamaan umum Quadratic Programming



$$\underset{x,y}{min} \; \frac{1}{2}
\begin{pmatrix}
x \\
y \\
\end{pmatrix}^{T}
\begin{pmatrix}
1 & 0\\
0 & 0\\
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
\end{pmatrix} +
\begin{pmatrix}
3\\
4\\
\end{pmatrix}^{T}
\begin{pmatrix}
x\\
y\\
\end{pmatrix}$$


$$\begin{pmatrix}
-1 & -3\\
2 & 5\\
3 & 4\\
\end{pmatrix}
\begin{pmatrix}
x\\
y\\
\end{pmatrix} \leq
\begin{pmatrix}
-15\\
100\\
80\\
\end{pmatrix}$$


$$\begin{pmatrix}
0\\
0\\
\end{pmatrix} \leq x$$



clc;clear all;close all;
H = diag([1; 0]);
f = [3; 4];
A = [-1 -3; 2 5; 3 4];
b = [-15; 100; 80];
l = zeros(2,1);
Aeq = [];
Beq = [];
u = [];
x0 = [];
options = optimset('Algorithm','interior-point-convex');
[x,fval] = quadprog(H,f,A,b,Aeq,Beq,l,u,x0,options);



Hasil

>> x

x =

    0.0000
    5.0000

>> fval

fval =

   20.0000

>>

Kita dapat menyimplkan bahwa nilai optimal yaitu \(x=0\) dan \(y=5\) dengan hasil \(20\)

Buku Pengolahan Citra Digital dengan Matlab-Moment Image


Sinopsis

Membahas operasi morfologi/bentuk, kalian harus tahu juga cara kerja menentukan sebuah center of gravity dari sebuah objek dan Orientation nya, setelah kalian pelajari Buku Pengolahan Citra Digital dengan Matlab – Segmentasi, kalian tentu ingin tahu cara kerja/kode tersebut secara lebih simple. Pembahasan ini  dalam 1 topik geometri moment invariant
  1. operasi blob/labelling untuk menentukan jumlah objek
  2. menentukan lokasi centroid untuk masing-masing objek
  3. menentukan orientation nya
Untuk mempermudah kalian pelajari, disajikan 1 buah gambar kotak putih yang punya orientasi miring 18 derajat.


Moment

Moment suatu objek dapat menggambarkan luas area, posisi, orientasi dengan persamaan sebagai berikut


$$m_{ij}=\sum_{x}\sum_{y}x^i*y^j*a_{xy}$$

Dengan \(i\) dan \(j\) adalah posisi pixel dengan intensitas \(a_{xy}\). Moment tingkat 0 dan 1 didefinisikan sebagai berikut



$$m_{00}=\sum_{x}\sum_{y}a_{xy}$$
$$m_{10}=\sum_{x}\sum_{y}x*a_{xy}$$
$$m_{01}=\sum_{x}\sum_{y}y*a_{xy}$$

titik pusat \ center of gravity \(x\prime\) dan \(y\prime\) sebagai berikut



$$x\prime=\frac{m_{10}}{m_{00}}$$
$$y\prime=\frac{m_{01}}{m_{00}}$$

clc;clear all;close all;
I = imread('orientasi.png');
objek = im2bw(I);
%untuk menentukan lokasi centroid dari matrix biner
area = sum(sum(objek));
if area==0
    X = 0;
    Y = 0;
else
    [rows,cols] = size(objek);
    x = ones(rows,1)*[1:cols] ;  % Matrix with each pixel set to its x coordinate
    y = [1:rows]'*ones(1,cols) ;  %   "     "     "    "    "  "   "  y    "
 
    X= sum(sum(double(objek).*x))/area;
    Y= sum(sum(double(objek).*y))/area;
end
figure
imshow(objek)
text(X,Y,'*','Color','red','FontSize',30);
title('Center of Gravity')


Orientasi

Untuk perhitungan orientasi bisa kalian pelajari melalui kode berikut

clc;clear all;close all;
I = imread('orientasi.png');
objek = im2bw(I);
[rows,cols]=size(objek);
%calculating moment calculation%
[rows,cols] = size(objek);
x = ones(rows,1)*[1:cols];    
y = [1:rows]'*ones(1,cols);   
 
area = sum(sum(objek));
meanx = sum(sum(double(objek).*x))/area;
meany = sum(sum(double(objek).*y))/area;
 
%calculating the ellipse orientation
m20 = sum(sum(double(objek).*x.^2));
m02 = sum(sum(double(objek).*y.^2));
m11 = sum(sum(double(objek).*x.*y));
u20 = (m20/area) - (meanx^2);
u02 = (m02/area) - (meany^2);
u11 = (m11/area) - (meanx*meany);
 
tetha = 0.5*atan(2*u11/(u20-u02));
tetha= tetha*57.2957795
 
 
rotasi=imrotate(objek,tetha);
figure
subplot(1,2,1),imshow(objek),title('Asli');
subplot(1,2,2),imshow(rotasi),title(['Rotasi sebesar ' num2str(tetha)]);




Kalian bisa melihat penentuan orientasi sangat bisa diandalkan menggunakan rumus diatas, hanya berbeda sebesar \( 18-17.9454= 0.0546\) saja!



Wednesday, January 29, 2020

Buku Pemrograman Matlab-Langkah-Langkah Normalisasi Data


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di   http://softscients.com/2020/03/29/buku-pemrograman-matlab-langkah-langkah-normalisasi-data/


Langkah-Langkah Normalisasi Data

Tujuan normalisasi data agar mempunyai nilai rerata NOL dan standar deviasi SATU serta dapat diskala kan dengan nilai rentang tertentu. Suatu data dapat dinormalisasi dengan rumus sebagai berikut

$$X\prime=\frac{X-\mu}{\sigma}$$


dengan \(\mu\) adalah rerata/mean dan \(\sigma\) adalah standar variasi, sebagai contoh
kalian punya data array seperti berikut


$$X=[8,2,5,7,9]$$ nilai


$$\mu=6.2$$dan


$$\sigma= 2.7749$$


hasilnya


$$X\prime=[0.64867, -1.51357, -0.43245, 0.28830, 1.00905]$$

Langkah selanjutnya untuk menskala kan agar nilai mempunyai nilai tertentu, misalkan punya range \(0\leq X \leq 1\) dengan rumus seperti berikut
$$X\prime\prime=\frac{X\prime-X\prime_{min}}{X\prime_{max}-X\prime_{min}}*(A-B)+B$$

dengan \(A\) adalah batas atas dan \(B\) adalah  batas bawah, dalam hal ini kita berikan nilai

$$A=1$$
dan
$$B=0$$

maka nilai minimal dan maksimal dari normalisasi data \(X\prime\) yaitu
$$X\prime_{min}= -1.51357$$
$$X\prime_{max}= 1.00905$$

sehingga nilai range nya menjadi
$$X\prime\prime =[0.85714,0.00000,   0.42857,   0.71429,   1.00000]$$

Kalian bisa menggunakan kode dibawah ini

clc;clear all;close all;
x = [8,2,5,7,9];
x_normal = (x-mean(x))./std(x)
x_min = min(x_normal)
x_max = max(x_normal)
A = 1;
B = 0;
x_range = ((x_normal-x_min)/(x_max-x_min))*(A-B)+B


ataupun kalian ingin punya skala \(-1\leq X \leq 1\), kalian bisa ubah saja nilai \(B=-1\) seperti kode dibawah ini

clc;clear all;close all;
x = [8,2,5,7,9];
x_normal = (x-mean(x))./std(x)
x_min = min(x_normal)
x_max = max(x_normal)
A = 1;
B = -1;
x_range = ((x_normal-x_min)/(x_max-x_min))*(A-B)+B

hasilnya

x_normal =

   0.64867  -1.51357  -0.43245   0.28830   1.00905

x_min = -1.5136
x_max =  1.0090
x_range =

   0.71429  -1.00000  -0.14286   0.42857   1.00000


Buku Belajar Machine Learning dengan Matlab


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di http://softscients.com/2020/03/25/buku-belajar-machine-learning-dengan-matlab/



Buku Belajar Machine Learning dengan Matlab
Buku Belajar Machine Learning dengan Matlab

Sinopsis

Perkembangan mengenai machine learning; deep learning; artifical intelegent sudah sangat maju yang ditandai dengan penerapan didunia nyata seperti face detection, face recognition, voice recognition, mobil otonom. Kesemuanya menggunakan algoritma yang dibangun atas beberapa teknologi, salah satunya menggunakan bahasa pemrograman.

Ada banyak bahasa pemrograman serta pustaka yang bersifat berbayar ataupun free. Nah pada buku ini fokus kepada kemudahan dan serta keseragaman bahasa yaitu menggunakan Matlab mengingat kebutuhan dasar seperti pengolahan array, grafik, serta berbasis functional programming yang sangat dibutuhkan oleh para pembaca. Kalian bisa lebih mudah menerapkan algoritma lebih cepat dan lebih mudah menggunakan Matlab.

Kombinasi antara kemudahan dan ketersediaan tools sangat cocok bagi kalian untuk mempelajari secara mendalam topik machine learning menggunakan Matlab. Oiya, dalam kaitannya machine learning kalian harus belajar terlebih dahulu buku dasar-dasar pemrograman Matlab karena machine learning erat kaitannya dengan Matematika dan Statistika, serta jangan lupa belajar Dasar-Dasar Pengolahan Citra Digital dengan Matlab ya.

Pada Buku Belajar Machine Learning dengan Matlab  ini kalian akan mempelajari dasar-dasar machine learning mulai dari percepton, Learning Vector Quantization, serta Backpropagation (belajar jaringan syaraf tiruan dengan matlab) sampai pada tahap sekarang ini yang sedang booming yaitu deep learning

Daftar Isi Buku

  1. Perceptron
  2. Cara Kerja Support Vector Machine dan Cara Perhitungannya
  3. Modifikasi Kernel Function SVM di Matlab
  4. Klasifikasi Dataset dengan KNN
  5. AdaBoost for Machine Learning
  6. Jenis Perhitungan Error dalam Forecasting
  7. Jenis Kernel pada Machine Learning  
  8. Analisis Regresi Linear Sederhana
  9. Analisis Multi Regression / Regresi Berganda
  10. Meta Heuristik Algoritma Kunang-Kunang - Firefly
  11. Neural Network Backpropagation untuk Klasifikasi Jenis Kanker
  12. System Hibrid Meta Heuristik dan Particle Swarm Opmization
  13. Peramalan dengan Algoritma Fuzzy Chen 
  14. Smoothing Data and Find Major Peak
  15. Algoritma Clustering Fuzzy C-Means Clustering 
  16. Kumpulan Dataset untuk Studi Kasus 
  17. Kumpulan Image Dataset untuk Studi Kasus 

Desain Machine Learning

Belajar jaringan syaraf tiruan dengan matlab atau  Machine learning atau dialih bahasakan menjadi pembelajaran mesin merupakan teknik pengambilan keputusan oleh mesin menggunakan sebuah dataset. Dataset tersebut bisa  berjumlah ribuan, jutaaan record/ foto yang akan dimasukan kedalam algoritma pelatihan sehingga kemampuan mesin untuk menggeneralisir seperti layaknya otak manusia. Otak manusia akan tersusun dengan neuron dan sinapsis, dengan meniru tersebut dibuatlah algoritma machine learning seperti bagan berikut:

Bagan diatas adalah algoritma machine learning bertipe neural network backpropagation yang terdiri dari 4 layer yaitu 1 input, 2 hidden, dan 1 output. Masing-masing mempunyai terdiri dari node didalam layer. Setiap layer dihubungkan oleh bobot dan bias dengan fungsi aktifasi logsig. Agar kalian paham cara kerja machine learning, pelajari saja dulu dasar-dasarnya dibawah ini.

Fungsi Aktifasi

Digunakan untuk menyambungkan/penghubung antar node pada setiap layer. Ada beberapa jenis fungsi aktifasi yaitu hard limit; bipolar; purelin; sigmoid. Kalian bisa menggunakan sesuai kebutuhan karena setiap dataset mempunya nilai yang berbeda-beda.

Fungsi hard limit

dengan bentuk keluaran tegas yaitu 1 dan 0 dengan rumus sebagai berikut

\[f(x)=\left\{\begin{array}{rcl}
    0, jika & x<0
    & \\
    & \\
    1, jika & x \geq 0  
   \end{array}
\right. \]



Artinya berapun nilanya akan bernilai output 1 dan 0 sesuai dengan rumus diatas, di Matlab menggunakan function \(y=hardlim(x)\). Misalkan kalian punya input array $$x=[-100:10:100]$$
seperti code berikut dibawah ini

clc;clear all;close all;
x = [-100:1:100];
y = hardlim(x);
figure,
plot(x,y)
grid on
xlabel('x')
ylabel('y')
title('Hard Limit')


Buku Belajar Machine Learning dengan Matlab

Kalian bisa melihat berapun nilai \(x\) akan mengeluarkan output 0 dan 1. biasanya digunakan untuk menangani dataset kategori seperti Ya dan Tidak (terdiri dari 2 kelas saja)

Fungsi Bipolar

Fungsi ini bisa kalian gunakan dengan output yang dihasilkan -1 dan 1, sesuai dengan rumus dibawah ini

\[f(x)=\left\{\begin{array}{rcl}
    +1, jika & x\geq0
    & \\
    & \\
    -1, jika & x < 0 
   \end{array}
\right. \]


Dengan menggunakan function \(hardlims\) seperti kode dibawah ini, kalian bisa lihat bahwa keluaran -1 dan +1

clc;clear all;close all;
x = [-100:1:100];
y = hardlims(x);
figure,
plot(x,y)
grid on
xlabel('x')
ylabel('y')
title('Bipolar')

Buku Belajar Machine Learning dengan Matlab

Fungsi Sigmoid

Bisa kalian gunakan untuk output range \(0\leq x \leq 1\) dengan rumus umum seperti berikut



$$f(x)=\frac{1}{1+e^{-\sigma x}}$$

Kalian bisa gunakan function \(logsig\), seperti berikut dibawah ini

clc;clear all;close all;
x = [-5:0.01:5];
y = logsig(x);
figure,
plot(x,y)
grid on
xlabel('x')
ylabel('y')
title('Sigmoid')


Buku Belajar Machine Learning dengan Matlab


Fungsi Sigmoid Bipolar

Sama seperti sigmoid dengan output keluaran  \(-1\leq x \leq 1\) dengan rumus umum seperti berikut

$$f(x)=\frac{1-e^{-x}}{1+e^{-x}}$$

Kalian bisa menggunakan function \(tansig\) seperti kode dibawah ini

clc;clear all;close all;
x = [-5:0.01:5];
y = tansig(x);
figure,
plot(x,y)
grid on
xlabel('x')
ylabel('y')
title('Tansig')


Buku Belajar Machine Learning dengan Matlab

Jenis-Jenis Jaringan Syaraf Tiruan

Machine learning dibagi menjadi 2 yaitu neural network dan deep learning. Keduanya dibedakan pada proses training nya, dengan deep learning yang lebih kompleks untuk algoritma trainingnya. Sedangkan nueral network banyak sekali jenisnya yaitu
  1. Perceptron
  2. Backpropagation backpropagation (perambatan maju dan mundur)
  3. Learning Vector Quantization
  4. Kohonen
Adapun untuk pembahasan Perceptron dan Learning Vector Quantization telah dimasukan kedalam buku yang diterbitkan oleh Graha Ilmu dengan judul Buku Belajar Pemrograman Octave, kalian bisa beli saja di toko buku terdekat agar lebih paham cara kerja/step by stepnya. Sedangkan pada pembahasan kali ini lebih kepada cara pengunaan function built in di Matlab.


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 \(\sim\) atau disebut \(negasi\)

clc;clear all;close all;
I = imread('panoramic.jpg');
bw = im2bw(I);
negasi = ~bw;
figure
hold on
subplot(2,1,1),imshow(bw),title('BW'),colorbar();
subplot(2,1,2),imshow(negasi),title('negasi'),colorbar();
hold off;


Buku Pengolahan Citra Digital dengan Matlab - Segmentasi
Semua operasi diatas adalah segmentasi untuk mengubah grayscale menjadi bw (hitam putih), adapun untuk segmentasi objek dalam sebuah gambar merupakan hal yang sangat rumit bagi sebuah komputer, misalkan untuk menemukan  plate number pada sebuah gambar mobil yang diparkir. Kalian bisa mempelajari teknik haar cascade classifier disini

Operasi Blob / Labeling

Operasi labeling atau disebut blob bekerja dalam format binary alias hitam putih bukan format grayscale yaitu untuk memberi tanda/menghitung sebuah objek melalui nilai ketetanggaan. Misalkan kalian mempunyai objek sebagai berikut

clc;clear all;close all;
BW = logical([1 1 1 0 0 0 0 0
              1 1 1 0 1 1 0 0
              1 1 1 0 1 1 0 0
              0 0 0 0 0 0 1 0
              0 0 0 0 0 0 1 0
              1 1 1 0 0 0 1 0
              1 1 1 0 0 1 1 0
              1 1 1 0 0 0 0 0]);
          
imtool(BW);


Buku Pengolahan Citra Digital dengan Matlab - Segmentasi
Dengan menggunakan toolbar inspect pixel values akan tampil lebih jelas seperti dibawah ini

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi
Kalian bisa menghitung jumlah region objek putih?  Kalian bisa cek terdapat 4 region objek putih.

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi
Atau kita pakai nilai ketetanggan 8, akan menghasilkan 3 objek saja yaitu

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi
Nah untuk memahami nilai ketetanggan kalian bisa cek disini http://www.softscients.web.id/2018/08/bab-4-operasi-dasar-olah-citra-digital.html (daripada ditulis ulang). Di Matlab kalian bisa menggunakan function \(bwlabel\)

clc;clear all;close all;
BW = logical([1 1 1 0 0 0 0 0
              1 1 1 0 1 1 0 0
              1 1 1 0 1 1 0 0
              0 0 0 0 0 0 1 0
              0 0 0 0 0 0 1 0
              1 1 1 0 0 0 1 0
              1 1 1 0 0 1 1 0
              1 1 1 0 0 0 0 0]);
          
tetangga_4 = bwlabel(BW,4)
tetangga_8 = bwlabel(BW,8)


Hasil


tetangga_4 =

     1     1     1     0     0     0     0     0
     1     1     1     0     3     3     0     0
     1     1     1     0     3     3     0     0
     0     0     0     0     0     0     4     0
     0     0     0     0     0     0     4     0
     2     2     2     0     0     0     4     0
     2     2     2     0     0     4     4     0
     2     2     2     0     0     0     0     0


tetangga_8 =

     1     1     1     0     0     0     0     0
     1     1     1     0     3     3     0     0
     1     1     1     0     3     3     0     0
     0     0     0     0     0     0     3     0
     0     0     0     0     0     0     3     0
     2     2     2     0     0     0     3     0
     2     2     2     0     0     3     3     0
     2     2     2     0     0     0     0     0

>>

Tentu dalam prakteknya kalian bisa menghitung sebuah objek seperti berikut contohnya

Buku Pengolahan Citra Digital dengan Matlab - Segmentasi


clc;clear all;close all;
I = imread('gambar.png');
bw = im2bw(I);
objek = bwlabel(bw,8);
jumlah_objek = max(objek(:));
figure
imshow(bw),title(['Jumlah objek : ' num2str(jumlah_objek)]);


Buku Pengolahan Citra Digital dengan Matlab - Segmentasi




Setiap objek diatas mempunyai beberapa informasi yang dapat digali seperti
  1. centroid : menggunakan teknik center of gravity, kalian bisa baca link berikut https://www.softscients.web.id/2018/11/bab-4-moment-invariant.html
  2. Area: luas area dalam satuan pixel
  3. Perimeter : menggunakan teknik edge detection/keliling objek
  4. Ataupun bounding box nya
Dan masih banyak yang lainnya lho, untuk hal tersebut kalian bisa pelajari Measure properties of image regions

Measure properties of image regions Region Properties

Setiap objek binary (hitam putih) dapat kita analisis informasi banyak sekali yaitu
  1. Area (luas)
  2. EulerNumber      
  3. Orientation (rotasi sudut, kalian bisa pelajari disini)        
  4. BoundingBox      
  5. Extent           
  6. Perimeter    (kalian bisa pelajari disini deteksi tepi)
  7. Centroid    (kalian bisa pelajari disini)     
  8. Extrema          
  9. PixelIdxList
  10. ConvexArea       
  11. FilledArea       
  12. PixelList
  13. ConvexHull       
  14. FilledImage      
  15. Solidity
  16. ConvexImage      
  17. Image            
  18. SubarrayIdx           
  19. Eccentricity     
  20. MajorAxisLength
  21. EquivDiameter    
  22. MinorAxisLength                  
Ntar kalian juga paham juga pengertian masing-masing diatas, untuk Measure properties of image regions kalian harus pastikan bahwa image nya dalam bentuk BW/Binary ya. Function yang digunakan yaitu untuk Measure properties of image regions yaitu \(regionprops\).


Kalian ingin mendapatkan informasi objek diatas seperti \(area,centroid,boundingbox,perimeter\). Contoh kodenya seperti berikut

clc;clear all;close all;
I = imread('gambar2.png');
bw = im2bw(I);
region = regionprops(bw,'area','centroid','boundingbox','perimeter',’image’);

Kalian jangan lupa pelajari lagi cara kerja tipe data struct di matlab yaitu dasar dasar pemrograman matlab di https://www.softscients.web.id/2020/01/dasar-dasar-pemrograman-matlab-struct.html karena untuk aksesnya menggunakan cara kerja struct. Misalkan untuk mendapatkan area/luas objek gambar, kalian bisa ketikan berikut

>> region.Area
ans =
       14430
ans =
        6110
ans =
        1361
ans =
       10921

Kalian tentu masih bingung, mana saja objek-objek yang dimaksud, maka kalian bisa tandai dengan centroid yang berfungsi untuk menentukan lokasi tengah objek. Gunakan kode berikut

clc;clear all;close all;
I = imread('gambar2.png');
bw = im2bw(I);
region = regionprops(bw,'area','centroid','boundingbox','perimeter','image');
 
figure
imshow(bw);
hold on;
for i=1:length(region)
    lokasi = region(i).Centroid;
    x = lokasi(1);
    y = lokasi(2);
    text(x,y,num2str(i),'Color','red','FontSize',14);
end
hold off;



Perhatikan objek no 3 dan 4 yang bukan merupakan square, maka boundingbox nya akan terlihat seperti berikut

>> region(3).BoundingBox
ans =
  299.5000  141.5000   51.0000   45.0000
>> region(4).BoundingBox
ans =
  376.5000   31.5000  116.0000  120.0000
>>

Dengan susunan \([X,Y, X’,Y’]\), Kode yang digunakan yaitu

clc;clear all;close all;
I = imread('gambar2.png');
bw = im2bw(I);
region = regionprops(bw,'area','centroid','boundingbox','perimeter','image');
 
 
no_objek = 3;
box = region(no_objek).BoundingBox;
lokasi = region(no_objek).Centroid;
x = lokasi(1);
y = lokasi(2);
 
figure
imshow(bw)
hold on;
text(x,y,num2str(no_objek),'Color','red','FontSize',14);
rectangle('Position',box,'Curvature',0.2,'EdgeColor','r','LineWidth',2);
hold off;




 Sedangkan untuk menampilkan objek/image tertentu, bisa kalian gunakan Image

imshow(region(3).Image)

Kalian bisa coba sendiri untuk masing-masing properties nya.

Monday, January 20, 2020

Buku Pemrograman Matlab - Linear Programming


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/29/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

Soal 1 Linear Programming

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.

Soal 2 Linear Programming

Sebuah area parkir dengan luas 3.750 m2, maksimal hanya dapat ditempati 300 kendaraan yang terdiri atas sedan dan bus. Jika luas parkir untuk sedan 5 m2 dan bus 15 m2, tentukanlah model matematikanya!
Jawab:
Misalkan:
x = banyaknya sedan
y = banyaknya bus

Jadi berdasarkan pertidaksamaan tersebut, model matematikanya adalah:

Buku Pemrograman Matlab  - Linear Programming


Untuk banyaknya kendaraan :

$$x + y \leq300$$
Untuk luas kendaraan :

$$5x + 15y\leq 3750$$

disederhanakan menjadi

$$x + 3y\leq 750$$


Banyaknya sedan \((x)\) tidak mungkin negatif: x ≥ 0
Banyaknya Bus \((y)\) tidak mungkin negatif : y ≥ 0

Soal 3 Linear Programming

Sebuah pesawat udara berkapasitas tempat duduk tidak lebih dari 48 penumpang. Setiap penumpang kelas utama boleh membawa bagasi 60 kg dan kelas ekonomi hanya 20 kg. Pesawat hanya dapat menampung bagasi 1.440 kg. Jika harga tiket kelas utama Rp600.000,00 dan kelas ekonomi Rp400.000,00, pendapatan maksimum yang diperoleh adalah….
Jawab:
Misalkan:
x = banyaknya penumpang kelas utama
y = banyaknya penumpang kelas ekonomi



Jadi berdasarkan pertidaksamaan tersebut, model matematikanya adalah:
Total penumpang :
$$x + y ≤ 48$$
Berat bagasi :
$$60x + 20y ≤ 1440$$
disederhanakan menjadi
$$3x + y ≤ 72$$
Banyaknya penumpang di kelas utama \((x)\) tidak mungkin negatif : x ≥ 0
Banyaknya penumpang di kelas ekonomi \((y)\) tidak mungkin negatif : y ≥ 0

clc;clear all;close all;
f = [600000;
     400000];
A = [1,1;
    3,1];
b =[48;
    72];
 
[x,fval,flag]= linprog(-f,A,b);
if flag
    x
    disp('Solusi Optimal yaitu')
    optimal = dot(f,x)    
end



hasil

Optimal solution found.

x =
   12.0000
   36.0000
Solusi Optimal yaitu
optimal =
   2.1600e+07

Dengan demikian pendapatan maksimum diperoleh jika banyaknya penumpang pada kelas utama adalah 12 dan banyaknya penumpang pada kelas ekonomi adalah 36 dengan keuntungan: Rp. 21.600.000

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

Koreksi Gamma (Gamma Correction)

Kontras dapat diperbaiki menggunakan faktor koreksi gamma \(y\) dengan rumus umum $$U=U^{1/y}$$
Semakin kecil nilai \(y\) maka akan semakin terang

clc;clear all;close all;
I = imread('bike.jpg');
if ndims(I)==3
    gray = rgb2gray(I);
else
    gray = I;
end
gray = rgb2gray(I);
y = 1/0.9;
U = uint8(double(gray).^y);
 
y2 = 1/0.8;
U2 = uint8(double(gray).^y2);
 
gabung = [gray;U;U2];
 
figure
imshow(gabung)


Buku Pengolahan Citra Digital dengan Matlab - Enhancement

Agar lebih kalian bisa \(hstack\) array saja sehingga hemat ruang \([a;b;c]\), kalian bisa pelajari lagi ya disini Biar kalian lebih jelas, bisa koq diterapkan true color.

clc;clear all;close all;
I = imread('bike.jpg');
y = 1/0.9;
U = uint8(double(I).^y);
 
y2 = 1/0.8;
U2 = uint8(double(I).^y2);
 
gabung = [I;U;U2];
 
figure
imshow(gabung)

Buku Pengolahan Citra Digital dengan Matlab - Enhancement

ternyata menggunakan faktor gamma untuk gambar diatas akan terlihat bagus dengan nilai \(y=0.9\) ya. Pengolahan Citra Digital dengan Matlab - Enhancement dengan teknik faktor gamma bisa kalian gunakan untuk mengubah kontras secara lebih baik.

Semua kegiatan diatas sering disebut operasi titik yang berarti faktor nilai tetangga tidak berpengaruh, nah pada pembahasan selanjutnya kalian akan belajar mengenai operasi spasial dengan teknik filtering/konvolusi. Konvolusi/Convolution sering disebut juga operasi penapisan.

Operasi Penapisan / Fiiltering

Operasi penapisan/filtering menggunakan teknik konvolusi dengan melibatkan sebuah filter/kernel atau sering disebut dengan istilah lain yaitu masking, template,  structure element (pada operasi morfologi) agar lebih mudah dalam buku disebut kernel saja.

Ukuran kernel paling kecil berupa array 2D yaitu : 2x2, 3x3, 5x5 square array, sedangkan jenis kernel bisa dikaitkan dengan output yang dihasilkan seperti
1.    Kernel mean
2.    Kernel gaussian
3.    Kernel low-pass
4.    Kernel high pass


Kalau kalian ingin tahu cara kerja konvolusi bisa kunjungi link berikut https://www.softscients.web.id/2018/08/bab-4-operasi-dasar-olah-citra-digital.html

Daripada ditulis ulang, kalian bisa pelajari sendiri saja, oiya kalian bisa koq langsung menggunakan function di matlab yaitu \(conv2\) semuanya menggunakan type double, jadi kalian jangan lupa untuk melakukan casting data dulu.


tapis mean
\[X=
\begin{pmatrix}
\frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\
\frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\
\frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\
\end{pmatrix}
\]

tapis low-pass
\[X= \frac{1}{9}
\begin{pmatrix}
1 & 1 & 1\\
1 & 1 & 1\\
1 & 1 & 1\\
\end{pmatrix}
\]
\[X= \frac{1}{8}
\begin{pmatrix}
1 & 3 & 1\\
3 & 16 & 3\\
1 & 3 & 1\\
\end{pmatrix}
\]
tapis high-pass
\[X= \frac{1}{9}
\begin{pmatrix}
-1 & -1 & -1\\
-1 & 8 & -1\\
-1 & -1 & -1\\
\end{pmatrix}
\]

\[X=
\begin{pmatrix}
0 & -1 & 0\\
-1 & 4 & -1\\
0 & -1 & 0\\
\end{pmatrix}
\]

tapis sharpen
\[X=
\begin{pmatrix}
0 & -1 & 0\\
-1 & 5 & -1\\
0 & -1 & 0\\

\end{pmatrix}

\]

tapis blur

\[X=
\begin{pmatrix}
1 & 2 & 3 & 2 & 1\\
2 & 4 & 5 & 4 & 2\\
3 & 5 & 6 & 5 & 3\\
2 & 4 & 5 & 4 & 2\\
1 & 2 & 3 & 2 & 1\\
\end{pmatrix}
\]
tapi emboss

\[X=
\begin{pmatrix}
-2 & -1 & 0 \\
-1 & 1 & 1 \\
0 & 1 & 2 \\
\end{pmatrix}

\]


Kernel Sharpening

Kalian bisa sharpening untuk menajamkan warna

clc;clear all;close all;
I = imread('panoramic.jpg');
kernel_sharpen = 0.45*[  0,-1,0;
                        1,5,-1;
                        0,-1,0];
I = double(I);
for i=1:3
    output(:,:,i) = conv2(I(:,:,i),kernel_sharpen,'same');
end
 
output = uint8(output);
imshow([I,output]);


Buku Pengolahan Citra Digital dengan Matlab - Enhancement

Kernel Blur

Kalian juga bisa menggunakan kernel blur seperti berikut

clc;clear all;close all;
I = imread('panoramic.jpg');
kernel_blur = 0.01.*[1,2,3,2,1;
                2,4,5,4,2;
                3,5,6,5,3;
                2,4,5,4,2;
                1,2,3,2,1]
I = double(I);
for i=1:3
    output(:,:,i) = conv2(I(:,:,i),kernel_blur,'same');
end
 
output = uint8(output);
imshow([I;output]);


Buku Pengolahan Citra Digital dengan Matlab - Enhancement

Semua jenis kernel diatas bisa kalian coba dengan mengatur nilai array kernelnya, selain menggunakan  function \(conv2\), kalian bisa menggunakan function yang telah disediakan khusus \(fspecial\), ada banyak sekali variasinya yaitu
  1. h = fspecial(type)
  2. h = fspecial('average',hsize)
  3. h = fspecial('disk',radius)
  4. h = fspecial('gaussian',hsize,sigma)
  5. h = fspecial('laplacian',alpha)
  6. h = fspecial('log',hsize,sigma)
  7. h = fspecial('motion',len,theta)
  8. h = fspecial('prewitt')
  9. h = fspecial('sobel')