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 :
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,___)
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