Minggu, 23 Oktober 2016

Konvolusi dan Penggunaan Fungsi Histeq

Konvolusi (convolution) adalah sebuah proses dimana citra dimanipulasi dengan menggunakan eksternal mask / subwindows untuk menghasilkan citra yang baru. Sedangkan Filtering tanpa menggunakan ekternal mask tetapi hanya menggunakan pixel tetangga untuk mendapatkan pixel yang baru.
Histogram
Histogram adalah representasi grafis untuk distribusi warna dari citra digital. Sumbu ordinat vertikal merupakan representasi piksel dengan nilai tonal dari tiap-tiap deret bin pada sumbu axis horizontalnya. Sumbu axis terdiri dari deret logaritmik bindensitometry yang membentuk rentang luminasi atau exposure range yang mendekati respon spectral sensitivity visual mata manusia. Deret bin pada density yang terpadat mempunyai interval yang relatif sangat linear dengan variabel mid-tone terletak tepat di tengahnya.
Pada umumnya, sebuah histogram hanya memetakan seluruh nilai tonal dari citra digital pada bin luminasi masing-masing. Nilai tonal tersebut telah tersedia dalam color space yang umum digunakan adalah sRGB dan AdobeRGB yang mempunyai nilai gamma γ = 2,2.
Informasi yang didapat dari Histogram:
  • Puncak histogram → intensitas pixel yangpaling menonjol.
  • Lebar puncak → rentang kontras.
  • Over‐exposed (terlalu terang) dan under‐exposed (terlalu gelap) memiliki rentang kontras sempit.
  • Citra yang baik mengisi daerah derejatkeabuan secara penuh dan merata pada setiap nilai intensitas pixel.
 Contoh penggunaan Histeq pada Matlab:
  1. Buka Matlab (saya menggunakan versi R2015a)
  2. Buat script baru , New -> Script (atau Ctrl + N)
  3. Copy dan paste code berikut ini
    im = imread('foto.jpg');
    figure;
    subplot(2,1,1);
    imshow(im);
    subplot(2,1,2);
    imhist(im);
    out = histeq(im, 256); %//or you can use my function: out = hist_eq(im);
    figure;
    subplot(2,1,1);
    imshow(out);
    subplot(2,1,2);
    imhist(out);
  4. Hasilnya seperti ini: 

     Contoh 2 Penggunaan Histeq
    Copy dan paste code berikut ini
    GIm=imread('foto.jpg');
    numofpixels=size(GIm,1)*size(GIm,2);
    figure,imshow(GIm);
    title('Original Image');
    HIm=uint8(zeros(size(GIm,1),size(GIm,2)));
    freq=zeros(256,1);
    probf=zeros(256,1);
    probc=zeros(256,1);
    cum=zeros(256,1);
    output=zeros(256,1);
    %freq counts the occurrence of each pixel value.
    %The probability of each occurrence is calculated by probf.
    for i=1:size(GIm,1)
    for j=1:size(GIm,2)
    value=GIm(i,j);
    freq(value+1)=freq(value+1)+1;
    probf(value+1)=freq(value+1)/numofpixels;
    end
    end
    sum=0;
    no_bins=255;
    %The cumulative distribution probability is calculated.
    for i=1:size(probf)
    sum=sum+freq(i);
    cum(i)=sum;
    probc(i)=cum(i)/numofpixels;
    output(i)=round(probc(i)*no_bins);
    end
    for i=1:size(GIm,1)
    for j=1:size(GIm,2)
    HIm(i,j)=output(GIm(i,j)+1);
    end
    end
    figure,imshow(HIm);
    title('Histogram equalization');
    %The result is shown in the form of a table
    figure('Position',get(0,'screensize'));
    dat=cell(256,6);
    for i=1:256
    dat(i,:)={i,freq(i),probf(i),cum(i),probc(i),output(i)};
    end
    columnname =   {'Bin', 'Histogram', 'Probability', 'Cumulative histogram','CDF','Output'};
    columnformat = {'numeric', 'numeric', 'numeric', 'numeric', 'numeric','numeric'};
    columneditable = [false false false false false false];
    t = uitable('Units','normalized','Position',[0.1 0.1 0.4 0.9], 'Data', dat,'ColumnName', columnname,'ColumnFormat', columnformat,'ColumnEditable', columneditable,'RowName',[]);
    subplot(2,2,2); bar(GIm);
    title('Before Histogram equalization');
    subplot(2,2,4); bar(HIm);
    title('After Histogram equalization');
    Hasilnya



    Terima kasih

Tidak ada komentar:

Posting Komentar