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 cara1. 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.
Ref: https://towardsdatascience.com/detection-and-segmentation-through-convnets-47aa42de27ea
Ref: http://vladlen.info/publications/feature-space-optimization-for-semantic-video-segmentation/
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
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 histogramclc;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')
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
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;
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
Dengan menggunakan toolbar inspect pixel values akan tampil lebih jelas seperti dibawah ini
Kalian bisa menghitung jumlah region objek putih? Kalian bisa cek terdapat 4 region objek putih.
Atau kita pakai nilai ketetanggan 8, akan menghasilkan 3 objek saja yaitu
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\)
Hasil
Setiap objek diatas mempunyai beberapa informasi yang dapat digali seperti
Kalian ingin mendapatkan informasi objek diatas seperti \(area,centroid,boundingbox,perimeter\). Contoh kodenya seperti berikut
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
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
Perhatikan objek no 3 dan 4 yang bukan merupakan square, maka boundingbox nya akan terlihat seperti berikut
Dengan susunan \([X,Y, X’,Y’]\), Kode yang digunakan yaitu
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 berikutclc;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);
Dengan menggunakan toolbar inspect pixel values akan tampil lebih jelas seperti dibawah ini
Kalian bisa menghitung jumlah region objek putih? Kalian bisa cek terdapat 4 region objek putih.
Atau kita pakai nilai ketetanggan 8, akan menghasilkan 3 objek saja yaitu
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
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)]);
- centroid : menggunakan teknik center of gravity, kalian bisa baca link berikut https://www.softscients.web.id/2018/11/bab-4-moment-invariant.html
- Area: luas area dalam satuan pixel
- Perimeter : menggunakan teknik edge detection/keliling objek
- Ataupun bounding box nya
Measure properties of image regions Region Properties
Setiap objek binary (hitam putih) dapat kita analisis informasi banyak sekali yaitu- Area (luas)
- EulerNumber
- Orientation (rotasi sudut, kalian bisa pelajari disini)
- BoundingBox
- Extent
- Perimeter (kalian bisa pelajari disini deteksi tepi)
- Centroid (kalian bisa pelajari disini)
- Extrema
- PixelIdxList
- ConvexArea
- FilledArea
- PixelList
- ConvexHull
- FilledImage
- Solidity
- ConvexImage
- Image
- SubarrayIdx
- Eccentricity
- MajorAxisLength
- EquivDiameter
- MinorAxisLength
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.
No comments:
Post a Comment