Sunday, 12 December 2010

Pada dasarnya dalam menggunakan Matlab untuk melakukan operasi-operasi dasar pada objek gambar berwarna tidak jauh berbeda dengan operasi pada objek gambar grayscale, perubahan hanya terjadi pada penambahan variabel untuk menampung layer pada gambar berwarna dan proses untuk memanipulasi layer tersebut.

Jika pada gambar grayscale digunakan dua buah variabel yaitu baris dan kolom, maka pada gambar berwarna ditambahkan sebuah variabel yaitu layer yang digunakan untuk menampung lapisan warna dasar red, green dan blue pada gambar berwarna.

Pada tugas ini digunakan dua buah file asli citra warna RGB dengan format JPG berukuran 300×300 piksel.

Citra Asli :

Gohan.jpg


Goku.jpg



1. Operasi Tresholding

citra = imread(’Gohan.jpg’);

[baris, kolom, layer] = size(citra);

citra = double(citra);

for i = 1:baris

for j = 1:kolom

for k = 1:layer

if citra(i, j, k) < 120

citraThresholding(i, j, k) = 0;

else

citraThresholding(i, j, k) = 1;

end

end

end

end

imshow(citraThresholding);

imwrite(citraThresholding, ‘GohanThreshold.bmp’, ‘bmp’);



Penjelasan :

citra = imread(’Gohan.jpg’); perintah imread digunakan untuk membaca image dari file grafis Gohan.jpg yang hasilnya berupa matrik dan disimpan dalam sebuah variabel bernama citra. Matrik citra disini akan memiliki bentuk tiga dimensi dengan ukuran 300×300×3 karena didapat dari file citra warna RGB berukuran 300×300 dengan tiga lapisan warna dasar red, green dan blue.

[baris, kolom, layer] = size(citra); perintah size digunakan untuk membaca ukuran matrik citra. baris digunakan untuk menampung jumlah baris, kolom menampung jumlah kolom dan layer menampung jumlah layer dari matrik citra.

citra = double(citra); mengubah bentuk nilai tiap elemen matrik citra kedalam bentuk double presisi.

for i = 1:baris … end melakukan perulangan atau looping berdasarkan nilai i yang diisi dengan mulai dari nilai 1 sampai dengan isi nilai dari variabel baris (300 kali looping).

for j = 1:kolom … end melakukan perulangan atau looping berdasarkan nilai j yang diisi dengan mulai dari nilai 1 sampai dengan isi nilai dari variabel kolom (300 kali looping).

for k = 1:baris … end melakukan perulangan atau looping berdasarkan nilai k yang diisi dengan mulai dari nilai 1 sampai dengan isi nilai dari variabel layer (3 kali looping).

if citra(i, j, k) < 120

citraThresholding(i, j, k) = 0;

else

citraThresholding(i, j, k) = 1;

end membuat matrik baru dengan nama citraTresholding yang isi tiap elemennya diisi dengan melakukan syarat perbandingan nilai elemen matrik citra pada posisi i, j, k apakah lebih besar dari 120 atau tidak. Apabila syarat terpenuhi maka nilai elemen i, j, k pada matrik citraTresholding berisi 0, dan jika tidak terpenuhi maka nilai elemen i, j, k pada matrik citraTresholding pada berisi 1. Proses ini dilakukan berulang kali berdasarkan loping i, j dan k sebelumnya mulai dari nilai i = 1, j = 1 dan k=1 sampai nilai i = 300, j = 300 dan k =3 sehingga akan menghasilkan matrik citraTresholding yang berukuran sama dengan matrik citra.

imshow(citraThresholding); melakukan display image dari matrik citraTresholding.

imwrite(citraThresholding,’GohanThreshold.bmp’,’bmp’); membuat sebuah file grafis dengan nama GohanTreshold.bmp dalam bentuk format BMP dari image matrik citraTresholding.

Citra hasil Tresholding dari file Gohan.jpg



1. Operasi Negatif Digital

citra = imread(’Gohan.jpg’);

[baris, kolom, layer] = size(citra);

citra=double(citra);

for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraNegatif(i, j, k) = 255 - citra(i, j, k);

end

end

end

citraNegatif = uint8(citraNegatif);

imshow(citraNegatif);

imwrite(citraNegatif, ‘GohanNegatif.bmp’, ‘bmp’);

Penjelasan :

citraNegatif(i, j, k) = 255 - citra(i, j, k); membuat matrik baru dengan nama citraNegatif yang isi tiap elemennya diisi dengan melakukan pengurangan nilai 255 dengan nilai elemen matrik citra pada posisi i, j, k. Looping berdasarkan i, j dan k pada proses ini akan menghasilkan sebuah matrik baru bernama citraNegatif yang berukuran sama dengan matrik citra yang nilai elemennya adalah hasil pengurangan dari nilai 255 dengan nilai elemen matrik citra. Pada tahap ini nilai elemen matrik citraNegatif akan memiliki kemungkinan bernilai negatif.

citraNegatif = uint8(citraNegatif); melakukan konversi pada tiap elemen matrik citraNegatif ke dalam bentuk unsigned 8-bit. Proses ini digunakan untuk menghilangkan nilai negatif yang terdapat pada matrik citraNegatif karena hasil konversi akan dipetakan dalam format unsigned 8-bit dengan nilai jangkauan 0-255.

Citra hasil negatif dari file Gohan.jpg



1. Penjumlahan Dua Buah Citra

citra1 = imread(’Gohan.jpg’);

citra2 = imread(’Goku.jpg’);

[baris, kolom, layer] = size(citra1);

citra1 = double(citra1);

citra2 = double(citra2);

for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraGabung(i,j,k) = citra1(i,j,k) + citra2(i,j,k);

end

end

end

citraGabung = uint8(citraGabung);

imshow(citraGabung);

imwrite(citraGabung, ‘GohanGoku.bmp’, ‘bmp’);



Penjelasan :

Pada operasi ini digunakan dua buah file citra yang akan digabungkan menjadi

Satu buah gambar.

[baris, kolom, layer] = size(citra1); perintah size digunakan untuk membaca ukuran matrik citra. baris digunakan untuk menampung jumlah baris, kolom menampung jumlah kolom dan layer menampung jumlah layer dari matrik citra1. Karena yang digunakan sebagai acuan ukuran adalah citra1, maka berapapun ukuran citra2 hasil dari operasi ini akan memiliki image dengan ukuran citra1.



citraGabung(i,j,k) = citra1(i,j,k) + citra2(i,j,k); membuat matrik baru dengan nama citraGabung yang isi tiap elemen pada posisi i,j,k-nya merupakan hasil penjumlahan dari tiap elemen matrik citra1 pada posisi i,j,k dengan tiap elemen matrik citra2 pada posisi i,j,k. Pada tahap ini nilai elemen matrik citraGabung akan memiliki kemungkinan bernilai lebih besar dari 255.

citraGabung = uint8(citraGabung); melakukan konversi pada tiap elemen matrik citraGabung ke dalam bentuk unsigned 8-bit. Proses ini digunakan untuk menghilangkan nilai diatas 255 yang terdapat pada matrik citraGabung karena hasil konversi akan dipetakan dalam format unsigned 8-bit dengan nilai jangkauan 0-255.



Gohan.jpg


+


Goku.jpg


=








CitraGabung

_


=








CitraSelisih



1. Perkalian Citra

citra1 = imread(’Gohan.jpg’);

citra2 = imread(’Goku.jpg’);

[baris, kolom, layer] = size(citra1);

citra1 = double(citra1);

citra2 = double(citra2);

for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraKali(i,j,k) = citra1(i,j,k) + citra2(i,j,k);

end

end

end

citraKali = uint8(citraKali);

imshow(citraKali);

imwrite(citraKali, ‘citraKali.bmp’, ‘bmp’);

CitraKaliCitra



1. Penjumlahan/pengurangan Citra dengan Skalar

citra = imread(’Gohan.jpg’);

[baris, kolom, layer] = size(citra);

citra = double(citra);

for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraBrightPlus(i, j, k) = citra(i, j, k) + 50;

end

end

end

citraBrightPlus = uint8(citraBrightPlus);

imshow(citraBrightPlus);

imwrite(citraBrightPlus,’GohanBrightPlus.bmp’,’bmp’);

Penjelasan :

citraBrightPlus(i,j,k) = citra(i,j,k)+50; membuat matrik baru dengan nama citraBrightPlus yang isi tiap elemen pada posisi i,j,k-nya merupakan hasil penjumlahan dari tiap elemen matrik citra pada posisi i,j,k dengan nilai skalar 50.

citraBrightPlus


citraBrightMinus



1. Perkalian/pembagian Citra dengan Skalar

citra = imread(’Gohan.jpg’);

[baris, kolom, layer] = size(citra);

citra=double(citra);



for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraPerkalianSkalar(i,j,k)= 1.5 * citra(i,j,k);

end

end

end



citraPerkalianSkalar = uint8(citraPerkalianSkalar);

imshow(citraPerkalianSkalar);

imwrite(citraPerkalianSkalar, ‘GohankaliSkalar.bmp’, ‘bmp’);

CitraKaliSkalar


CitraBagiSkalar



1. Flip Horisontal

citra = imread(’Gohan.jpg’);

[baris, kolom, layer] = size(citra);

citra=double(citra);

for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraFlipHorisontal(i,j,k)=citra(i,kolom-j+1,k);

end

end

end

citraFlipHorisontal = uint8(citraFlipHorisontal);

imshow(citraFlipHorisontal);

imwrite(citraFlipHorisontal, ‘GohanFlipHorisontal.bmp’, ‘bmp’);



1. Flip Vertikal

citra = imread(’Gohan.jpg’);

[baris, kolom, layer] = size(citra);

citra=double(citra);

for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraFlipVertikal(i,j,k)=citra(baris-i+1,j,k);

end

end

end

citraFlipVertikal = uint8(citraFlipVertikal);

imshow(citraFlipVertikal);

imwrite(citraFlipVertikal, ‘GohanFlipVertikal.bmp’, ‘bmp’);



1. Pencerminan Terhadap Titik Asal

citra = imread(’Gohan.jpg’);

[baris, kolom, layer] = size(citra);

citra=double(citra);



for i = 1:baris

for j = 1:kolom

for k = 1:layer

citraCerminOrigin(i,j,k)=citra(baris-i+1,kolom-j+1,k);

end

end

end



citraCerminOrigin = uint8(citraCerminOrigin);

imshow(citraCerminOrigin);

imwrite(citraCerminOrigin, ‘GohanCerminOrigin.bmp’, ‘bmp’);



Citra Asli


Flip Horizontal

Flip Vertikal


Cermin Titik Asal

sumber:
http://dhery.blogdetik.com/2008/12/02/pengolahan-citra-dengan-matlab/