Sabtu, Desember 07, 2013

Thinning Process

Makalah Pengolahan Citra
Thinning Processing


Nama :    1. Muhamad Fitriansyah ( 54410577 )
2. Adry Genialdi (50410235)

Kelas      : 4IA11





UNIVERSITAS GUNADARMA
2013





 Pengertian Pengolahan Citra
Pengolahan citra adalah setiap bentuk pengolahan sinyal dimana input adalah gambar, seperti foto atau video bingkai, sedangkan outputdari pengolahan gambar dapat berupa gambar atau sejumlah karakteristik atau parameter yang berkaitan dengan gambar. Kebanyakan gambar-teknik pemrosesan melibatkan atau memperlakukan foto sebagai dimensi dua sinyal dan menerapkan standar-teknik pemrosesan sinyal untuk itu, biasanya hal tersebut mengacu pada pengolahan gambar digital,tetapi dapat juga digunakan untuk optik dan pengolahan gambar analog. Akuisisi gambar atau yang menghasilkan gambar input di tempat pertama disebut sebagai pencitraan.
Pengolahan citra merupakan proses pengolahan dan analisis citra yang banyak melibatkan persepsi visual. Proses ini mempunyai ciri data masukan dan informasi keluaran yang berbentuk citra. Istilah pengolahan citra digital secara umum didefinisikan sebagai pemrosesan citra dua dimensi dengan komputer. Dalam definisi yang lebih luas, pengolahan citra digital juga mencakup semua data dua dimensi. Citra digital adalah barisan bilangan nyata maupun kompleks yang diwakili oleh bit-bit tertentu.
Umumnya citra digital berbentuk persegi panjang atau bujur sangkar (pada beberapa sistem pencitraan ada pula yang berbentuk segienam) yang memiliki lebar dan tinggi tertentu. Ukuran ini biasanya dinyatakan dalam banyaknya titik atau piksel sehingga ukuran citra selalu bernilai bulat. Setiap titik memiliki koordinat sesuai posisinya dalam citra. Koordinat ini biasanya dinyatakan dalam bilangan bulat positif, yang dapat dimulai dari 0 atau 1 tergantung pada sistem yang digunakan. Setiap titik juga memiliki nilai berupa angka digital yang merepresentasikan informasi yang diwakili oleh titik tersebut.
Format data citra digital berhubungan erat dengan warna. Pada kebanyakan kasus, terutama untuk keperluan penampilan secara visual, nilai data digital merepresentasikan warna dari citra yang diolah. Format citra digital yang banyak dipakai adalah Citra Biner (monokrom), Citra Skala Keabuan ( gray scale ), Citra Warna ( true color ), dan Citra Warna Berindeks.
Perangkat sistem pengolah citra dikelompokkan menjadi tiga bagian yaitu:
1. Perangkat keras (hardware)
2. Perangkat lunak (software)
3. Intelejensi manusia (brainware)
Ketiga pengelompokkan sistem pengolah citra tersebut sudah menjadi hal mutlak dalam pengolah citra. Dimana pada komputer-komputer saat ini sudah hampir dikatakan memenuhi standart spesifikasi untuk melakukan pengolahan citra. Namun kenyataanya masih banyak perangkat yang lainnya yang perlu kita lengkapi untuk melakukan pengolahan citra, bukan hanya sekedar komputer, melainkan perangkat-perangkat lainnya yang tidak include dalam sebuah komputer atau PC.


Pengertian Thinning
Thinning merupakan salah satu image processing yang digunakan untuk mengurangi ukuran dari suatu image (image size) dengan tetap mempertahankan informasi dan karakteristik penting dari image tersebut. Hal ini diimplementasikan dengan mengubah image awal dengan pola binary menjadi representasi kerangka (skeletal representationimage tersebut.
Thinning merupakan tahapan yang penting dalam proses image processing. Hal ini dikarenakan prosedur thinning memainkan peranan yang penting dalam suatu ruang lingkup yang luas dari masalah yang timbul dalam image processing. Ruang lingkup tersebut dapat bermula dari pengawasan otomatis dari sirkuit yang dicetak sampai pada penghitungan serat-serat asbes dalam penyaring udara.
Representasi kerangka dari suatu image—hasil dari proses thinning—memiliki sejumlah sifat dan ciri-ciri yang bermanfaat, diantaranya ukurannya yang kecil (karena pengurangan jumlah data dalam jumlah yang besar) dan pertahanan komponen struktur utama dari pola tersebut (komponen-komponen tersebut dapat digunakan pada saat penganalisaan bentuk).


Metodologi Image-Thinning
Metodologi dari thinning diartikan sebagai algoritma-algoritma atau prosedur-prosedur yang dapat digunakan untuk melakukan proses thinning tersebut. Suatu metode (algoritma/ prosedur) thinning yang baik seharusnya melindungi dan mempertahankan topologi, panjang, dan orientasi dari image yang di-thinning. Sementara itu, hasil proses thinning (skeletal representation) seharusnya mampu merepresentasikan fitur-fitur utama seperti penggabungan, pojok (sudut), dan titik akhir.
Secara umum, image-thinning berguna untuk mengurangi tresholded citra output yang dihasilkan dari edge detector, menjadi garis dengan ukuran ketebalan satu pixel saja. Untuk mewujudkan kegunaan ini, terdapat algoritma sederhana yang dapat diaplikasikan, yakni sebagai berikut:
Umpamakan semua piksel pada batas-batas daerah foreground (contohnya titik-titik pada foreground hanya memiliki satu background neighbour. Hapus semua titik yang memiliki foreground neighbour lebih dari satu. Lakukan berulang-ulang sampai konvergen.
Atau dengan rumus sederhana: thin (i, j) = i – hit -dan-miss (i, j)
Algoritma ini tidak bisa memberikan efek pada pixel-pixel di akhir garis. Cara ini dapat disempurnakan dengan cara melakukan hit-dan-miss dengan struktur elemen yang dirotasikan 900.


Implementasi Process thinning
Pada proses implementasi ini kami menggunakan OpenCV untuk melakukan proses thinning, dengan melakukan langkah-langkah sebagai berikut :
Pertama tulis atau ketikkan Syntax  atau codingan seperti berikut :

/**
 * Code for thinning a binary image using Zhang-Suen algorithm.
 */
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

/**
 * Perform one thinning iteration.
 * Normally you wouldn't call this function directly from your code.
 *
 * @param  im    Binary image with range = 0-1
 * @param  iter  0=even, 1=odd
 */
void thinningIteration(cv::Mat& im, int iter)
{
    cv::Mat marker = cv::Mat::zeros(im.size(), CV_8UC1);

    for (int i = 1; i < im.rows-1; i++)
    {
        for (int j = 1; j < im.cols-1; j++)
        {
            uchar p2 = im.at<uchar>(i-1, j);
            uchar p3 = im.at<uchar>(i-1, j+1);
            uchar p4 = im.at<uchar>(i, j+1);
            uchar p5 = im.at<uchar>(i+1, j+1);
            uchar p6 = im.at<uchar>(i+1, j);
            uchar p7 = im.at<uchar>(i+1, j-1);
            uchar p8 = im.at<uchar>(i, j-1);
            uchar p9 = im.at<uchar>(i-1, j-1);

            int A  = (p2 == 0 && p3 == 1) + (p3 == 0 && p4 == 1) +
                     (p4 == 0 && p5 == 1) + (p5 == 0 && p6 == 1) +
                     (p6 == 0 && p7 == 1) + (p7 == 0 && p8 == 1) +
                     (p8 == 0 && p9 == 1) + (p9 == 0 && p2 == 1);
            int B  = p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9;
            int m1 = iter == 0 ? (p2 * p4 * p6) : (p2 * p4 * p8);
            int m2 = iter == 0 ? (p4 * p6 * p8) : (p2 * p6 * p8);

            if (A == 1 && (B >= 2 && B <= 6) && m1 == 0 && m2 == 0)
                marker.at<uchar>(i,j) = 1;
        }
    }

    im &= ~marker;
}

/**
 * Function for thinning the given binary image
 *
 * @param  im  Binary image with range = 0-255
 */
void thinning(cv::Mat& im)
{
    im /= 255;

    cv::Mat prev = cv::Mat::zeros(im.size(), CV_8UC1);
    cv::Mat diff;

    do {
        thinningIteration(im, 0);
        thinningIteration(im, 1);
        cv::absdiff(im, prev, diff);
        im.copyTo(prev);
    }
    while (cv::countNonZero(diff) > 0);

    im *= 255;
}

/**
 * This is an example on how to call the thinning function above.
 */
int main()
{
    cv::Mat src = cv::imread("horse.png");
    if (src.empty())
        return -1;

    cv::Mat bw;
    cv::cvtColor(src, bw, CV_BGR2GRAY);
    cv::threshold(bw, bw, 10, 255, CV_THRESH_BINARY);

    thinning(bw);

    cv::imshow("src", src);
    cv::imshow("dst", bw);
    cv::waitKey(0);

    return 0;
}



Setelah mengetikkan syntax seperti diatas, maka kita jalankan lalu kita build program tersebut. Apabila build tersebut telah berhasil, lalu lakukan debug program dimana saat melakukan debug makan secara otomatis program tersebut akan berjalan.

Output