Penajaman Citra(Sharpening)

Pertemuan kali ini saya akan membuat tentang penajaman gambar dengan menggunakan Opencv. Pertama kali saya akan membahas tentang Opencv, Opencv adalah library Image Processing berbasis bahasa C++. OpenCV digunakan oleh banyak developer, scientist, dan programmer untuk mengembangkan sebuah program pattern recognition
Untuk membuat program dengan menggunakan Opencv kita menggunakan program bantuan yaitu Microsoft Visual Studio, dan pada pembuatan Website ini saya menggunakan Microsoft Visual Studio 2010. Sebenarnya Opencv itu hanya menjadi support dalam pembuatan website ini, sedangkan program utama kita mengkodingnya adalah di dalam Microsoft Visual Studionya.
 Saya akan menerang kan tentang penajaman pada gambar. Penajaman Citra ini bertujuan untuk Memperjelas Tepi Object pada pencitraan, dan Pelembuatan pada Object. Sedangkan metode yang saya gunakan untuk membuat penajaman citra disini adalah dengan menggunakan metode Penapis Lolos Tinggi (High Pass Object), pada metode ini Koefisien Filter boleh positif, Negatif atau Nol (0) dan Jumlah sema koefisien Nol (0) atau Satu (1). Penajaman Citra ini juga biasanya disebut dengan sebutan Edge Sharpening


Penajaman juga mempunyai 2 perbedaan yaitu Penajaman Citra dan Penajaman Laplaciar.


#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <WINDOWS.H>
#include <iostream>

using namespace cv;
using namespace std;
void unsharpMask(Mat& im)
{
    Mat tmp;
    GaussianBlur(im, tmp, cv::Size(5,5), 5);
    addWeighted(im, 1.5, tmp, -0.5, 0, im);
     
}
int main(){
      /* webcame
      Mat image;
      VideoCapture cap;
      cap.open(0);
      Sleep(1000);
      namedWindow("window",1);
      while(1){
            cap>>image;
            imshow("window",image);
            waitKey(33);

      }
      */
      Mat img,imgOri, imgLaplacian, imgResult;

    //------------------------------------------------------------------------------------------- test, first of all
    // now do it by hand
    img = (Mat_<uchar>(4,4) << 0,1,2,3,4,5,6,7,8,9,0,11,12,13,14,15);

    // first, the good result
    Laplacian(img, imgLaplacian, CV_8UC1);
    cout << "let opencv do it" << endl;
    cout << imgLaplacian << endl;

    Mat kernel = (Mat_<float>(3,3) <<
        0,  1, 0,
        1, -4, 1,
        0,  1, 0);
    int window_size = 3;

    // now, reaaallly by hand
    // note that, for avoiding padding, the result image will be smaller than the original one.
    Mat frame, frame32;
    Rect roi;
    imgLaplacian = Mat::zeros(img.size(), CV_32F);
    for(int y=0; y<img.rows-window_size/2-1; y++) {
        for(int x=0; x<img.cols-window_size/2-1; x++) {
            roi = Rect(x,y, window_size, window_size);
            frame = img(roi);
            frame.convertTo(frame, CV_32F);
            frame = frame.mul(kernel);
            float v = sum(frame)[0];
            imgLaplacian.at<float>(y,x) = v;
        }
    }
    imgLaplacian.convertTo(imgLaplacian, CV_8U);
    cout << "Laplacian" << imgLaplacian << endl;

    // a little bit less "by hand"..
    // using cv::filter2D
    filter2D(img, imgLaplacian, -1, kernel);
    cout << imgLaplacian << endl;


    //------------------------------------------------------------------------------------------- real stuffs now
    img = imread("sample.jpg", 0); // load grayscale image
      imgOri = img;
    // ok, now try different kernel
    kernel = (Mat_<float>(3,3) <<
        1,  1, 1,
        1, -8, 1,
        1,  1, 1); // another approximation of second derivate, more stronger

    // do the laplacian filtering as it is
    // well, we need to convert everything in something more deeper then CV_8U
    // because the kernel has some negative values,
    // and we can expect in general to have a Laplacian image with negative values
    // BUT a 8bits unsigned int (the one we are working with) can contain values from 0 to 255
    // so the possible negative number will be truncated
    filter2D(img, imgLaplacian, CV_32F, kernel);
    img.convertTo(img, CV_32F);
    imgResult = img - imgLaplacian;

    // convert back to 8bits gray scale
    imgResult.convertTo(imgResult, CV_8U);
    imgLaplacian.convertTo(imgLaplacian, CV_8U);

      namedWindow("original", CV_WINDOW_AUTOSIZE);
    imshow( "original", imgOri );

   // namedWindow("laplacian", CV_WINDOW_AUTOSIZE);
    //imshow( "laplacian", imgLaplacian );

    namedWindow("result", CV_WINDOW_AUTOSIZE);
    imshow( "result", imgResult );

    while( true ) {
        char c = (char)waitKey(10);
        if( c == 27 ) { break; }
    }
      return 0;
}

Setelah mengcopy paste codingan diatas kita sekarang akan mengonfigurasis settingan debuging dan release dengan cara Project -> (Nama Project)Propertys setelah itu masuk ke menu Linker -> Input.Pertama saya akan mengubah release terlebih dahulu dengan cara masuk kedalam configuration manager -> Ubah Solution Active menjadi Release setelah itu kita masukan codingan lagi kedalam Additional Depedencies.  
opencv_features2d246.lib
opencv_highgui246.lib
opencv_core246.lib
opencv_imgproc246.lib
opencv_ml246.lib
opencv_objdetect246.lib
opencv_video246.lib
opencv_contrib246.lib
opencv_calib3d246.lib



Ssekarang kita akan mengconfigurasi Debug dengan cara yang sama dengan release tetapi diubah terlebih dahulu pada Solution Activenya menjadi Debug.
opencv_features2d246.lib
opencv_highgui246d.lib
opencv_core246d.lib
opencv_imgproc246d.lib
opencv_ml246d.lib
opencv_objdetect246d.lib
opencv_video246d.lib
opencv_contrib246d.lib
opencv_calib3d246d.lib
 
  Setelah itu kita akan mengconfigurasi alamat folder pada tools dengan cara Tools -> Option -> Project and Solution -> VC++ Direktories -> Library Files
New Line -> dan beri tambahan seperti ini C:\opencv\build\x86\vc9\lib
  Setelah itu kita ubah lagi tetapi kali ini di include file.
Dengan menambahkan : C:\opencv\build\includedan C:\opencv\include\opencvi
  Setelah itu kita copy paste image kita kedalam folder opencv kita yang berada pada direktor : C:\Opencv\samples\cpp.
   Langkah selanjutnya dengan mengcopy image kita ke dalam folder  Visual Studio kita yang berda di direktori : C:\Users\(nama Komputer)\My Document\Visual Studio 2010\(nama project).
   Setelah itu baru kita Debuging dengan cara Klik F5 atau dengan cara Debug -> Start Debunging.

Outputnya :

Nama Kelompok :
Zakie Zakaria (58410823)
Mohammad Iqbal Aristya (54410480)
Kelas : 4ia11

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS