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



























Kamis, 06 Oktober 2016

Pengolahan Citra Dan Cara Menampilkan Gambar Dengan Menggunakan Matlab

Pengolahan Citra

Pengolahan citra adalah salah satu cabang dari ilmu informatika. Pengolahan citra berkutat pada usaha untuk melakukan transformasi suatu citra/gambar menjadi citra lain dengan menggunakan teknik tertentu. Pengolahan citra merupakan bidang yang bersifat multidisiplin, yang terdiri dari banyak aspek, antara lain fisika, elektronika, matematika, seni dan teknologi komputer. Pengolahan citra (image processing) memiliki hubungan yang sangat erat dengan disiplin ilmu yang lain. jika sebuah ilmu disiplin ilmu dinyatakan dengan bentuk proses suatu input menjadi output, maka pengolahan citra memiliki input berupa citra serta output juga berupa citra.

Pengolahan citra adalah istilah umum untuk berbagai teknik yang keberadaannya untuk memanipulasi dan memodifikasi citra dengan berbagai cara. Foto adalah contoh gambar berdimensi dua yang bisa diolah dengan mudah.Setiap foto dalam bentuk citra digital (misalnya berasal dari kamera digital) dapat diolah melalui perangkat-lunak tertentu. Pengolahan citra merupakan bagian penting yang mendasari berbagai aplikasi nyata, seperti pengenalan pola, penginderaan jarak-jauh melalui satelit atau pesawat udara, dan machine vision.

Berikut prinsip dasar dalam pengolahan citra:

1. Peningkatan kecerahan dan kontras
Citra yang diproses seringkali dalam keadaan terdistorsi atau mengandung derau, untuk kepentingan tertentu derau tersebut perlu dibersihkan terlebih dahulu. Dalam pengolahan citra metode yang dapat dipakai untuk keperluan tersebut salah satunya cara yang dilaksanakan melalui filter notch.

2. Penghilangan derau
Untuk kepentingan mengenali suatu objek di dalam citra, objek perlu dipisahkan terlebih dahulu dari latar belakangnya. Salah satu pendekatan yang umum dipakai untuk keperluan ini adalah penemuan batas objek. Dalam hal ini batas objek berupa bagian tepi objek. Setelah tepi objek diketahui pencarian ciri terhadap objek dapat dilaksanakan.

3. Pencarian bentuk objek
Untuk kepentingan mengenali suatu objek di dalam citra, objek perlu dipisahkan terlebih dahulu dari latar belakangnya. Salah satu pendekatan yang umum dipakai untuk keperluan ini adalah penemuan batas objek. Dalam hal ini batas objek berupa bagian tepi objek. Setelah tepi objek diketahui pencarian ciri terhadap objek dapat dilaksanakan.

Cara Membuat dan Menampilkan Gambar Dengan Menggunakan Matlab

GUI merupakan salah satu fitur dalam matlab yang digunakan untuk menyajikan tampilan yang mudah untuk digunakan atau dibaca oleh pengguna (dalam istilahnya disebut juga aplikasi yang user friendly). GUI (Grapichal User Interface) sering digunakan untuk membuat simulasi aplikasi dekstop. Banyak orang yang menggunakan fitur ini sebagai medianya. Pada kesempatan kali ini, kita akan belajar cara membuka (browse) image dan menampilkannya dengan menggunakan GUI pada Matlab. Langkah pertama tentu saja jita harus membuat framework GUI Matlab terlebih dahulu.

Berikut ini merupakan tutorial cara membuat citra berwarna (RGB) menjadi hitam putih (biner) menggunakan Graphical User Interface  (GUI) MATLAB:


1. Buatlah rancangan GUI MATLAB yang terdiri dari 2 axes, 3 pushbutton, 1 slider, dan 1 edit text seperti tampak pada gambar di bawah ini


2. Hapus xTick, yTick, dan zTick pada masing-masing axes

3. Ubahlah string pada masing-masing pushbuttton dengan nama Open Image, Grayscale, dan Save

4. Hapuslah string pada edit text

5. Ubahlah Min slider menjadi 0 dan Max menjadi 255,
sehingga tampilan GUI tampak pada gambar berikut:


6. Script Programnya adalah sbb:

function varargout = Latm(varargin)
% LATM MATLAB code for Latm.fig
%      LATM, by itself, creates a new LATM or raises the existing
%      singleton*.
%
%      H = LATM returns the handle to a new LATM or the handle to
%      the existing singleton*.
%
%      LATM('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in LATM.M with the given input arguments.
%
%      LATM('Property','Value',...) creates a new LATM or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Latm_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Latm_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Latm

% Last Modified by GUIDE v2.5 01-Oct-2016 15:43:06

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Latm_OpeningFcn, ...
                   'gui_OutputFcn',  @Latm_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Latm is made visible.
function Latm_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Latm (see VARARGIN)

% Choose default command line output for Latm
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Latm wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Latm_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[name_file1,name_path1] = uigetfile( ...
    {'*.bmp;*.jpg;*.tif','Files of type (*.bmp,*.jpg,*.tif)';
    '*.bmp','File Bitmap (*.bmp)';...
    '*.jpg','File jpeg (*.jpg)';
    '*.tif','File Tif (*.tif)';
    '*.*','All Files (*.*)'},...
    'Open Image');

if ~isequal(name_file1,0)
    handles.data1 = imread(fullfile(name_path1,name_file1));
    guidata(hObject,handles);
    axes(handles.axes1);
    imshow(handles.data1);
else
    return;
end

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
image1 = handles.data1;
gray = rgb2gray(image1);
axes(handles.axes2);
imshow(gray);
handles.data2 = gray;
guidata(hObject,handles);

% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
gray = handles.data2;
value = get(handles.slider1,'value');
thresh = imcomplement(im2bw(gray,value/255));
axes(handles.axes2);
imshow(thresh);
handles.data3 = thresh;
guidata(hObject,handles);
set(handles.edit1,'String',value)

% --- Executes during object creation, after setting all properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end


% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
thresh = handles.data3;
[name_file_save,path_save] = uiputfile( ...
    {'*.bmp','File Bitmap (*.bmp)';...
    '*.jpg','File jpeg (*.jpg)';
    '*.tif','File Tif (*.tif)';
    '*.*','All Files (*.*)'},...
    'Save Image');
if ~isequal(name_file_save,0)
    imwrite(thresh,fullfile(path_save,name_file_save));
else
    return
end


function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

7. Ketika di Run maka akan tampak seperti pada gambar di bawah ini


8. Klik Open Image, pilih gambar yang ingin diproses dan klik Grayscale.



9. Geser nilai Slider



10. Citra hitam putih yang terbentuk dapat disimpan dengan cara meng-klik tombol Save Image.


Daftar Pustaka :

https://www.academia.edu/7385678/Pengolahan_Citra_Digital?auto=download

https://pemrogramanmatlab.wordpress.com/2016/09/30/thresholding_citra/#more-17