Sabtu, 22 Oktober 2016

Konvolusi Pada Pengolahan Citra

Konvolusi

Kali ini saya akan membahas tentang konvolusi pada pengolahan citra dan contoh penggunaannya pada MATLAB. Secara umum konvolusi didefinisikan sebagai cara untuk mengkombinasikan dua buah deret angka yang menghasilkan deret angka yang ketiga. Didalam dunia seismik deret-deret angka tersebut adalah wavelet sumber gelombang, reflektivitas bumi dan rekaman seismik.

Secara matematis, konvolusi adalah integral yang mencerminkan jumlah lingkupan dari sebuah fungsi a yang digeser atas fungsi b sehingga menghasilkan fungsi c. Konvolusi dilambangkan dengan asterisk.

Sehingga, a*b = c berarti fungsi a dikonvolusikan dengan fungsi b menghasilkan fungsi c. Setelah mengetahui definisi dari konvolusi, Beberapa hal umum yang berhubungan dengan konvulasi :
·                     Konvolusi diskrit banyak digunakan dalam pengolahan citra untuk image smoothing, edge detection dan efek-efeklainnya
·                     Konvolusi dilakukan berdasarkan jumlah bobot dari piksel-piksel tetangga
·                     Bobot ditentukan berdasarkan ukuran window berupa matriks
·                     Window atau disebut juga sliding window bergerak sepanjang piksel yang ada pada citra berukuran kecil yang biasa disebut convolution mask atau convolution kernel
·                     Orde matriks biasanya ganjilsehingga hasil konvolusi tepat berada ditengah-tengah
·                     Semakin besar ukuran window,beban komputasi akan semakin meningkat


Secara matematis, konvolusi adalah integral yang mencerminkan jumlah lingkaran dari sebuah sudut fungsi F yang digeser atas fungsi g sehingga menghasilkan fungsi h. Konvolusi dilambangkan dengan arsterik (*). Sehingga, F*g=h berarti fungsi F dikonvolusikan dengan fungsi g menghasilkan fungsi h. konvolusi dua buah fungsi F(x) dan g(x) di definiskan sebagai berikut :


integral dari -tak hingga sampai tak terhingga. Untuk fungsi diskrit, konvolusi di definisikan sebagai :


g(x) disebut dengan kernel konvolusi (filter). Kernel g(x) merupakan jendela yang dioperasikan secara bergeser pada sinyal masukan F(x). Hasil konvolusi dinyatakan dengan keluaran h(x). Ilustrasi Konvolusi : F(i,j)



F(i,j) = AP1+BP2+CP3+DP4+EP5+FP6+GP7+HP8+IP9

Contoh, misal citra F(x,y) yang berukuran 5x5 sebuah kernel dengan 3x3 matriks sebagai berikut :



Tahapan menghitung hasil konvolusi :



1.                  Menempatkan kernel pada sudut kiri atas, kemudian hitung nilai pixel pada posisi (0,0) dan kernel hasil = (3)
2.                  Geser kernel satu pixel ke kanan, kemudian hitung nilai pixel pada posisi (0,0) dan kernel hasil = (0)
3.                  Selanjutnya dengan cara yang sama geser ke kanan dan seterusnya
4.                  Geser kernel satu pixel ke bawah, lakukan perhitungan seperti di atas
5.                  Nilai pixel citra tepi tidak berubah
6.                  Sehingga di dapatkan hasil sebagai berikut


Contoh Penggunaan Konvolusi Pada MATLAB

Syntax
J = histeq(I,hgram)
J = histeq(I,n)
[J, T] = histeq(I)
[gpuarrayJ, gpuarrayT] = histeq(gpuarrayI,___)
newmap = histeq(X, map, hgram)
newmap = histeq(X, map)
[newmap, T] = histeq(X,___)
Description
J = histeq(I,hgram) transforms the intensity image I so that the histogram of the output intensity image J with length(hgram) bins approximately matches hgram. The vector hgram should contain integer counts for equally spaced bins with intensity values in the appropriate range: [0, 1] for images of class double, [0, 255] for images of class uint8, and [0, 65535] for images of class uint16. histeq automatically scales hgram so that sum(hgram) = prod(size(I)). The histogram of J will better match hgram when length(hgram) is much smaller than the number of discrete levels in I.
J = histeq(I,n) transforms the intensity image I, returning in J an intensity image with n discrete gray levels. A roughly equal number of pixels is mapped to each of the n levels in J, so that the histogram of J is approximately flat. (The histogram of J is flatter when n is much smaller than the number of discrete levels in I.) The default value for n is 64.
[J, T] = histeq(I) returns the grayscale transformation that maps gray levels in the image I to gray levels in J.[gpuarrayJ, gpuarrayT] = histeq(gpuarrayI,___) performs the histogram equalization on a GPU. The input image and the output image are gpuArrays. This syntax requires the Parallel Computing Toolbox™.
newmap = histeq(X, map, hgram) transforms the colormap associated with the indexed image X so that the histogram of the gray component of the indexed image (X,newmap) approximately matches hgram. The histeq function returns the transformed colormap in newmap. length(hgram) must be the same as size(map,1).
newmap = histeq(X, map) transforms the values in the colormap so that the histogram of the gray component of the indexed image X is approximately flat. It returns the transformed colormap in newmap.
[newmap, T] = histeq(X,___) returns the grayscale transformation T that maps the gray component of map to the gray component of newmap.
Contoh Script Histeq 1

im = imread(‘foto.tif’);
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);




Contoh Script Histeq 2

GIm=imread(‘foto.tif’);
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’);











Daftar Pustaka :

http://www.hanivinside.net/2016/10/histeq-pada-pengohan-citra.html 


http://stackoverflow.com/questions/24094649/explanation-of-the-histogram-equalization-function-in-matlab



























Tidak ada komentar:

Posting Komentar