December 14, 2005

Median Filtering

Pada Image Retrieval yang menggunakan metode bedasarkan warna dan textur, pada saat indexing gambar harus di filter terlebih dahulu.Filter ini di maksudkan untuk lebih menyederhanakan warna, dan merubah tipe warna RGB (Right, Green, Blue) menjadi HSV (Hue, Saturation, Value), sehingga pada saat melakukan pengelompokan gambar/pencarian akan lebih mudah dan cepat.

metode Filtering cukup banyak salah satunya adalah Median Filtering, metode ini biasanya digunakan untuk menghilangkan noise pada gambar dengan cara mereduksi noise menjadi warna yang berada di sekitarnya.

sample code untuk konvert RGB2HSV - HSV2RGB:

import net.rio.imageRetrieval.util.convert.colorMap.Rgb;
import net.rio.imageRetrieval.util.convert.colorMap.Hsv;

class ConvertColorMap {
/*
function : convertRgbToHsv
Input : Rgb class
Output : Hsv class
*/
public Hsv convertRgbToHsv (Rgb rgb){
byte h, s, v;
byte max, min, delta;

Hsv hsv = new Hsv(0 ,0 ,0);

/* algoritma for convert rgb to hsv */
min = min(rgb.getRed(), rgb.getGreen());
min = min(min, rgb.getBlue());

max = max(rgb.getRed(), rgb.getGreen());
max = max(max, rgb.getBlue());

v = max; // v
delta = max - min;

if( max != 0 ){
s = delta / max; // s
}else {
// r = g = b = 0
// s = 0, v is undefined
s = 0;
h = -1;
}

if( rgb.getRed() == max )
h = ( rgb.getGreen() - rgb.getBlue) ) / delta; // between yellow & magenta
else if( g == max )
h = 2 + ( rgb.getBlue() - rgb.getRed() ) / delta; // between cyan & yellow
else
h = 4 + ( rgb.getRed() - rgb.getGreen() ) / delta; // between magenta & cyan

h *= 60; // degrees
if( h < 0 )
h += 360;

/* set hsv value to hsv bean */
hsv.setHue(h);
hsv.setSaturation(s);
hsv.setValue(v);

return hsv;
}

/*
function : convertHsvToRgb
Input : Hsv class
Output : Rgb class
*/
public Rgb convertHsvToRgb (Hsv hsv){
int i;
byte f, p, q, t;
byte r, g, b;

Rgb rgb = new Rgb (0, 0, 0);

/* algoritma for convert hsv to rgb */
if( hsv.getSaturation() == 0 ) {
// achromatic (grey)
r = g = b = hsv.getValue();
}

hsv.setHue(hsv.getHue() / 60); // sector 0 to 5
i = floor(hsv.getHue());
f = hsv.getHue() - i; // factorial part of h
p = hsv.getValue() * (1 - hsv.getSaturation());
q = hsv.getValue() * (1 - hsv.getSaturation() * f);
t = hsv.getValue() * (1 - hsv.getSaturation() * (1 - f));

switch (i) {
case 0:
r = hsv.getValue();
g = t;
b = p;
break;
case 1:
r = q;
g = hsv.getValue();
b = p;
break;
case 2
r = p;
g = hsv.getValue();
b = t;
break;
case 3:
r = p;
g = q;
b = hsv.getValue();
break;
case 4:
r = t;
g = p;
b = hsv.getValue();
break;
default: // case 5:
r = hsv.getValue();
g = p;
b = q;
break;
}

/* set rgb value to rgb bean */
rgb.setRed(r);
rgb.setGreen(g);
rgb.setBlue(b);

return rgb;
}
}

tapi ngga tau jalan apa ngga belum dicoba :D

setelah merubah tipe warna dan kemudian di lakuakn Filtering dengan menggunakan median filtering maka akan di hasil kan gambar yang lebih sederhana.
*masih panjang perjalanan* (CMIIW)