Fungsi Dasar Dilasi dan Erosi dalam Citra - Elang Sakti
Download Ebook Belajar Arduino PDF, Arduino untuk pemula
Jasa Pembuatan Program Arduino, pemrograman Arduino
# Hack Your Skills! to be Professional Mechatronics

Fungsi Dasar Dilasi dan Erosi dalam Citra

Tidak ada komentar
Fungsi Dasar Dilasi dan Erosi dalam Citra PHP
Script PHP untuk dilasi dan erosi pada citra
Untuk yang lagi belajar tentang Dilasi dan Erosi dalam cintra, mungkin script ini akan berguna. Sekilas saja, Dilasi dan Erosi dalam citra dipelajari dalam subbab Morfologi citra. Proses dilasi berfungsi untuk mengisi tepian citra, sedangkan proses erosi berfungsi untuk menggerus atau meng-erosi tepian citra.

Dalam proses erosi dan dilasi membutuhkan citra penggerus / pengisi yang disebut dengan structuring element. Dalam beberapa literatur structuring element ini ada yang menyebutnya dengan istilah skeleton. Skeleton ini standarnya berbentuk simetris dan memiliki titik tengah pixel atau yang disebut dengan istilah origin.

Nantinya, proses penggerusan dan pengisian cintra ditentukan oleh format atau bentuk dari skeleton ini. Pada tulisan ini saya hanya akan menampilkan source dari fungsi yang akan dipakai untuk men-dilasi dan meng-erosi citra, masing-masing fungsi memiliki parameter cintra dan struncturing element / skeleton. Sedangkan untuk script implementasinya, bisa Anda temukan di artikel lainnya di blog ini.

<?php
/*
 Malang/Sabtu/18/Oktober/2014
 coder  : haripinter
 */
function print_arrbin($arr){
    for($m=0; $m<count($arr); $m++){
        for($n=0; $n<count($arr[$m]); $n++){
            echo $arr[$m][$n]." ";
        }
        echo "\n";
    }
}

// param : citra in, structuring element
function dilasibin($ci,$se){
    // citra out
    $co = array();
    
    $posY = floor(count($se)/2);
    $posX = floor(count($se[0])/2);
    
    for($m=0; $m<count($ci); $m++){
        $tmp = array();
        for($n=0; $n<count($ci[$m]); $n++){
            $current = $ci[$m][$n];
            $bool = false;
            for($j=0; $j<count($se); $j++){
                for($k=0; $k<count($se[$j]); $k++){
                    // 2 is don't care pixel mark
                    if($se[$j][$k]!=2){
                        $bool = ($ci[$m+$j-$posX][$n+$k-$posY]==1 && $ci[$m+$j-$posX][$n+$k-$posY]==$se[$j][$k]) || $bool;
                    }
                }
            }
            if($bool) $current = 1;
            $tmp[$n] = $current;
        }
        array_push($co, $tmp);
    }
    return $co;
}


// param : citra in, structuring element
function erosibin($ci,$se){
    // citra out
    $co = array();
    
    $posY = floor(count($se)/2);
    $posX = floor(count($se[0])/2);
    
    for($m=0; $m<count($ci); $m++){
        $tmp = array();
        for($n=0; $n<count($ci[$m]); $n++){
            $current = $ci[$m][$n];
            $bool = true;
            for($j=0; $j<count($se); $j++){
                for($k=0; $k<count($se[$j]); $k++){
                    // 2 is don't care pixel mark
                    $cur = $ci[$m+$j-$posX][$n+$k-$posY];
                    if($se[$j][$k]!=2 && isset($cur)){
                        $bool = ($cur == $se[$j][$k]) && $bool;
                    }
                }
            }
            $current = $bool? 1:0;
            $tmp[$n] = $current;
        }
        array_push($co, $tmp);
    }
    return $co;
}

function openingbin($ci,$se){
    $ci = erosibin($ci,$se);
    $ci = dilasibin($ci,$se);
    return $ci;
}

function closingbin($ci,$se){
    $ci = dilasibin($ci,$se);
    $ci = erosibin($ci,$se);
    return $ci;
}



// untuk gray scale

function print_arr($arr){
    for($m=0; $m<count($arr); $m++){
        for($n=0; $n<count($arr[$m]); $n++){
            echo pr($arr[$m][$n])." ";
        }
        echo "\n";
    }
}

function pr($n){
    return ($n < 10)? ' '.$n : $n;
}

// param : citra in, structuring element
function dilasi($ci,$se){
    $co = array();
    
    $posY = floor(count($se)/2);
    $posX = floor(count($se[0])/2);
            
    for($m=0; $m<count($ci); $m++){
        $tmp = array();
        for($n=0; $n<count($ci[$m]); $n++){
            $current = $ci[$m][$n];
            $tmq = array();
            $con = 0;
            for($j=0; $j<count($se); $j++){
                for($k=0; $k<count($se[$j]); $k++){
                    $tmq[$con] = $ci[$m+$j-$posX][$n+$k-$posY] + $se[$j][$k];
                    $con++;
                }
            }
            $current = max($tmq);
            $tmp[$n] = $current;
        }
        array_push($co,$tmp);
    }
    return $co;
}

// param : citra in, structuring element
function erosi($ci,$se){
    $co = array();
    
    $posY = floor(count($se)/2);
    $posX = floor(count($se[0])/2);
            
    for($m=0; $m<count($ci); $m++){
        $tmp = array();
        for($n=0; $n<count($ci[$m]); $n++){
            $current = $ci[$m][$n];
            $tmq = array();
            $con = 0;
            for($j=0; $j<count($se); $j++){
                for($k=0; $k<count($se[$j]); $k++){
                    $xtc = $m+$j-$posX;
                    if($ci[$m+$j-$posX][$n+$k-$posY] != null){
                        $tmq[$con] = $ci[$m+$j-$posX][$n+$k-$posY] - $se[$j][$k];
                        $con++;
                    }
                }
            }
            $current = min($tmq);
            if($current < 0) $current = 0;
            $tmp[$n] = $current;
        }
        array_push($co,$tmp);
    }
    return $co;
}

function komplemen($img){
    $tmp = $img;
    for($m=0; $m<count($img); $m++){
        for($n=0; $n<count($img[$m]); $n++){
            if($img[$m][$n] != 2){
                $tmp[$m][$n] = ($img[$m][$n] == 1)? 0 : 1;
            }
        }
    }
    return $tmp;
}

function not($n){
    return ($n==0)? 1:0;
}
?>



Written by Hari Santoso
Fungsi Dasar Dilasi dan Erosi dalam Citra
Bahasan: Script PHP untuk dilasi dan erosi pada citra Untuk yang lagi belajar tentang Dilasi dan Erosi ...
Published at Rabu, 12 November 2014, Updated at Rabu, 12 November 2014
Reviewed by dr. on
Rating: 4.7

Tidak ada komentar :

Poskan Komentar