<?php
// Tentukan citra yang akan diolah

$given_tol = 32;
for ($o=1; $o<=10; $o++) {
	
$test_ke = $o;
$test_sebelumnya = $test_ke-1;
//$gambar_awal = "coba_enhance_lena0-".$test_sebelumnya.".jpg";
$gambar_awal = "lena_with_noise.jpg";
echo "gambar awal = $gambar_awal<br>";

//Catat waktu mulainya
echo "<table border=1>";
for ($u = 1; $u <= 1; $u++) {
$time_start = microtime(true);

// pembentukan citra digital
$gambar_digital = imagecreatefromjpeg($gambar_awal);

// mencari dimensi gambar
$data_gambar = getimagesize($gambar_awal);

//Menyiapkan kanvas untuk citra baru
$akhir = imagecreatetruecolor($data_gambar[0],$data_gambar[1]);

// Proses semua piksel
$ubah_pixel = 0;
$total_ambil_pixel = 0;

for($x=1;$x<$data_gambar[0]-1;$x++){
    for($y=1;$y<$data_gambar[1]-1;$y++){
		
	//nilai pixel aslinya
	$sebelum = gray(imagecolorat($gambar_digital, $x, $y));
    
    // Hitung semua nilai abu-abu di sekitar piksel yang discan   
	$proses1 = microtime(true);
    $a = gray(imagecolorat($gambar_digital,$x,$y-1));
    $b = gray(imagecolorat($gambar_digital, $x, $y+1));
    $c = gray(imagecolorat($gambar_digital,$x-1,$y));
    $d = gray(imagecolorat($gambar_digital, $x+1, $y));
    $e = gray(imagecolorat($gambar_digital,$x-1, $y-1));
    $f = gray(imagecolorat($gambar_digital, $x+1, $y-1));
    $g = gray(imagecolorat($gambar_digital,$x-1, $y+1));
    $h = gray(imagecolorat($gambar_digital, $x+1, $y+1));
	$proses2 = microtime(true);
	$lama_ambil_pixel = $proses2-$proses1;
	$total_ambil_pixel = $total_ambil_pixel + $lama_ambil_pixel;
	
    //menghitung median 
    $abu_abu = mencari_median($a,$b,$c,$d,$e,$f,$g,$h);
	
	$selisih = abs($sebelum - $abu_abu);
	if ($selisih >= $given_tol) {
		//tanam nilai abu-abu tersebut pada kanvas yang sudah kita siapkan
		$abu_new=imagecolorallocate($gambar_digital,$abu_abu,$abu_abu,$abu_abu);
		imagesetpixel($gambar_digital,$x,$y,$abu_new);
		$ubah_pixel++;
	}

  }
}

//Catat waktu selesai
$time_end = microtime(true);

//Hitung lama waktu eksekusinya
$time = ($time_end - $time_start) - $total_ambil_pixel; ;
echo "<tr><td>$ubah_pixel</td><td>$time</td></tr>";

}

echo "</table>";

// Tampilkan Citra lama dan citra baru
$citra_baru = "coba_enhance_lena".$given_tol."-".$test_ke.".jpg";
imagejpeg($gambar_digital, $citra_baru, 100);
echo "<img src=$gambar_awal>";
echo "<img src=$citra_baru>";
}


function gray($pixel){
    $pixel = sprintf('%06x',$pixel);
    $red = hexdec(substr($pixel,0,2))*0.30;
    $green = hexdec(substr($pixel,2,2))*0.59;
    $blue = hexdec(substr($pixel,4))*0.11;
    return $red+$green+$blue;
}

function mencari_median($a,$b,$c,$d,$e,$f,$g,$h) {
    $nilai_tetangga = array($a,$b,$c,$d,$e,$f,$g,$h);
    sort($nilai_tetangga);
    $bawah = $nilai_tetangga[3];
    $atas = $nilai_tetangga[4];
    $abu_abu = floor(($bawah+$atas)/2);
    return $abu_abu;
}

?>
