Thresholding


Thresholding merupakan salah satu metode segmentasi citra di mana prosesnya didasarkan pada perbedaan derajat keabuan citra.

Dalam proses ini dibutuhkan suatu nilai batas yang disebut nilai threshold.

Nilai intensitas citra yang lebih dari atau sama dengan nilai threshold akan diubah menjadi putih (1) sedangkan nilai intensitas citra yang kurang dari nilai threshold akan diubah menjadi hitam (0).

Sehingga keluaran dari hasil thresholding adalah berupa citra biner.

Contoh segmentasi citra menggunakan metode thresholding ditunjukkan pada gambar berikut ini:

 

Source code nya adalah sebagai berikut:

clear all
close all
clc

baby = imread('baby.jpg');
baby_gray = rgb2gray(baby);
baby_bw = im2bw(baby_gray,240/255);
baby_bw2 = imcomplement(baby_bw);
baby_bw3 = imfill(baby_bw2,'holes');
baby_bw3(end,:) = 1;
baby_bw3 = imfill(baby_bw3,'holes');
baby_bw3(end,:) = 0;
baby_bw4 = imerode(baby_bw3,strel('disk',1));

red_baby = baby(:,:,1);
green_baby = baby(:,:,2);
blue_baby = baby(:,:,3);

cloud = imread('cloud3.jpg');
red_cloud = cloud(:,:,1);
green_cloud = cloud(:,:,2);
blue_cloud = cloud(:,:,3);

red_cloud(baby_bw4) = red_baby(baby_bw4);
green_cloud(baby_bw4) = green_baby(baby_bw4);
blue_cloud(baby_bw4) = blue_baby(baby_bw4);

rgb = cat(3,red_cloud,green_cloud,blue_cloud);

imwrite(baby_bw4,'bw4.jpg')

figure, imshow(baby);
figure, imshow(baby_bw4);
figure, imshow(cloud);
figure, imshow(rgb);

%% Cropping Citra Bayi
red_baby(~baby_bw4) = 0;
green_baby(~baby_bw4) = 0;
blue_baby(~baby_bw4) = 0;
baby_RGB = cat(3,red_baby,green_baby,blue_baby);
[row,col] = find(baby_bw4==1);
bw = imcrop(baby_bw4,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);
RGB = imcrop(baby_RGB,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);
RGB2 = imcrop(baby,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);

[B,L] = bwboundaries(bw,'noholes');
figure,imshow(RGB)
hold on
for k = 1:length(B)
    boundary = B{k};
    plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2)
end
hold off

figure,imshow(RGB2)
hold on
for k = 1:length(B)
    boundary = B{k};
    plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2)
end
hold off

Source code dan citra untuk thresholding dapat diunduh pada laman berikut: Source Code

Save

  1. Mas, minta pencerahannya. Saya mau buat penelitian penentuan treshold dengan menggunakan JST yang fitur inputnya berasal dari analisa tekstur orde 2 (GLCM). Kira-kira langkah-langkah saya ini sudah benar belum :
    1. Ekstrasi fitur
    2. training jst
    3. nah .. dibagian sini mas yang bingung, cara menghitung treshold dari jst gimana ya?
    mohon bantuannya

    • ada berbagai jenis nilai threshold, jika yang dimaksud adalah nilai threshold citra pada proses segmentasi maka langkah-langkah penelitian tersebut belum benar
      langkah-langkah yang benar yaitu:
      1. Akuisisi citra
      2. Perbaikan kualitas citra
      3. Segmentasi citra (bisa menggunakan metode thresholding dengan terlebih dahulu menentukan nilai threshold dg analisis histogram bimodal atau dengan metode otsu)
      4. Ekstraksi ciri (tekstur glcm)
      5. Identifikasi/ klasifikasi citra (jst)

  2. Begini mas, penelitian saya untuk kasus alpha matting, dimana saya ingin menentukan treshold sebagai nilai alpha menggunakan JST, apakah nilai treshold itu harus kita tentukan terlebih dahulu? beberapa penelitian sudah menggunakan Otsu (Global Treshold) … dan menghasilkan nilai trehold. Hipotesa awal saya dengan JST bisa menentukan treshold … apakah masih salah kira0kira hipotesa saya tadi? Kira-kira dengan JST bisa tidak menentukan treshold?
    Tolongdibalas mas ya …

  3. mas adi, saya mau tanya,,,, saya kan mau mencari atau membedakan bagian objek dan background dari citra kulit wajah.. dicari menggunakan nilai Treshold. dikatakan bahwa :
    jika P<=T maka pixelnya adalah objek.
    else
    pixel adl background.

    cara cari nilai tengah treshold nya gmna ya mas source code nya?
    trus source code untuk kondisi diatas bagaimana?
    mohon bantuan nya mas adi.

  4. pada koding di atas baris ke-7
    terdapat perintah baby_bw = im2bw(baby_gray,240/255);
    artinya nilai piksel baby_gray yang kurang dari 240 akan diubah menjadi 0 (hitam)
    Sedangkan nilai piksel baby_gray yang lebih dari atau sama dengan 240 akan diubah menjadi 1 (putih)
    Tetapi pada kasus ini objek yang diinginkan adalah yang bernilai 0 (hitam). Oleh karena itu, pada baris ke-8 digunakan perintah baby_bw2 = imcomplement(baby_bw);
    Sehingga objek yang diinginkan akan bernilai 1 (putih), sedangkan background akan bernilai 0 (hitam)

  5. Cahya Aris Prasetyawan

    mas mau tanya. rumus manual mat2gray bagaimana ya?

    • persamaan yg digunakan adalah persamaan interpolasi linear
      (y-ymin)/(ymax-ymin)=(x-xmin)/(xmax-xmin)

      di mana y adalah nilai/angka yg menyusun matriks awal, sedangkan x merupakan nilai intensitas piksel citra hasil keluaran

      pada koding tsb, nilai intensitas piksel citra grayscale keluaran memiliki kelas double (dalam range 0 s.d 1) sehingga nilai xmin yg digunakan pada persamaan di atas adalah 0 dan xmax adalah 1

  6. maaf mas saya masih awam matlab, mau tanya , klo image yg kita olah adalah citra dari CT ..algoritmanya gimana ya..yg di ataskan gambar berwarna..klo CT kan ngak..thanks

  7. assalamuallaikum mas,

    saya sudah coba menggunakan program di atas dan berhasil untuk thresholding angka pada uang kertas, tapi background di dilam angka nol masih terbawa.

    solusinya gimana ya mas?
    trimakasih banyak mas adi atas petunjuk dan bimbingannya.

  8. Maaf mas, Saya belum paham.
    jadi citra yang telah di segmentasi kembali di segmentasi ulang atau bagaimana mas?

    bw = imcrop(baby_bw4,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);
    RGB = imcrop(baby_RGB,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);
    RGB2 = imcrop(baby,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);

    [B,L] = bwboundaries(bw,’noholes’);
    figure,imshow(RGB)
    hold on
    for k = 1:length(B)
    boundary = B{k};
    plot(boundary(:,2), boundary(:,1), ‘g’, ‘LineWidth’, 2)
    end
    hold off

    setelah code ini apakah perlu dibuat lagi mas?

    Trimakasih banyak mas adi

  9. Assalamualikum, mas mau tanya, Untuk perhitungan matematika dari Tresholding Otsu masnya punya ndak? pecontohan dengan matrix 5×5 . dari grayscale. jika kita ingin menjadikannya ke binner (binerisasi)

    minta tolong untuk dijawab ka mas, Terimakasih.

  10. Arief Rahman Hakim

    Mas saya mau tanya.. Cara untuk mencari nilai thresholding untuk image telur itu langkah”nya apa ya? Agar gambar telur bisa terlihat bulat sempurna tanpa ada bayangan sehingga saya bs mencari nilai pixel telurnya?

  11. Mas,bagaimana caranya membedakan identifikasi salah dan identifikasi benar pada aplikasi pengenalan pola di matlab ya tanpa cara manual?

  12. mas,tau bagaimana caranya menampilkan citra beserta nama file dari citra tersebut di matlab?

  13. terima kasih mas..

  14. Mas Adi, kalo citra yg ingin disegmentasi berupa citra grayscale, bagaimana mas? Karena dicontoh tsb citranya RGB. Thx

    • Pada koding tsb citra RGB diubah menjadi citra grayscale kemudian dari citra grayscale diubah menjadi citra biner
      Jika ingin mengubah citra grayscale menjadi citra biner saja, maka koding RGB menjadi grayscale tidak perlu dilakukan

  15. maaf mohon maaf mau bertanya, mungkin ini melenceng dari bahasan artikel diatas. tapi apakah bisa mas matlab di aplikasikan ke dalam Android? dan jika bisa gmn ya mas? mohon pencerahan mas hehe

  16. mas, saya mau nanya. saya sedang meneliti citra kanker payudara, (berbentuk grayscale) dan nantinya akan dipakai metode GLCM untuk mengesktrasksi nilai statistiknya. yang mau saya tanyakan segmentasi apa yang bisa saya lakukan pada citra tsb ? dosen saya menginginkan bagian yang putih pada citra yang diambil.

  17. thresholding yang digunakan langsung ke citra nya yaa mas? citra yang saya pakai ialah citra mammogram, dosen saya menyarankan mengambil ke payudaranya saja. sehingga bagian yang hitam dihilangkan.
    segmentasi apa saja yang dapat dilakukan mas? sayangnya ga bisa mengupload gambar di comment ini. ini source gambar nya mas http://peipa.essex.ac.uk/pix/mias/ barangkali mas bisa coba lihat mas. terimakasih

  18. Baik mas, trimakasih atas masukkan ny.
    Saya coba pahami dulu.
    Oh yaa kmrn pas mas meneliti menggunakan tool matlab yaa sbg pemrogramanny?
    Kalau mas bersedia boleh saya minta referensi tambahan dari mas adi sebagai bahan atau supplement saya dalam menyelesaikan tugas akhir saya .
    Jika berkenan saya meninggalkan e-mail saya : irfan.maulana1808@gmail.com
    Sebelum ny terimakasih byk mas. Blog nya sangat bermanfaat bagi saya..

  19. mas saya mau nanya lagi,
    kan citra yang saya gunakan ialah citra grayscale (berformat .pgm)
    ektsraksi ciri yang saya gunakan ialah metode GLCM.
    nanti jika dilakukan seperti yang mas katakan dikomentar pertama
    “””
    ada berbagai jenis nilai threshold, jika yang dimaksud adalah nilai threshold citra pada proses segmentasi maka langkah-langkah penelitian tersebut belum benar
    langkah-langkah yang benar yaitu:
    1. Akuisisi citra
    2. Perbaikan kualitas citra
    3. Segmentasi citra (bisa menggunakan metode thresholding dengan terlebih dahulu menentukan nilai threshold dg analisis histogram bimodal atau dengan metode otsu)
    4. Ekstraksi ciri (tekstur glcm)
    5. Identifikasi/ klasifikasi citra (jst)
    ””

    pada tahapan ke 3 segmentasi menggunakan thresholding (yakni mengkonversi citra ke dalam bentuk hitam putih alias biner 0 dan 1).

    nanti pada tahap selanjutnya (4) pas ekstraksi ciri (GLCM) bagaimana langkahny mas? kan GLCM untuk citra grayscale ? Sedangkan citra kita udah berubah ke bentuk biner (hitam putih)
    mohon pencerahannya mas..

    • Benar sekali irfan, pertanyaan yang bagus
      Hasil segmentasi citra dg metode thresholding adalah berupa citra biner
      Citra biner tsb kemudian digunakan sebagai masking utk melakukan cropping pada citra grayscale asli, sehingga citra keluaran dalam proses tsb adalah citra grayscale di mana objek tetap merepresentasikan nilai intensitas piksel grayscale sedangkan background bernilai nol
      semoga irfan semakin paham dan mengerti

  20. apakah diblog ini ada tutorial untuk proses (masking) itu mas adi?
    atau adakah mas adi bisa memberi saya referensi terhadap proses segmentasi tsb.
    terimakasih.

  21. kenapa pada program di atas, untuk merubah citra RGB ke biner harus melalui grayscale dulu ??? apa kelebihan nya?
    padahal kan bisa dari RGB langsung ke biner soalnya kan citra RGB sudah dilakukan imread sehingga sudah otomatis komputer memproses ke grayscale tanpa harus memanggil fungsi grayscale. kira kira pemikiran ini benar atau gak ya ??
    terima kasih

  22. kenapa eror di sini ya??

    Error in Untitled (line 24)
    red_cloud(baby_bw4) = red_baby(baby_bw4);

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d bloggers like this: