Cara melakukan cropping citra secara otomatis
Dalam bidang pengolahan citra digital, segmentasi merupakan proses yang bertujuan untuk memisahkan suatu region dengan region lainnya. Pemisahan didasarkan pada perbedaan karakteristik antar region seperti perbedaan tingkat kecerahan, warna, tekstur, dll. Proses tersebut menghasilkan keluaran berupa citra biner di mana region yang telah tersegmentasi (pada umumnya disebut juga dengan foreground) akan berwarna putih atau bernilai 1. Sedangkan region lainnya (disebut juga dengan background) akan berwarna hitam atau bernilai 0.
Ada berbagai jenis metode segmentasi citra di antaranya adalah thresholding, active contour, deteksi tepi, transformasi hough, watershed, region growing, dll. Pada contoh ini ditunjukkan sebuah proses segmentasi citra dengan metode thresholding. Citra keluaran dari proses tersebut adalah citra biner yang kemudian digunakan untuk melakukan cropping dan juga perhitungan luas, keliling, dan centroid dari masing-masing objek.
Langkah-langkah pemrograman matlab untuk melakukan segmentasi citra adalah sebagai berikut:
1. Membaca citra asli
clc; clear; close all; warning off all; originalImage = imread('doodles.jpg'); figure, imshow(originalImage);
sehingga diperoleh tampilan citra asli seperti pada gambar di bawah ini:
2. Melakukan operasi thresholding
bw = im2bw(originalImage,.9); figure, imshow(bw);
sehingga citra yang dihasilkan adalah:
3. Pada citra biner di atas tampak bahwa objek yang dikehendaki berwarna hitam sedangkan background berwarna putih. Untuk dapat melakukan analisis citra (seperti perhitungan luas, keliling, dan centroid) maka citra tersebut harus dikomplemenkan yang artinya objek diubah warnanya menjadi putih, sedangkan background diubah menjadi hitam.
bw = imcomplement(bw); figure, imshow(bw);
citra yang dihasilkan yaitu:
4. Selanjutnya dilakukan operasi morfologi agar warna putih pada citra biner memenuhi seluruh luasan objek (mengisi lubang-lubang pada objek)
bw = imfill(bw,'holes'); figure, imshow(bw);
diperoleh citra:
5. Citra biner tersebut kemudian digunakan sebagai informasi lokasi objek untuk melakukan cropping terhadap citra asli secara otomatis
blobMeasurements = regionprops(bw, 'all'); numberOfBlobs = size(blobMeasurements, 1); figure, for k = 1 : numberOfBlobs % Loop through all blobs. % Find the bounding box of each blob. thisBlobsBoundingBox = blobMeasurements(k).BoundingBox; % Get list of pixels in current blob. % Extract out this coin into it's own image. subImage = imcrop(originalImage, thisBlobsBoundingBox); % Display the image. subplot(3, 4, k); imshow(subImage); caption = sprintf('Object Num.%d',k); title(caption); end
Citra hasil cropping ditunjukkan pada gambar di bawah ini:
6. Melakukan perhitungan luas, keliling, dan centroid pada masing-masing objek
% Print header line in the command window. fprintf(1,'|Blob Number| Area | Perimeter | Centroid |\n'); % Loop over all blobs printing their measurements to the command window. for k = 1 : numberOfBlobs % Loop through all blobs. blobArea = blobMeasurements(k).Area; % Get area. blobPerimeter = blobMeasurements(k).Perimeter; % Get perimeter. blobCentroid = blobMeasurements(k).Centroid; % Get centroid one at a time fprintf(1,'| %9d | %10.1f | %11.1f | %8.1f %8.1f |\n', k, blobArea, blobPerimeter, blobCentroid); end
sehingga pada Command Window akan tampak hasil perhitungan seperti pada gambar berikut:
File source code lengkap beserta citra pada pemrograman matlab di atas dapat diperoleh melalui halaman berikut ini: Source Code
Posted on July 7, 2016, in Pengolahan Citra and tagged cara membuat aplikasi pengolahan citra digital menggunakan matlab, cropping citra digital, pemrograman matlab sederhana, Pengolahan Citra Digital, segmentasi citra digital, source code matlab pengolahan citra digital, thresholding citra digital. Bookmark the permalink. 17 Comments.
permisi mas, numpang nanya. Setelah memisahkan objek gambar seperti gambar di atas, adakah cara untuk save ke dalam folder dari tiap gambar yang telah di segmentasi/ekstraksi mas? terimakasih banyak sebelumnya mas. semoga ilmunya menjadi amal jariyah bagi mas
Assalamu’alaikum Warahmatullahi Wabarakatuh mas adi. Bagaimana cara memisahkan gambar yang telah di crop mas, dan cara menyimpan objek satu persatu mas. Terima kasih mas
Waalaikumsalam wr. wb. Hanafi
Untuk menyimpan citra hasil cropping bisa menggunakan perintah imwrite
Oke, terima kasih mas adi
Baik sama sama
Kalau codingan ini mau dijadikan GUI, kodingan di button crop nya dari mana sampai mana ya? apa harus ada yg dtambahkan?
Materi mengenai proses cropping menggunakan GUI dapat dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/pengolahan-citra-digital/region-of-interest-roi/
Materi mengenai proses cropping citra menggunakan gui dapat dilihat pada halaman berikut ini
https://pemrogramanmatlab.com/pengolahan-citra-digital/region-of-interest-roi/
Pagi mas adi, kalau untuk cropping pada angka di plat kendaraan, apakah bisa menggunakan coding di atas mas ?
Selamat pagi
Koding di atas bisa dicoba diimplementasikan untuk cropping pada angka di plat kendaraan
Assalamu’alaikum..
kalau misalkan figure yang crop otomatis itu pengen di masukin ke axes di GUI nya gimana y?
Waalaikumsalam
Untuk menampilkan citra ke dalam axes gui bisa menggunakan perintah
axes(handles.axes1)
imshow(Img)
Assalamu’alaikum
pada citra grayscale, hasil segmentasi apakah bisa di crop , bagaimana caranya ?
Prinsipnya sama saja baik pada citra rgb maupun citra grayscale
assalamualaikum mas adi, apakah mas adi mempunyai materi untuk source code glcm mas? terimakasih
Waalaikumsalam
Materi dan source code mengenai GLCM ada di halaman berikut ini
https://pemrogramanmatlab.com/pengenalan-pola-citra-digital-menggunakan-matlab/pola-tekstur/
bang ada program segmentasi teks yang teksnya dibagi perbaris baru disegmentasi terus discan atau pembacaan karakter di teks bang?