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:

baby bw4

cloud1a rgb2

cloud2a rgb

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: link

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

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: