Friday, March 4, 2011

Matlab - Black and White Image

Sebuah image dengan foto pemandangan atau suatu barang yang berwarna-warni adalah hal yang biasa, tetapi bila image tersebut dijadikan warna hitam-putih dapat terkesan lebih berseni.

Pada Posting ini akan menjelaskan cara membuat image yang berwarna menjadi hitam putih menggunakan Sofware MatLab.



Matlab yang digunakan adalah pada posting ini adalah Matlab 2009

Berikut ini adalah Original Image yang akan diubah menjadi warna hitam-putih


Berikut ini adalah hasil manipulasi image menjadi Black & White


Berikut ini adalah Kode Program untuk menjadikan image menjadi Black & White menggunakan MatLab.
menghilangkan cache
clear;

%mengambil data gambar
tmp = imread('sample.jpg');

%lakukan pembacaan pixel sebesar dimensi gambar yaitu 375x500x3 
for i=1:375
    for j=1:500        
        %nilai warna lebih kecil dari 128 dijadikan hitam
        %nilai warna lebih besar dari 128 dijadikan putih 
        if(tmp(i,j,1) < 128)
           img(i,j,1) = 0;
        else
           img(i,j,1) = 256;
        end

        if(tmp(i,j,2) < 128)
           img(i,j,2) = 0;
        else
           img(i,j,2) = 256;
        end

        if(tmp(i,j,3) < 128)
           img(i,j,3) = 0;
        else
           img(i,j,3) = 256;
        end        
    end    
end    

%menampikan gambar hasil manipulasi
imshow(img);
Dimensi dari image sample.jpg (nama file contoh diatas)  adalah 375x500x3. Apabila Anda menggunakan image yang lain sangat mungkin dimensinya berbeda. 

Berikut ini adalah penjelasan dari angka-angka dimensi tersebut.
  • 375 = Mengartikan Lebar  Image
  • 500 = Mengartikan Panjang Image
  • 3     = Mengartikan image terdiri dari 3 matriks yaitu (Red, Green, Blue)
Algoritma Black & White
  1. Perubah warna pixel menjadi hitam-putih tersebut dilakukan pada tiga matriks (Red, Green, Blue)
  2. Apabila nilai warna pada sebuah pixel dari suatu matriks (Red, Green, Blue) lebih kecil dari 128 dijadikan angka 0
  3. Apabila nilai warna pada sebuah pixel lebih besar dari 128 dijadikan angka 256

11 comments:

  1. mas tanya..
    tmp(i,j,1)
    tmp(i,j,2)

    ini maksudnya apa ce ms..

    maklum masih newbie

    ReplyDelete
    Replies
    1. Itu maksudnya dimensi lebar, panjang dan lapisan (red, green, blue).

      contoh : tmp(i,j,1) artinya adalah

      i = lebar
      j = panjang
      1 = lapisan (1=red, 2=green, 3=blue)

      Delete
    2. oh gtu ya tanya 1 lagi..tadi barusan tak coba ada eror
      kayak gini "??? Undefined function or method 'tmp' for input arguments of type 'double'.

      Error in ==> segbiner at 14
      if(tmp(i,j,1) < 128)"

      apane ya mas..??

      Delete
    3. varibel tmp belum di definisikan, pada contoh di atas saya mendifinisikan varibel tmp seperti ini.

      tmp = imread('sample.jpg');

      varibel tmp tersebut menyimpan isi dari file sample.jpg

      Delete
    4. oh iya2 haduh kurang teliti mas heh..
      kemaren tak tambahi, resize dan grasyscale, jadi nilai pixel grayscale yang ane segmetasi..

      ada error gini "??? Attempted to access tmp(1,1,2); index out of bounds because
      size(tmp)=[256,256,1].

      Error in ==> segbiner at 20
      if(tmp(i,j,2) < 128)"

      mhon bantunya mas..^^

      Delete
    5. tanya lagi heeh, yang atas udah fix mas ^^,mas kalu data yang di olah grayscale kn dia pixelnya 0-255 ya mas ya
      untuk tmp(i,j,1) 1 kn lapisan mas, itu di pake gk kalu datanya grayclane..

      Delete
  2. mas kalu yang di segmetasi itu daerah tertetu gimana ya mas..?? kayak kondinat berapa sampek berapa gtu carane gimana ya..
    misale cuma bagian atas aja...

    ReplyDelete
  3. Bisa, tinggal tentukan koorddinatnya saja.

    misalakn mau bagian atas dan dimensinya 400px x 400px. maka yang perlu di ubah nila pixel nya

    Dimensi Lebar :

    tmp(0,0,1) sampai dengan tmp(100,0,1)
    tmp(0,0,2) sampai dengan tmp(100,0,2)
    tmp(0,0,3) sampai dengan tmp(100,0,3)


    Dimensi Panjang :

    tmp(0,0,1) sampai dengan tmp(0,100,1)
    tmp(0,0,2) sampai dengan tmp(0,100,2)
    tmp(0,0,3) sampai dengan tmp(0,100,3)

    ReplyDelete
    Replies
    1. mas kalau cara nentuain kordinat gambar gimana mas..?? misalkan gambar yang di pake 256x256 gtu

      misalkan gambar manusia, saya pengen yang di segmentasi hanya kepala saja gtu, cara nenetuin koordianate gtu mas gimana..??

      Delete
  4. pake proses croping gimana mas? jadi gambar sesuai dengan ukuran dari hasil croping mas,. saya dah coba.,
    tmp = imread('peta3.jpg');
    tmp2 = imcrop(tmp);
    [lebar,tinggi] = size(tmp2);
    for i=1:lebar
    for j=1:tinggi
    %nilai warna lebih kecil dari 128 dijadikan hitam
    %nilai warna lebih besar dari 128 dijadikan putih
    if(tmp2(i,j,1) < 128)
    img(i,j,1) = 0;
    else
    img(i,j,1) = 256;
    end
    if(tmp2(i,j,2) < 128)
    img(i,j,2) =0;
    else
    img(i,j,2) = 256;
    end
    if(tmp2(i,j,3) < 128)
    img(i,j,3) = 0;
    else
    img(i,j,3) = 256;
    end
    end
    end
    img=rgb2gray(img);
    imshow(img);

    tp ada error.,
    ??? Attempted to access tmp2(1,134,1); index out of bounds because size(tmp2)=[119,133,3].

    Error in ==> coba5 at 8
    if(tmp2(i,j,1) < 128)

    ReplyDelete
  5. Mas ini ko variabel img nya error ya

    ReplyDelete