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 , , , , , , . Bookmark the permalink. 17 Comments.

  1. rahmat abdurrahim sumin

    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

  2. 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

  3. Oke, terima kasih mas adi

  4. Kalau codingan ini mau dijadikan GUI, kodingan di button crop nya dari mana sampai mana ya? apa harus ada yg dtambahkan?

  5. Pagi mas adi, kalau untuk cropping pada angka di plat kendaraan, apakah bisa menggunakan coding di atas mas ?

  6. Assalamu’alaikum..

    kalau misalkan figure yang crop otomatis itu pengen di masukin ke axes di GUI nya gimana y?

  7. Assalamu’alaikum

    pada citra grayscale, hasil segmentasi apakah bisa di crop , bagaimana caranya ?

  8. indra romadhanti

    assalamualaikum mas adi, apakah mas adi mempunyai materi untuk source code glcm mas? terimakasih

  9. bang ada program segmentasi teks yang teksnya dibagi perbaris baru disegmentasi terus discan atau pembacaan karakter di teks bang?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: