Modul Praktikum Image Processing

download Modul Praktikum Image Processing

of 62

description

tes

Transcript of Modul Praktikum Image Processing

  • 3/24/2014

    Image Processing | Akhyar Lubis, S.Kom

    UNIVERSITAS PEMBANGUNAN PANCA BUDI

    MODUL PRAKTIKUM IMAGE PROCESSING

  • Daftar Isi Daftar Isi.................................................................................................................................................. 2

    I. PENDAHULUAN ................................................................................................................................... 4

    1. Apa itu MATLAB .............................................................................................................................. 4

    2. Sistem MATLAB ............................................................................................................................... 4

    3. Instalasi Program MATLAB ............................................................................................................. 5

    4. Mulai Menjalankan MATLAB ........................................................................................................... 5

    5. Menentukan Variabel ..................................................................................................................... 5

    6. Bekerja dengan Array ...................................................................................................................... 6

    7. Format Data .................................................................................................................................... 7

    8. Keluar dari Program MATLAB .......................................................................................................... 8

    II. VISUALISASI DATA .............................................................................................................................. 8

    1. Plot 2-Dimensi ................................................................................................................................ 8

    a. Lebih Jauh Mengenai Plot .......................................................................................................... 13

    2. Plot 3 Dimensi ................................................................................................................................ 18

    a. Plot Garis .................................................................................................................................. 18

    b. Plot Permukaan......................................................................................................................... 19

    c. Plot Kontur ............................................................................................................................... 21

    III. M-File MATLAB ................................................................................................................................ 23

    1. Menampilkan tulisan hello matlab .............................................................................................. 24

    2. Fungtion dengan M-File ................................................................................................................ 24

    3. M-File dengan inputan keyboard................................................................................................... 25

    4. Contoh Kasus ................................................................................................................................ 26

    a. Menghitung Luas Permukaan dan Volume Balok ....................................................................... 26

    b. Menghitung n Suku Pertama dari Deret Aritmatika ................................................................... 26

    c. Matrik ....................................................................................................................................... 26

    IV. FILE CITRA PADA MATLAB ............................................................................................................... 27

    1. Image Digital ................................................................................................................................. 27

    2. Membaca dan menampilkan file Citra ........................................................................................... 28

    3. Membaca informasi file gambar ................................................................................................... 31

    4. Reading an Image File ................................................................................................................... 31

  • 5. Data Classes and Data Conversions ............................................................................................... 31

    a. Sample 1: ................................................................................................................................... 32

    b. Sample 2 : .................................................................................................................................. 32

    6. GUI Membaca file citra ................................................................................................................. 33

    V . IMAGE CROPPING, RESIZING, FLIPPING, dan ROTATION.................................................................. 36

    1. Pemotongan Citra (Crop) ............................................................................................................... 36

    2. Fungsi flipud dan fliplr.................................................................................................................... 38

    3. Fungsi imrotate .............................................................................................................................. 38

    4. Image Resize GUI ......................................................................................................................... 39

    VI. GRAY-LEVEL TRANSFORMATIONS .................................................................................................... 45

    VII. HISTOGRAM PROCESSING .............................................................................................................. 49

    VII. NEIGHBORHOOD PROCESSING ...................................................................................................... 51

    1. SMOOTHING FILTERS IN THE SPATIAL DOMAIN ............................................................................. 51

    VIII. DETEKSI TEPI ................................................................................................................................. 53

    1. Edge Detection Using the Prewitt Operator ................................................................................... 53

    2. Edge Detection Using the Sobel Operator ..................................................................................... 54

    3. Edge Detection with the Roberts Operator.................................................................................... 55

    4. Edge Detection with the Laplacian of a Gaussian Operato .............................................................. 55

    5. Edge Detection with the Canny Operator ....................................................................................... 56

    6. Edge Detection with the Kirsch Operator ....................................................................................... 57

    7. Edge Detection with the Robinson Operator ................................................................................. 59

    IX. Perbaikan kualitas Citra ................................................................................................................... 59

    1.Operasi titik penambahan dan pengurangan intensitas ................................................................... 60

    a.Operasi titik melalui ekualisasi histogram .................................................................................... 60

    2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik LPF .............................................. 60

    a. Operasi ruang, perbaikan dilakukan menggunakan mask matrik HPF.......................................... 61

    b.Operasi ruang, perbaikan dilakukan menggunakan median filter ................................................ 62

  • I. PENDAHULUAN

    1. Apa itu MATLAB Merupakan sebuah bahasa (pemrograman) dengan unjuk kerja tinggi (hight performance) untuk

    komputasi teknis, yang mengintegrasikan komputasi, visualisasi, dan pemrograman didalam lingkungan

    yang mudah penggunaanya dalam memecahkan persoalan dengan olusinya yang dinyatakan dengan

    notasi matematik. Penggunaan MATLAB yaitu :

    Matematika dan komputasi

    Pengembangan Algoritma

    Pemodelan, Simulasi dan pembuatan prototype

    Analisis data, eksplorasi dan visualisasi

    Grafik untuk sains dan teknik

    Pengembangan Aplikasi, termasuk pembuatan antarmuka grafis untuk pengguna (GUI)

    2. Sistem MATLAB System MATLAB terdiri dari 5 bagian utama, yaitu :

    1. Bahasa (pemgroman) MATLAB

    Bagian ini adalah bahasa (pemrograman) tingkat tinggi yang menggunakan matrik/array dengan

    pernyataan aliran kendali program, struktur data, masukan/keluaran, dan fitur fitur

    pemrograman berorientasi objek.

    2. Lingkungan kerja MATLAB

    Merupakan sekumpulan perkakas dan fasilitas MATLAB yang digunakan oleh penguna atau

    pemrogram. Misalnya untuk mengelola variable di dalam ruang kerja (workspace) dan

    melakukan impor dan ekspor data.

    3. Penanganan Grafik

    Merupakan system grafik MATLAB, termasuk perintah-perintah (program) tingkat tingi untuk

    visualisasi data dimensi 2 dan dimensi 3, pengolahan citra, animasi dan presentasi grafik.

    4. Pustaka (library) fungsi matematis MATLAB

  • Merupakan koleksi algoritma komputasi mulai dari fungsi dasar seperti menjumlahkan (Sum),

    menentukan nilai sinus (sine), kosinus(cosine) dan aritmatika bilangan kompleks; fungsi fungsi

    seperti invers matrik, nilai eigen matriks, fungse Bessel dan FFT (fast Fourier Transform)

    5. API (Application Program Interface) MATLAB

    Bagian ini adalah pustaka (library) untuk menuliskan program dalam bahasa C dan Fortran yang

    berinteraksi dengan MATLAB, termasuk fasilitas untuk memanggil rutin program dari MATLAB

    (dynamic linking), memanggil MATLAB sebagai mesin komputasi, dan untuk pembacaan serta

    penulisan MAT-Files.

    3. Instalasi Program MATLAB Program MATLAB umumnya dalam bentuk CD ROM master program yang harus terlebih dahulu harus

    dilkaukan instalasi ke dalam hardisk. Berikut video instalasi bagaimana instalasi MATLAB.

    4. Mulai Menjalankan MATLAB Untuk memulai program MATLAB dilingkungan Window, klik ganda pada ikon MATLAB dari desktop,

    atau klik start > All Program > Matlab > Matlab 7.0

    5. Menentukan Variabel Contoh :

    Data array : A = 1, 0, 9, 11, 5 akkkan mengunakan matriks dengan dimensi 1x5, sedangkan

    sebuah angka scalar 9 akan menggunakan matriks dengan dimensi 1x1 . Untuk menyimpan array A di

    MATLAB, dicommand prompt >> masukkan :

    >> A = [1 0 9 11 5]

    >> A = [1 0 9 11 5];

    MATLAB akan menampilkan kembali masukan :

    A =

    1 0 9 11 5

    Untuk meniadakan tampilan kembali dari masukan data, tambahkan tanda ; pada akhir baris masukan.

    Untuk memastikan ukuran dari array masukan atau matriks, maka dapat menggunakan perintah size

    >> size (A)

  • Ans =

    1 5

    Arti ans adalah dimensi dari matriks A adalah 1x5 (1 baris dan 5 kolom)

    Contoh ke 2 :

    >> B = [1,0,9,4,3;0,8,4,2,7;14,90,0,43,25]

    Bagaimana hasilnya?

    Contoh ke 3 :

    >> C=B(2,:)

    Contoh ke 4 :

    >> D=[B(1,2),B(1,4);B(3,2),B(3,5)]

    Menghapus baris dan kolom dari matriks dengan sepasang tanda kurung siku.

    Contoh

    >> B(:,3)=[]

    6. Bekerja dengan Array

    Contoh : gunakan matriks A dan B dengan nilai elemen elemen sebagai berikut :

    A = B =

    1 2 3 2 4 6

    4 5 6 0 3 7

    7 8 0 9 8 1

    + (penjumlahan) : >> C=A+B

    - (pengurangan) : >> C=A-B

    * (perkalian) : >> C=A*B

    .* (perkalian titik) : >> C=C.*A

  • Perkalian bentuk ini tidak sama dengan cara perkalian 2 buah matriks) jadi tidak sama dengan

    c=A*B

    / (pembagian oleh matriks : >> C=A/B

    Pembagian oleh matriks B terhadap matriks A

    \ (pembagian matriks kiri : >> C=A\B

    Pembagian A ke B. Pembagian ini ekuivalen dengan inv(A)*B. Sedangkan X=C adalah solusi dari

    A*X=B

    ./ (pembagian elemen per elemen, : >> D=A./B

    .\ (pembagian kiri elemen per elemen. >> E=A.\B

    .^ (pangkat elemen per elemen >> F=A.^B

    Pada teori tentang matriks, dikenal istilah yang disebut transpose dan invers. Di Matlab, untuk

    mendapatkan transpose matriks dengan menggunakan notasi () setelah mendefenisikan suatu matriks,

    seperti

    7. Format Data Matlab mengenal bilangan floating point dengan format single precision atgau double precision. Pada

    double precision menggunakan 64 bit, sedangkan format bilangan single precision enggunakan 32

    bit .

    Short e (notasi sains, 5 digit floating point)

    Long e (5 digit untuk single dan 15 digit untuk double precision)

    Short g (5 digit) format default

    Long g (7 digit untuk single precision dan 15 digit untuk untuk double precision)

    Format bank (2 digit decimal)

    Format rat (rasional)

    Format hex (heksadesimal)

    Format loose (line feed added)

    Format compact (line feed suppressed)

    Lakukan beberapa perintah berikut ini pada comman line matlab :

    >> w=pi/2

    >> Format long e

    >> W

    >> format short e

    >> W

    >> format long g

  • 8. Keluar dari Program MATLAB Pada comman line ketikkan : exit, atau ctrl+q

    II. VISUALISASI DATA

    1. Plot 2-Dimensi Untuk memvisualisasi data secara 2-dimensi ataupun 3-dimensi, dapat menggunakan berbagai

    command plotting; di mana command yang paling dasar ialah plot. Anda bisa praktekan contoh berikut

    ini.

    >> x = 1:8; y=[20 22 25 30 28 25 24 22];

    >> plot(x,y)

    Akan muncul window baru berisi figure hasil plotting. Perhatikan kegunaan dari ikon yang ada.

  • Gambar 1 Jendela Figure

    Seperti yang dilihat, titik (1,20), (2,22), (3,25), (4,30), dan seterusnya terhubung dengan garis lurus.

    Sekarang dapat dicoba dengan membalik urutan sintaks dan mengamati grafik yang dihasilkan!

    >> plot(y,x)

    Setiap gambar di figure window, bisa di print melalui menu File Print (Ctrl+P), atau Anda simpan

    sebagai file FIG dengan File Save (Ctrl+S), ataupun Anda ekspor sebagai file JPG, EMF,BMP, dsb

    dengan FileExport.

    Untuk menambahkan judul, label, dan grid ke dalam hasil plot Anda, digunakan command berikut ini.

    Tabel 1.

  • xlabel ylabel title grid on grid off

    memberi label pada sumbu-x memberi label pada sumbu-y memberi judul di atas area plot memunculkan grid di dalam area plot menghapus grid

    Kita akan memplot kurva y = x3 pada rentang x = -3 hingga x = +3.

    >> clear

    >> x=-3:0.1:3; %inkremen=0.1 agar kurva terlihat mulus

    >> y=x.^3;

    >> plot(x,y)

    >> xlabel('Sumbu X'), ylabel('Sumbu Y')

    >> title('Kurva Y=X^3')

    >> grid on

  • Gambar 2. Contoh plot: kurva Y = X3

    Ketika menggunakan command plot, gambar sebelumnya di figure window akan terhapus. Lalu

    bagaimana jika kita ingin memplot beberapa fungsi dalam satu figure sekaligus? Dalam hal ini kita bisa

    gunakan command hold.

    Tabel 3. Tabel Hold

    hold on hold off

    untuk menahan gambar sebelumnya supaya tak terhapus ketika ditimpa gambar baru untuk menonaktifkan command hold

    Berikut ini contoh memplot beberapa kurva eksponensial negative sekaligus

  • Gambar 3. Hasil plot dengan hold on

  • a. Lebih Jauh Mengenai Plot

    Matlab memungkinkan dapat memplot beberapa fungsi dalam beberapa figure window yang terpisah,

    atau membagi satu window menjadi sejumlah area plot, ataupun mengatur properties dari plot yang

    akan digambar. Beberapa command di bawah ini bisa digunakan untuk tujuan tersebut.

    Figure figure(k) subplot(m,n,k) clf

    Menciptakan figure window baru yang kosong dan siap untuk di-plot Untuk menduduki figure window nomor-k Membagi figure window menjadi m-baris n-kolom area plot yang terpisah, dan menduduki area ke-k clear figure, mengosongkan figure window yang sedang diduduki

    Misalkan figure window berikut dibagi menjadi 2-baris 2-kolom dengan subplot. Perhatikan urutan

    nomor area dari kiri-atas ke kanan-bawah.

    Gambar 4. Pembagian area plot dengan subplot

  • Tabel Lanjutan

    Misalkan:

    plot(x,y,r-) memplot x versus y dengan garis utuh warna merah

    plot(x,y,k*) menempatkan tanda * warna hitam untuk setiap titik x versus y.

    plot(x,y,g--s) memplot dengan garis putus-putus warna hijau dan menempatkan tanda bujur

    sangkar di setiap titik x versus y.

    Perlu diingat bahwa string dalam plot bersifat opsional. Apabila tidak dituliskan maka digunakan garis

    utuh warna biru.

    Tabel Lanjutan

    plot(x1,y1,string1,x2,y2,string2,x3,y3,string3, ... ) menciptakan sejumlah plot sekaligus dalam satu area plot: x1 versus y1 dengan property string1, x2 versus y2 dengan property string2, dan seterusnya

    legend(ket1,ket2,ket3, ...) menambahkan legenda ke dalam plot yang telah dibuat; ket1 untuk plot pertama, ket2 untuk plot kedua, dan seterusnya

    axis off menghilangkan tampilan sumbu koordinat pada plot

    axis on menampakkan kembali sumbu koordinat

    axis([x_awal x_akhir y_awal y_akhir]) membuat tampilan area plot pada batas-batas nilai x = x_awal hingga x_akhir, dan nilai y = y_awal hingga y_akhir

  • axis equal mengubah skala sumbu-x dan sumbu-y menjadi sama

    axis square mengubah bentuk area plot menjadi bujur sangkar

    Berbagai fungsi yang berkaitan dengan plot di atas, berlaku pula untuk plot diskrit, plot logaritmik dan

    plot dalam koordinat polar.

    Pertama, kita akan mencoba memplot kurva eksponensial negative.

    >> clear

    >> x=linspace(0,5,500);

    >> y1=exp(-x); y2=exp(-0.5*x); y3=exp(-0.25*x);

    >> y4=exp(-0.1*x);

    >> plot(x,y1,x,y2,x,y3,x,y4)

    >> grid on

    >> xlabel('sumbu-x'), ylabel('sumbu-y')

    >> title('Kurva y = exp(-Ax)')

    >> legend('A=1','A=0.5','A=0.25','A=0.1')

    Kemudian, kita coba memplot kurva tersebut dalam skala semilogaritmik

    >> figure

    >> semilogy(x,y1,x,y2,x,y3,x,y4)

    >> grid on

  • >> xlabel('sumbu-x'), ylabel('sumbu-y')

    >> title('Kurva y = exp(-Ax)')

    >> legend('A=1','A=0.5','A=0.25','A=0.1')

    Misalkan kita ingin menyempitkan area plot pada y = 1 hingga 10-2 saja, maka:

    >> axis([0 5 1e-2 1])

    Gambar 5 Contoh plot semi-logaritmik

    >> figure >> t=0:0.05:10; >> sinus=sin(2*pi*0.25*t); >> cosinus=cos(2*pi*0.25*t); >> kotak=square(2*pi*0.25*t); >> gigi=sawtooth(2*pi*0.25*t); >> subplot(2,2,1); >> plot(t,sinus), title('sinus 1/4 Hz') >> subplot(2,2,2); >> plot(t,cosinus), title('cosinus 1/4 Hz')

  • >> subplot(2,2,3); >> plot(t,kotak), title('kotak 1/4 Hz') >> subplot(2,2,4); >> plot(t,gigi), title('gigi gergaji 1/4 Hz')

    Gambar 6 Contoh penggunaan subplot

    Dalam contoh ketiga, kita akan mencoba memplot suatu fungsi matematis dalam koordinat polar. Diinginkan plot fungsi:

    = sin2(3) dalam MATLAB dituliskan

    >> figure >> theta=linspace(0,2*pi,500); >> rho=(cos(theta.*3)).^2; >> polar(theta,rho);

  • Gambar 7 Contoh plot dengan command polar

    2. Plot 3 Dimensi Dalam subbab ini akan dibahas tiga macam plot 3-dimensi: plot garis, plot permukaan (surface), dan plot

    kontur.

    a. Plot Garis

    Ini mirip dengan plot 2-dimensi, tetapi kali ini kita gunakan command plot3( ... ), dan dibutuhkan vektor

    z, untuk dimensi ketiga.

  • Gambar 8 Contoh plot 3-dimensi dengan command plot3

    contoh yang lain untuk menggambarkan helix.

    >> t=0:0.1:25;

    >> X=sin(t); Y=cos(t); Z=0.5*t;

    >> plot3(X,Y,Z)

    >> xlabel(sumbu X); ylabel(sumbu Y);

    >> zlabel(sumbu Z);

    >> title (Helix);

    b. Plot Permukaan

    Sementara itu, untuk plot permukaan (surface) dalam ruang 3-dimensi digunakan command mesh atau

    surf. Contoh berikut ini menggambarkan fungsi dua variabel z = x2 + y2.

    Caranya ialah:

    1) Definisikan batas-batas nilai x dan y yang akan diplot

    1. Gunakan command meshgrid untuk mengisi bidang-XY dengan jalinan titik

    2) Hitunglah fungsi 3-dimensi untuk jalinan titik tersebut

    3) Buatlah plot dengan command mesh atau surf.

  • Sebagai contoh:

    >> batas_x = -10:1:10; batas_y = -10:4:10;

    >> [X,Y] = meshgrid(batas_x,batas_y);

    >> Z = X.^2 + Y.^2;

    >> mesh(X,Y,Z);

    Kini Anda mendapatkan plot 3-dimensi. Kini cobalah

    >> surf(X,Y,Z);

    Gambar 10 Hasil plot dengan mesh dan surf

    Amatilah perbedaan hasil antara mesh dan surf ! Anda juga bias menambahkan label dan title

    seperti plot pada umumnya.

    Sekarang kita coba contoh yang lain untuk memplot fungsi 3- dimensi

  • Gambar 11 Plot 3-dimensi dari fungsi sin(r) / r

    di sini kita menggunakan variabel eps, untuk mencegah perhitungan 0/0 ketika R = 0.

    c. Plot Kontur

    Fungsi dua variabel, misalkan z = f(x,y) bisa kita gambarkan konturnya dalam dua dimensi dengan

    command berikut ini:

    Tabel 5

  • Mari kita gambarkan kontur dari fungsi sin(r)/r di atas, lalubandingkan dengan plot permukaannya:

    >> figure; contour(X,Y,Z);

    >> figure; meshc(X,Y,Z);

    Gambar 12 Contoh plot kontur

  • III. M-File MATLAB

    Pemrograman dengan M-File Matlab memberikan kontrol lebih banyak dibandingkan dengan

    pemrograman dengan Command Window seperti yang dibicarakan sebelumnya. Dengan M-File kita bisa

    melakukan percabangan, perulangan, pembuatan fungsi, dan lain - lain. Struktur Program M-File mirip

    dengan bahasa C yang membagi blok program berupa fungsi-fungsi. Tiap fungsi dapat memanggil fungsi-

    fungsi yang lain. Script dalam Command Window berguna untuk menyelesaikan permasalahan yang

    pendek. Sebaliknya M-File dapat dipakai untuk membuat berbagai aplikasi sesuai keinginan pemakai.

    Dalam bab ini dibahas tentang dasar-dasar pembuatan program dalam M-File. Program-program yang

    membutuhkan fungsi yang lebih kompleks contohnya dapat dilihat pada Demo atau Help yang menjadi

    fasilitas Matlab. Jendela M-File dapat dibuka melalui menu File->New->M->File atau langsung saja

    dengan menekan Ctrl+N. Jendela M-File terlihat seperti pada gambar di bawah ini.

    Gambar Jendela M-File Matlab

    Beberapa hal yang harus diperhatikan pada saat menyimpan m-file :

  • a. Nama file tidak boleh ada spasinya b. Nama file tidak boleh merupakan reserved word (instruksi) c. Nama file tidak boleh diawali dengan angka.

    1. Menampilkan tulisan hello matlab Untuk memulai program pada M editor, berikut langkahnya

    1. Isikan pada m editor disp ('Hello Matlab')

    2. Selanjutnya simpan dengan nama hello.m

    3. Pada jendela command window, panggil hello tersebut.

    Gambar pemanggilan file hello.

    Pemangilan hanya nama saja tanpa adanya extention.

    2. Fungtion dengan M-File Salah satu kemampuan M-File yang begitu baik adalah membuat fungsi. Seperti layaknya fungsi - fungsi

    yang sudah terdefinisi di Matlab, kita juga bisa membuat fungsi sendiri yang bisa dipanggil layaknya

    fungsi bawaan Matlab.

    Bentuk deklarasi sebuah fungsi dalam Matlab adalah sebagai berikut :

    function =

    Sebagai contoh adalah bentuk deklarasi untuk menghitung luas sebuah persegi panjang :

    function Luas = FLuas (panjang,lebar)

    Untuk memudahkan pemahaman akan dibuat contoh pembuatan fungsi yang lengkap. Fungsi yang

    dibuat adalah fungsi untuk menghitung luas persegi panjang seperti contoh definisi di atas tadi. Berikut

    ini adalah fungsi lengkapnya.

    function Luas = FLuas (panjang,lebar) Luas=panjang*lebar;

  • Simpan file-nya dengan nama yang sama dengan nama yang sama dengan nama fungsinya. Karena

    nama fungsinya FLuas, maka simpan dengan nama "FLuas.m". Kemudian fumgsi ini akan dicoba pada

    Command Window Matlab dengan bagian panjang = 10 dan lebar =5.

    3. M-File dengan inputan keyboard

    Instruksi untuk input data dari keyboard :

    Syntax

    nama_var =input('Teks yang muncul dilayar '); %data numerik nama_var =input('Teks yang muncul dilayar ',s); %data string

    Instruksi untuk menampilkan output di layer :

    Syntax:

    disp('Teks output'); disp(nama_var); fprintf('Teks output '); fprintf('Teks = ',nama_var);

    Variabel yang akan ditampilkan dilayar, jika menggunakan instruksi fprintf harus diformat terlebih dahulu, seperti halnya pada C.

    Penggunaan \n dapat ditambahkan seperti halnya pada C

    Untuk memudahkan pemahaman, lihat contoh di bawah ini. Di sini akan dibuat program untuk menghitung luas trapesium. Inputan yang ditampilkan adalah Sisi Alas,Sisi Atas, dan tinggi.

    clc; clear; a=input(Masukkan panjang Sisi Alas : ); b=input(Masukkan panjang Sisi Atas : ); t=input(Masukkan tinggi : ); Luas=0.5*(a*b)*t; disp(Luas Trapesium adalah : ) disp(Luas)

    Setelah di-running dengan inputan Sisi Alas=20, Sisi Atas=15, dan tinggi=8, maka tampilan di Command

    Window adalah sebagai berikut :

  • 4. Contoh Kasus

    a. Menghitung Luas Permukaan dan Volume Balok

    Menghitung Luas Permukaan dan Volume Balok. Untuk menyelesaikan permasalahan ini kita akan

    memakai inputan yang tetap berupa panjang, lebar, dan tinggi. Untuk output dari program ini adalah

    berupa Luas Permukaan dan Volume balok yang akan ditampilkan pada Command Window di Matlab.

    clc;clear; panjang=10; lebar=5; tinggi=4; Luas=2*panjang*lebar+2*panjang*tinggi+2*lebar*tinggi Volume=panjang*lebar*tinggi

    b. Menghitung n Suku Pertama dari Deret Aritmatika

    .Untuk membuat program ini, akan dipakai masukan berupa nilai suku pertama, nilai beda, dan nilai n.

    Inputan akan dibuat dinamis yang dapat langsung diinputkan dari keyboard ketika running program

    berlangsung. Hasil dari program ini yang berupa n suku pertama dari deret Aritmatika juga akan

    ditampilkan dalam Command Window.

    clear; a=input('Masukkan suku pertama : '); b=input('Masukkan beda : '); n=input('Masukkan nilai n : '); for i=1:n hasil(i)=a+b*(i-1); end hasil

    c. Matrik % Contoh 2 % menjumlahkan dua matrik clc;clear; a1=input('Masukkan matrik pertama: '); a2=input('Masukkan matrik kedua : '); a3=a1+a2;

  • disp('Hasilnya'); disp(a3);

    Untuk program diatas inputkan matrik-matrik berikut:

    a. a1=

    523

    641 dan a2 =

    436

    512

    Bagaimana outputnya?

    b. a1 =

    523

    641 dan a2 =

    987

    654

    321

    Bagaimana outputnya ?

    Agar kasus tersebut bisa kita handle maka ubah program diatas menjadi seperti berikut:

    % Contoh 3 % menjumlahkan dua matrik clc;clear; a1=input('Masukkan matrik pertama: '); a2=input('Masukkan matrik kedua : '); [b1,k1]=size(a1); [b2,k2]=size(a2); if (b1==b2)&(k1==k2) a3=a1+a2; disp('Hasilnya'); disp(a3); else disp('Matrik tidak dapat dijumlahkan'); end

    IV. FILE CITRA PADA MATLAB

    1. Image Digital Kakas pada pengolahan citra pada Matla menyediakan berbagai macam teknik untuk menampilkan citra.

    Pada Pertemuan ke 4 ini akan dijelakan mengenalkan teknik standar dalam menampilkan citra,

    menjelaskan teknik khususu menampilkan citra dan menjelaskan pencetakan citra.

    Sebuah citra digital adalah kumpulan piksel-piksel yang disusun dalam larik dua dimensi. Indeks baris

    dan kolom (x,y) dari sebuah piksel yang dinyatakan dalam bilangan bulat dan nilai-nilai tersebut

    mendefinisikan suatu ukuran intensitas cahaya pada titik tersebut. Satuan atau bagian terkecil dari suatu

    citra disebut piksel (picture element).

    Umumnya citra dibentuk dari persegi empat yang teratur sehingga jarak horizontal dan vertikal antara

    piksel satu dengan yang lain adalah sama pada seluruh bagian citra. Piksel (0,0) terletak pada sudut kiri

  • atas pada citra, dimana indeks x bergerak ke kanan dan indeks y bergerak ke bawah. Untuk

    menunjukkan koordinat (m-1,n-1) digunakan posisi kanan bawah dalam citra berukuran m x n pixel. Hal

    ini berlawanan untuk arah vertikal dan horizontal yang berlaku pada sistem grafik dalam matematika.

    Video sebenarnya juga merupakan salah satu bentuk dari citra digital. Video merupakan kumpulan dari

    beberapa frame dari citra digital. Satu frame merupakan satu citra digital. Oleh karena itu, apabila di

    video ada satuan yang menyatakan 12 fps(frame persecond) artinya bahwa video tersebut memainkan

    12 frame/citra digital dalam tiap detiknya1. Membaca file citra Untuk membaca file citra, kita dapat

    menggunakan perintah imread yang berarti image read. Output dari imread ini berupa matrix citra 3

    dimensi untuk citra berwarna, ataupun matrix 2 dimensi untuk citra monokrom.

    2. Membaca dan menampilkan file Citra

    Dalam Matlab, citra digital direpresentasikan dalam matriks berukuran m x n sesuai dengan ukuran m x

    n ukuran citra digital dalam pixel. Jadi setiap pixel dari citra digital diwaklili oleh sebuah matriks

    berukuran 1x1 apabila citra tersebut berupa citra Grayscale atau citra Biner, dan 3 matriks apabila citra

    digital berupa citra RGB. Misalkan kita punya citra digital berukuran 640x480 pixel, maka sebenarnya

    citra tersebut diwakili oleh matriks berukuran 640x480.

    Untuk membaca sebuah file citra di Matlab, maka digunakan perintah :

    A=imread(nama_File)

    dengan syarat file yang dibaca berada pada direktori yang aktif. File yang dibaca kemudian disimpan

    dalam variabel "A" dalam bentuk matriks penyusun citra.

    Perintah ini digunakan untuk membaca beberapa format file citra diantaranya :

    Sedangkan untuk menampilkan file citra yang telah dibaca digunakan perintah :

  • Untuk contoh kedua, kita masih akan membaca file yang sama, akan tetapi kali ini akan diambil masing -

    masing matriks penyusun citra (matriks R, matriks G, danMatriks B) karena memang file yang dibaca

    adalah gambar RGB (berwarna). Semua matriks ini kemudian akan ditampilkan ke dalam 1 figure (plot).

    Berikut ini adalah listing :

    clc; clear; A=imread('logopancabudi.jpg');%Membaca file citra red=A(:,:,1);%Mengambil matriks penyusun citra merah green=A(:,:,2);%Mengambil matriks penyusun citra hijau blue=A(:,:,3);%Mengambil matriks penyusun citra biru subplot(2,2,1) imshow(A) subplot(2,2,2) imshow(red) subplot(2,2,3) imshow(green) subplot(2,2,4) imshow(blue)

    hasil setelah di running

  • Terlihat bahwa untuk mengambil nilai piksel merah memiliki indeks 1, warna hijau memiliki indeks 2

    dan warna biru memiliki indeks 3.

    Untuk membaca file citra yang berbeda direktori dengan direktori yang aktif adalah dengan menuliskan

    direktori tempat file berada + nama_file. Misalkan filenya berada pada direktori "D:/Picture", maka

    tinggal ditulis saja :

    A=imread('D:/Picture/logopancabudi.jpg')

    gambar=imread('logopancabudi.jpg'); %--------membaca file gambar red=gambar(:,:,1); %memanggil matriks gambar yang hanya berisi piksel warna

    merah green=gambar(:,:,2);% memanggil matriks gambar yang hanya berisi piksel warna

    hijau blue=gambar(:,:,3); %memanggil matriks gambar yang hanya berisi piksel warna

    biru imshow(red) imshow(green) imshow(blue)

  • 3. Membaca informasi file gambar

    imfinfo(pout.tif);

    4. Reading an Image File IPT berisi fungsi yang khusus untuk membaca file DICOM (Digital Imaging and Communications in

    Medicine) files (dicomread), file NITF (National Imagery Transmission Format) files (nitfread), and HDR

    (high dynamic range) (hdrread).

    5. Data Classes and Data Conversions Ketersediaan IPT dalam membaca berbagai type gambar, menyimpannya dalam array dan membuat nya

    tersedia untuk dilakukan prosesing dan ditampilkan dan itu buth pengetahuan bagaimana menampilkan

    kontent image yang dibutuhkan yang akan direpresentasikan didalam memory.

    Bagian class image dapat ditunjukkan seperti dibawah ini :

    uint8: 1 byte per pixel, in the [0, 255] range

    double: 8 bytes per pixel, usually in the [0.0, 1.0] range

    logical: 1 byte per pixel, representing its value astrue(1 or white) orfalse (0 or black)

  • a. Sample 1:

    I = imread(pout.tif);

    imshow(I)

    figure, imshow(I,[])

    figure, imshow(I,[100 160])

    The first call toimshowdisplays the image in its original state. The following line opens a new figure and

    displays a scaled (for display purposes) version of thesame image. The last line specifies a range of gray

    levels, such that all values lower than 100 will be displayed as black and all values greater than 160 will

    be displayed as white

    b. Sample 2 :

    In this example, we will read an image from a PNG file and save it to a JPG file using three different

    quality parameters: 75 (default), 5 (poor quality, small size), and 95 (better quality, larger size).

    I = imread(peppers.png);

    imwrite(I, pep75.jpg);

    imwrite(I, pep05.jpg, quality, 5);

    imwrite(I, pep95.jpg, quality, 95);

  • 6. GUI Membaca file citra 1. Desian figure

    Desain figure seperti dalam Gambar 1. Dalam meletakkan komponen pallete boleh tidak

    sesuai dengan gambar (sesuai selera)

  • 2. Mengatur Layout Komponen

    Setelah kita selesai mendesain figure, aturlah masing masing komponen menggunakan property

    inspector.

  • 3. Menyimpan figure

    Setelah selesai mendesain figure, langkah selanjutnya adalah menyimpan figure, beri nama

    aplikasi_citra.fig, secara otomatis kita akan dibuatkan kerangka m-file dengan nama yang sama.

    4. Memprogram M-File

    Tambahkan bebrapa program kode pada rutin callback yang diperlukan, antra lain:

    btn_buka

    Di bawah function btn_buka_callbck, tambahkan program menjadi berikut:

    [nama_file1, nama_path1]=uigetfile(...

    {'*.bmp; *.jpg', 'File citra (*.bmp, *.jpg)';

    '*.bmp', 'File Bitmap(*.bmp)';...

    '*.jpg', 'File Jpeg(*.jpg)';

    '*.*', 'Semua File (*.*)'},...

    'Buka file citra asli');

    if ~isequal(nama_file1, 0)

    handles.data1=imread(fullfile(nama_path1, nama_file1));

    guidata(hObject, handles);

    handles.current_data1=handles.data1;

    axes(handles.axes1);

    imshow(handles.current_data1);

    else

    return

    end

    set(handles.edit1, 'String', nama_file1);

    set(handles.edit2, 'String', size(handles.data1,1));

    set(handles.edit3, 'String', size(handles.data1,2));

    btn_tutup

    %untuk keluar dari apalikasi

    delete(handles.figure1)

  • V . IMAGE CROPPING, RESIZING, FLIPPING, dan ROTATION

    Tujuan :

    - Mahasiswa dapat mengetahui bagaimana mengcrop, resize dan merotasi citra digital

    Objektif :

    - Belajar bagaimana melakukan crop citra menggunakan fungsi imcrop

    - Belajar bagaimana melakukan resize citra menggunakan fungsi imresize

    - Belajar bagaimana melakukan flip citra menggunakan fungsi flipup dan fliplr

    - Belajar bagaimana melakukan putaran citra menggunakan fungsi imrotate

    Prosedure :

    1. Pemotongan Citra (Crop) Dalam sesi ini, kamu akan belajar bagaimana melakukan pemotongan gambar (crop). Crop dalam matlab

    dapat dilakukan dengan interaktif menggunakan Image Tool (imtool) atau menggunakan progam

    menggunakan fungsi imcrop.

    1. Buka gambar cameraman dan gunakan crop image dengan tool (imtool) Selanjutnya dapat

    disimpan dengan menu File Save as Simpan dengan nama cropped_building.png

    I = imread(cameraman.tif);

    imtool(I)

    2. Bagaimana membuka gambar hasil crop tersebut dalam matlap?

    3. Fungsi imcrop, terdapat empat vector, [xmin ymin width height]

    4. Lakukan hal dibawah ini untuk menggantikan nilai untuk x1, y1, x2, and y2 dengan nilai yang

    diinginkan

    x1 = 186; x2 = 211; y1 = 105; y2 = 159;

    xmin = x1; ymin = y1; width = x2-x1; height = y2-y1;

    I3 = imcrop(I, [xmin ymin width height]);

    imshow(I3)

    5. Merubah Ukuran kembali dapat dilakukan dengan fungsi imresize

  • I_big1 = imresize(I,3);

    figure, imshow(I), title(Original Image);

    figure, imshow(I_big1), ...

    title(Enlarged Image w/ bicubic interpolation);

    6. Dengan menggunakan imtool melihat detail pixel dari gambar. Penambahan fasilitas zoom

    merupakan pembesaran dalam bentuk visual.

    imtool(I_big1)

    7. Lakukan kembali pembesaran gambar dengan nearest-neighbor dan bilinear interpolations.

    I_big2 = imresize(I,3,nearest);

    I_big3 = imresize(I,3,bilinear);

    figure, imshow(I_big2), ...

    title(Resized w/ nearest-neighbor interpolation);

    figure, imshow(I_big3), ...

    title(Resized w/ bilinear interpolation);

    Perhatikan perbedaan dari gambar tersebut. Bagaimana mereka berbeda? One way to shrink an

    image is by simply deleting rows and columns of the image.

    8. Tutup semua gambar yang terbuka,

    9. Kurangkan ukuran dari gambar cameraman dari 0,5 dimensi sebenarnya.

    I_rows = size(I,1);

    I_cols = size(I,2);

    I_sm1 = I(1:2:I_rows, 1:2:I_cols);

    figure, imshow(I_sm1);

    Pertanyaan, Bagaimana gambar tersebut mengalamai perubahan ukuran?

    10. Shrink image menggunakan fungsi imresize

    I_sm2 = imresize(I,0.5,'nearest');

    I_sm3 = imresize(I,0.5,'bilinear');

    I_sm4 = imresize(I,0.5,'bicubic');

    figure, subplot(1,3,1), imshow(I_sm2), ...

    title('Nearest-neighbor Interpolation');

    subplot(1,3,2), imshow(I_sm3), title('Bilinear Interpolation');

    subplot(1,3,3), imshow(I_sm4), title('Bicubic Interpolation');

    Note that in the case of shrinking using either bilinear or bicubic interpolation, theimresizefunction automatically applies a low-pass filter to the image (whose default size is 1111), slightly blurring it before the image is interpolated. This helps to reduce the effects of aliasing during resampling

  • 2. Fungsi flipud dan fliplr 1. Tutup semua gambar dan bersihkan semua variable yang telah digunakan.

    I = imread('cameraman.tif');

    J = flipud(I);

    K = fliplr(I);

    subplot(1,3,1), imshow(I), title('Original image')

    subplot(1,3,2), imshow(J), title('Flipped upside-down')

    subplot(1,3,3), imshow(K), title('Flipped left-right')

    3. Fungsi imrotate

    1. Tutup semua gambar yang telah terbuka, bersihkan kembali variabelnya.

    2. Rotasikan gambar eight.tif dengan sudut 350

    I = imread('eight.tif');

    I_rot = imrotate(I,35);

    imshow(I_rot);

    amati ukuran gambar, (bilangan baris dan kolom)dari I_rot bandingkan dengan ukuran I .

    Mengapa mereka berbeda?

    Dapat juga menggunakan interplasi metode yang berbeda ketika melakukan perputaran image.

    3. Rotasikan gambar yang sama menggunakan biliner interpolation

    I_rot2 = imrotate(I,35,'bilinear');

    figure, imshow(I_rot2)

    Bagaimana biliner interpolation dapat memberikan effek pada rotasi gambar tersebut?

    4. Lakukan rotasi pada gambar yang sama, namun outputnya dilakukan crop

    I_rot3 = imrotate(I,35,bilinear,crop);

    figure, imshow(I_rot3)

    Bagaimana crop tersebut mempengaruhi ukuran dari keluaran nya?

  • 4. Image Resize GUI Untuk dapat mengubah ukuran dari citra, dapat dilakukan dengan cara sebagai berikut :

    1. Ketikkan pada command window untuk merubah current directory matlab dan metode wizard

    >> cd 'E:\image'

    >> guide

    2. Selanjutnya piih blank gui dan pilih ok

    3. Buat panel pada lembaran kerja dan pada property dan atur property inspector pada gambar

    dibawah ini.

  • 4. Selanjutnya tambahkan static text untuk nama citra dan lokasi.

    5. Tambahkan edit text untuk penamaan citra

  • 6. Lakukan hal yang sama untuk lokasi.

    7. Selanjutnya, tambahkan tombol push button untuk browser image. Kemudian atur properti

    inpectornya.

  • 8. Tambahkan Pup up menu, atur properti inspectornya.

    9. Hasil Akhiar GUI

  • 10. Simpan menjadi Image_resize.

    11. Tambahkan script dibawah ini :

    a. Fungsi image resize

    function image_resize_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 image_resize (see VARARGIN)

    % Choose default command line output for image_resize handles.output = hObject; set(handles.axes1,'Visible','off');

    b. Executes on button press in loadimage.

    % --- Executes on button press in loadimage. function loadimage_Callback(hObject, eventdata, handles) global x [filename, pathname] = uigetfile('*.jpg','load image'); if filename==0 msgbox ('Silahkan pilih citra','Error','Error') return end

    x=imread(filename);

  • axes(handles.axes1);

    imshow(x);title('Loaded Image');

    set(handles.edit1,'string',filename); set(handles.edit2,'string',pathname);

    c. Executes on selection change in popupmenu1.

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

    % Hints: contents = get(hObject,'String') returns popupmenu1

    contents as cell array % contents{get(hObject,'Value')} returns selected item from

    popupmenu1 global x contents = get(hObject,'Value') switch contents case 1 y1=imshow(x); title('Ukuran gambar [1024*1024]') case 2 y2=imresize(x,[512 512]); imshow(y2); title ('Ukuran gambar [512*512]') case 3 y3=imresize(x,[256 256]); imshow(y3); title ('Ukuran gambar [256*256]') case 4 y4=imresize(x,[100 100]); imshow(y4); title ('Ukuran gambar [100*100]') case 5 y5=imresize(x,[50 50]); imshow(y5); title ('Ukuran gambar [50*50]') case 6 y6=imresize(x,[10 10]); imshow(y6); title ('Ukuran gambar [10*10]') otherwise end

  • VI. GRAY-LEVEL TRANSFORMATIONS

    1. Jalankan Program MATLAB 7.10 pada desktop

    2. Kemudian setelah masuk ke program MATLAB, pilih File New GUI atau pada command

    windows ketikan guide

    3. Setelah tampil GUIDE quick start, seperti gambar dibawah ini, pilih Blank GUI dan simpan dengan

    nama aplikasi_citra.

    2. Selanjutnya akan muncul tampilan jendela GUIDE layout editor untuk mempermudah kita dalam

    membuat antar muka grafis dan m editor.

    3. Rancanglah form seperti dibawah ini

  • 4. Pada axes1 di menu property inpector, hapus nilai Xtick dan Ytick

    5. Untuk dapat membuka file gambar, tambahkan scrip berikut pada m editor.

    a. Pada buttom load tambahkan scriptnya :

  • b. Untuk reset

    c. Untuk Black and white

    d. Untuk Tombol Grayscale

  • e. Untuk slider

  • VII. HISTOGRAM PROCESSING

    Tujuan :

    - Mahasiswa dapat menampilkan histogram dari citra

    Objektif :

    - Belajar bagaimana menggunakan fungsi IPT imhist

    - Belajar bagaimana ploting dalam MATLAB sehingga dapat digunakan untuk melihat dan

    menganalisa data histogram

    -

    Prosedure :

    1. Tampilkan gambar dan histogram

    I = imread('circuit.tif');

    figure, subplot(2,2,1), imshow(I), title('Image')

    subplot(2,2,2), imhist(I,256), axis tight, title('Histogram')

    2. Pada langakh sebelumnya menampilkan citra histogram default dengan 256 bin. Bagaimana jika

    dirubah nilainya menjadi 64 dan 32

    subplot(2,2,3), imhist(I,64), axis tight, ...

    title(Histogram with 64 bins)

    subplot(2,2,4), imhist(I,32), axis tight, ...

    title(Histogram with 32 bins)

    3. Dapatkan nilai pada setiap bin dalam histogram untuk digunakan selanjutnya.

    c = imhist(I,32);

    We can now use the values incto display histogram using other plotting techniques. Naturally, the

    plot of a histogram displays the count of each bin, but it may be more relevant to plot each bins

    percentage. This can be done by normalizing the data, as shown in the next step.

    4. Normalisasi nilai c

    c_norm=c/numel(I);

    apa fungsi numel?

  • 5. Tutup semua gambar,

    6. Tampilkan semua data menggunakan char bar

    figure, subplot(1,2,1), bar_1 = bar(c);

    set(gca, 'XLim', [0 32], YLim, [0 max(c)]);

    In the previous step, we saw how the bar chart can be customized. In MATLAB, almost every object

    you create can be customized. When we create the bar chart, there is anaxesobject and a bar chart

    object displayed on theaxesobject. Here, the variablebar_1is set to the bar chartobject so that we

    can reference it later for further customization. Thesetfunction allows us to change settings of a

    particular object. The first parameter of thesetfunction is the object you wish to customize. In this

    case, the first object we customize isgca, which stands forget current axes. Here, we set the limits

    of theXandYaxes. Even though the limits have been set, the graph is still ambiguous because the

    tick marks on theXandYaxes do not reflect the limits.

    7. Limit kan nilainya

    set(gca, XTick, [0:8:32], YTick, ...

    [linspace(0,7000,8) max(c)]);

    Now the tick marks reflect the limits of the data. We used the set function to change settings of

    thecurrent axes, but we can just as easily use it to customize the bar chart

    8. Gunakan fungsi set untuk merubah bar histogram tersebut. Dan berikan judul pada graft tersebut.

    set(bar_1, FaceColor, r), title(Bar Chart

    9. Menampilkan normalisasi char bar dan megkostume tampilannya.

    subplot(1,2,2), bar_2 = bar(c_norm);

    set(gca, XTick, [0:8:32], YTick, ...

    [linspace(0,0.09,10) max(c_norm)])

    xlim([0 32]), ylim([0 max(c_norm)])

    title(Normalized Bar Chart)

    set(bar_2, FaceColor, g)

    10. Tutup semua gambar yang terbuka

    11. Tampilkan stem chart untuk histogram data normal dan standart

    figure,

    subplot(1,2,1), stem(c,'fill','MarkerFaceColor','red'), ...

    axis tight, title('Stem Chart')

    subplot(1,2,2), stem(c_norm,'fill','MarkerFaceColor','red'), ...

    axis tight, title('Normalized Stem Chart')

  • 12. Menampilkan plot graph histogram data normali dan standart

    figure, subplot(1,2,1), plot(c), axis auto, title('Plot Graph')

    subplot(1,2,2), plot(c_norm), axis auto, ...

    title('Normalized Plot Graph')

    VII. NEIGHBORHOOD PROCESSING

    1. SMOOTHING FILTERS IN THE SPATIAL DOMAIN

    Tujuan

    Tujuan dari tutorial ini adalah untuk belajar bagaimana menerapkan smoothing filter dalam tata

    ruang domain.

    Tujuan :

    Pelajari cara menggunakan fungsi fspecial untuk menghasilkan kernel yang umum digunakan.

    Df

    Df

    Prosedure :

    Pada materi ini, akan dibahas fungsi imfilter dan mengimlementasikan kedalam filter 3 x 3 (average).

    Kita bisa dengan mudah menghasilkan mask array (nilai sembilan, masing-masing sama dengan 1/9),

    tetapi IPT menawarkan fungsi yang akan membuat secara otomatis ini dan beberapa mask lain yang

    umum digunakan.

    1. Load gambar cameraman.jpg dan letakkan dalam subplot.

    I = imread(cameraman.tif);

    figure, subplot(1,2,1), imshow(I), title(Original Image);

    2. Buat filter secara outomatis menggunakan fungsi fspecial.

    fn = fspecial(average)

    Pertanyaan 1, Jelaskan nilai variable fn yang direpresentasikan?

  • Question 2 What other commonly used masks is thefspecialfunction capable

    of generating?

    3. Berikan filter cameraman dengan generated mask

    I_new = imfilter(I,fn);

    subplot(1,2,2), imshow(I_new), title(Filtered Image);

    Question 3 What was the effect of the averaging filter? The mean filter we just implemented

    was a uniform filterall coefficients were equivalent. The nonuniform version of the mean filter

    gives the center of the mask (the pixel in question) a higher weighted value, while all other

    coefficients are weighted by their distance from the center. This particular mask cannot be

    generated by the fspecialfunction, so we must create it ourselves.

    4. Create a nonuniform version of the mean filter.

    fn2=[121;242;121]

    fn2 = fn2 * (1/16)

    Recall that the uniform mean filter could be created by generating a 33 matrix of 1s, and then

    multiplying each coefficient by a factor of 1/9. In the nonuniform mean filter implantation

    above, note that the sum of all the original values in the filter equals 16this is why we divide

    each coefficient by 16 in the second step. Figure 10.14 illustrates the previous two masks we

    created

    5. Filter the original image with the new, nonuniform averaging mask

    I_new2 = imfilter(I,fn2);

    figure, subplot(1,2,1), imshow(I_new), title(Uniform Average);

    subplot(1,2,2), imshow(I_new2), title(Non-uniform Average);

    6. Create a Gaussian filter and display the kernel as a 3D plot

    fn_gau = fspecial(gaussian,9,1.5);

    figure, bar3(fn_gau,b), ...

  • title(Gaussian filter as a 3D graph);

    7. Filter the cameraman image using the Gaussian mask

    I_new3 = imfilter(I,fn_gau);

    figure

    subplot(1,3,1), imshow(I), title(Original Image);

    subplot(1,3,2), imshow(I_new), title(Average Filter);

    subplot(1,3,3), imshow(I_new3), title(Gaussian Filter);

    VIII. DETEKSI TEPI

    Tujuan

    Tujuan dari tutorial ini adalah untuk belajar bagaimana menerapkan deteksi tepi dan terkait teknik di MATLAB.

    Objektif

    Mempelajarin bagaimana penggunaan IPT edge function. Mengekplore edge deteki yang paling popoler : Roberts, Sobel, dan Prewitt. Jelajahi Marr-Hildreth Laplacian dari Gaussian detektor tepi. Jelajahi detektor tepi Canny. Mempelajari bagaimana menerapkan deteksi tepi dengan masker kompas (Kirsch dan

    Robinson).

    1. Edge Detection Using the Prewitt Operator 1. Load dan tampilkan test image.

    I = imread(lenna.tif);

    figure, subplot(2,2,1), imshow(I), title(Original Image);

    2. Extract t edges pada gambar mengguankan Prewitt operator

    [I_prw1,t1] = edge(I,prewitt);

    subplot(2,2,2), imshow(I_prw1), title(Prewitt, default thresh);

    Question 1 What does thet1variable represent? Edge detection methods are often compared by

    their ability to detect edges in noisy images. Let us perform the Prewitt operator on the Lenna

    image with additive Gaussian noise.

  • 3. Tambahkan noise pada test image dan extract its edges.

    I_noise = imnoise(I,gaussian);

    [I_prw2,t2] = edge(I_noise,prewitt);

    subplot(2,2,3), imshow(I_noise), title(Image w/ noise);

    subplot(2,2,4), imshow(I_prw2), title(Prewitt on noise);`

    Question 2 How did the Prewitt edge detector perform in the presence of noise (compared to

    no noise)?

    Question 3 Did MATLAB use a different threshold value for the noisy image?

    Question 4 Try using different threshold values. Do these different values affect the operators

    response to noise? How does the threshold value affect the edges of the object?

    2. Edge Detection Using the Sobel Operator 4. Extract the edges dari test image menggunakan Sobel edge detector.

    [I_sob1,t1] = edge(I,'sobel');

    figure, subplot(2,2,1), imshow(I), title('Original Image');

    subplot(2,2,2), imshow(I_sob1), title('Sobel, default thresh');

    5. Extract the edges dari test image dengan Gaussian noise using the Sobel edge

    [I_sob2,t2] = edge(I_noise,sobel);

    subplot(2,2,3), imshow(I_noise), title(Image w/ noise);

    subplot(2,2,4), imshow(I_sob2), title(Sobel on noise);

    Question 5 How does the Sobel operator compare with the Prewitt operator with and without noise?

    Another feature of the edge function isthinning, which reduces the thickness of the detected edges.

    Although this feature is turned on by default, it can be turned off, which results in faster edge detection.

    6. Extract the edges dari test image dengan the Sobel operator with no thinning.

    I_sob3 = edge(I,sobel,nothinning);

    figure, subplot(1,2,1), imshow(I_sob1), title(Thinning);

    subplot(1,2,2), imshow(I_sob3), title(No Thinning);

    Seperti yang Anda sudah tahu, operator Sobel benar-benar melakukan dua convolutions

    (horizontal dan vertikal). Gambar-gambar individu dapat diperoleh dengan menggunakan

    tambahan parameter output

    7. Tampilkan hasil convoultion horizontal dan vertical dari Sobel operator.

  • [I_sob4,t,I_sobv,I_sobh] = edge(I,sobel);

    figure

    subplot(2,2,1), imshow(I), title(Original Image);

    subplot(2,2,2), imshow(I_sob4), title(Complete Sobel);

    subplot(2,2,3), imshow(abs(I_sobv),[]), title(Sobel Vertical);

    subplot(2,2,4), imshow(abs(I_sobh),[]), title(Sobel

    Horizontal);

    Question 6 Why do we display the absolute value of the vertical and horizontal images?Hint:

    Inspect the minimum and maximum values of these images.

    Question 7 Change the code in step 7 to display thresholded (binarized), not thinned, versions

    of all images.

    As you may have noticed, theedgefunction returns the vertical and horizontal

    images before any thresholding takes place

    3. Edge Detection with the Roberts Operator 8. Extract the edges dari image asli menggunakan Roberts operator.

    I_rob1 = edge(I,roberts);

    figure

    subplot(2,2,1), imshow(I), title(Original Image);

    subplot(2,2,2), imshow(I_rob1), title(Roberts, default thresh);

    9. Apply the Roberts operator to a noisy image

    [I_rob2,t] = edge(I_noise,roberts);

    subplot(2,2,3), imshow(I_noise), title(Image w/ noise);

    subplot(2,2,4), imshow(I_rob2), title(Roberts on noise);

    Question 8 Compare the Roberts operator with the Sobel and Prewitt operators. How does it

    hold up to noise?

    Question 9 If we were to adjust the threshold, would we get better results whenfiltering the

    noisy image?

    Question 10 Suggest a method to reduce the noise in the image before performing edge

    detection

    4. Edge Detection with the Laplacian of a Gaussian Operato

    10. Extract edges dari original image menggunakan LoG edge detector

    I_log1 = edge(I,log);

    figure

  • subplot(2,2,1), imshow(I), title(Original Image);

    subplot(2,2,2), imshow(I_log1), title(LoG, default parameters);

    11. Apply the LoG edge detector to the noisy image

    [I_log2,t] = edge(I_noise,log);

    subplot(2,2,3), imshow(I_noise), title(Image w/ noise);

    subplot(2,2,4), imshow(I_log2), title(LoG on noise);

    5. Edge Detection with the Canny Operator

    12. Extract edges dari original image menggunakan Canny edge detector.

    I_can1 = edge(I,canny);

    figure

    subplot(2,2,1), imshow(I), title(Original Image);

    subplot(2,2,2), imshow(I_log1), title(Canny, default

    parameters);

    13. Apply the filter to the noisy image.

    [I_can2,t] = edge(I_noise,canny, [], 2.5);

    subplot(2,2,3), imshow(I_noise), title(Image w/ noise);

    subplot(2,2,4), imshow(I_can2), title(Canny on noise);

    Seperti yang Anda tahu, detektor Canny pertama berlaku fungsi smoothing Gaussian

    untuk gambar, diikuti oleh peningkatan tepi. Untuk mencapai hasil yang lebih baik pada

    berisik gambar, kita dapat meningkatkan ukuran smoothing filter Gaussian melalui

    thesigma parameter.

    14. Apply the Canny detector on the noisy image wheresigma=2.

    [I_can3,t] = edge(I_noise,canny, [], 2);

    figure

    subplot(1,2,1), imshow(I_can2), title(Canny, default

    parameters);

    subplot(1,2,2), imshow(I_can3), title(Canny, sigma = 2);

    15. Close semua gambar yang telah terbuka dan clear all variabel di workspace

    16. Load gambar mandrill dan perform Canny edge detector denga n parameter default

    I = imread(mandrill.tif);

    [I_can1,thresh] = edge(I,canny);

    figure

    subplot(2,2,1), imshow(I), title(Original Image);

    subplot(2,2,2), imshow(I_can1), title(Canny, default

    parameters);

  • 17. Periksa isi variable thresh

    18. Gunakan nilai batas yang lebih tinggi dari nilai variable theresh

    [I_can2,thresh] = edge(I, canny, 0.4);

    subplot(2,2,3), imshow(I_can2), title(Canny, thresh = 0.4);

    19. Gunakan nilai threashold lebih rendah dari nilai variable threst

    [I_can2,thresh] = edge(I, canny, 0.08);

    subplot(2,2,4), imshow(I_can2), title(Canny, thresh = 0.08);

    6. Edge Detection with the Kirsch Operator 20. Keluarkan semua gambar yang terbuka dan bersihkan variable di workspace

    21. Load gambar mandrill dan convert menjadi format double

    I = imread(mandrill.tif);

    I = im2double(I);

    Sebelumnya, ketika menggunakan fungsi edge, kita tidak perlu mengkonversi gambar untuk

    kelas double karena fungsi tersebut menangani hal tersebut secara otomatis.

    Karena sekarang kita menerapkan tepi detektor, kita harus melakukan konversi kelas untuk

    menangani nilai negatif (mencegah pemotongan yang tidak diinginkan).

    Selanjutnya menentukan delapan masker Kirsch. Untuk memudahkan pelaksanaan, Simpan

    kedelapan dalam matrik 3 3 8. Gambar 14.18 mengilustrasikan format penyimpanan ini

    22. Buat Kirsch masks dan simpan sebelum pengalokasian matrix

    k = zeros(3,3,8);

    k(:,:,1) = [-3 -3 5; -3 0 5; -3 -3 5];

    k(:,:,2) = [-3 5 5; -3 0 5; -3 -3 -3];

    k(:,:,3) = [5 5 5; -3 0 -3; -3 -3 -3];

    k(:,:,4) = [5 5 -3; 5 0 -3; -3 -3 -3];

    k(:,:,5) = [5 -3 -3; 5 0 -3; 5 -3 -3];

    k(:,:,6) = [-3 -3 -3; 5 0 -3; 5 5 -3];

    k(:,:,7) = [-3 -3 -3; -3 0 -3;5 5 5];

    k(:,:,8) = [-3 -3 -3; -3 0 5; -3 5 5];

  • Selanjutnya kita harus membelit setiap mask pada gambar, menghasilkan delapan gambar. Kami

    akan menyimpan gambar tersebut dalam matriks tiga dimensi seperti yang kita lakukan untuk

    masker. karena semua masker disimpan dalam satu matriks, kita dapat menggunakan

    perulangan melakukan semua delapan convolutions dengan garis kurang kode.

    23. Convolve each mask with the image using aforloop.

    I_k = zeros(size(I,1), size(I,2), 8);

    for i = 1:8

    I_k(:,:,i) = imfilter(I,k(:,:,i));

    End

    24. Tampilkan hasil gambar

    figure

    for j = 1:8

    subplot(2,4,j), imshow(abs(I_k(:,:,j)),[]), ...

    title([Kirsch mask , num2str(j)]);

    end

    25. Temukan nilai minimum

    I_kir = max(I_k,[],3);

    figure, imshow(I_kir,[]);

    26. Buat fungsi transformasi pada map imate kedalam rentangan dan transformasi

    m = 255 / (max(I_kir(:)) - min(I_kir(:)));

    I_kir_adj = uint8(m * I_kir);

    figure, imshow(I_kir_adj);

    Question 18 Why is it not necessary to scale this image (I_kir_adj) when displaying it?

  • Question 19 Make a copy of themandrillimage and add Gaussian noise to it. Then perform the

    Kirsch edge detector on it. Comment on its performance when noise is present

    7. Edge Detection with the Robinson Operator 27. Generate the Robinson masks

    r = zeros(3,3,8);

    r(:,:,1) = [-1 0 1; -2 0 2; -1 0 1];

    r(:,:,2) = [0 1 2; -1 0 1; -2 -1 0];

    r(:,:,3) = [1 2 1;0 0 0;-1 -2 -1];

    r(:,:,4) = [2 1 0; 1 0 -1; 0 -1 -2];

    r(:,:,5) = [1 0 -1; 2 0 -2; 1 0 -1];

    r(:,:,6) = [0 -1 -2;1 0 -1;2 1 0];

    r(:,:,7) = [-1 -2 -1;0 0 0;1 2 1];

    r(:,:,8) = [-2 -1 0; -1 0 1;0 1 2];

    28. Filter gambar dengan outpu ttampila delapan Robinson masks

    I_r = zeros(size(I,1), size(I,2), 8);

    for i = 1:8

    I_r(:,:,i) = imfilter(I,r(:,:,i));

    end

    figure

    for j = 1:8

    subplot(2,4,j), imshow(abs(I_r(:,:,j)),[]), ...

    title([Robinson mask , num2str(j)]);

    end

    29. Kalkulasikan nilai maksimum dari kedelapan gambar dan tampilkan hasilnya

    I_rob = max(I_r,[],3);

    figure, imshow(I_kir,[]);

    IX. PERBAIKAN KUALITAS CITRA Citra direpresentasikan dalam bentuk matrik. Berbagai macam citra disimpan menggunakan

    format berbeda seperti bmp, png, gif, jpg atau format lainnya. Tidak semua citra yang diperoleh

    menggunakan kamera atau device lain menghasilkan citra berkuatlitas yang disebabkan oleh

    factor pencahayaan, kondisi objek maupun kamera yang digunakan, sehingga perlu perbaikan

    kualitas citra menggunakan beberapa metode, diantaranya adalah :

  • 1. Operasi titik, perbaikan dilakukan menggunakan operasi piksel

    a. Penambahan dan pengurangan intensitas citra

    b. Histogram

    2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik

    a. Low Pass Filter

    b. High Pass Filter

    c. Median Filter

    1.Operasi titik penambahan dan pengurangan intensitas Operasi ini dilakukan dengan melakukan manipulasi nilai gray citra pada setiap titik, misalkan suatu

    citra cameraman.tif akan ditambah kecarahannya atau dikurangi kecerahannya (misalkan untuk setiap

    piksel akan ditambah 100 untuk menambah kecerahan dan mengurangi 50 untuk mengurangi

    kecerahan citra), maka code dalam matlab dapat dilihat pada berikut ini

    a=imread('cameraman.tif');

    b=a+100;

    c=a-50;

    imshow([a b c]);

    a.Operasi titik melalui ekualisasi histogram

    Perbaikan citra menggunakan histogram merupakan cara yang paling banyak digunakan oleh pada

    peneliti. Pada prinsipnya ekualisasi histogram melakukan pemerataan dist ribusi gray yang ada pada

    citra sebagaimana terlihat pada code berikut ini

    a=imread('cameraman.tif');

    b=histeq(a);

    imshow([a b]);

    2. Operasi ruang, perbaikan dilakukan menggunakan mask matrik LPF Model perbaikan citra tersebut dengan memanfaatkan mask matrik yang didefinisikan terlebih

    dahulu sebelum operasi konvolusi dilakukan.

    Mask LPF berfungsi untuk meratakan/menghilangkan noise. Model operasi ruang tersebut

  • adalah menggunakan model konvolusi. Berikut merupakan code nya

    a=imread('cameraman.tif');

    LPF=ones(3)/9;

    J=conv2(double(a),LPF,'same');

    imshow(uint8(J))

    Perbedaan yang sangat signifikan dapat dilihat dengan mengubah ukuran matrik mask yang

    digunakan, misalkan menggunakan matrik mask ukuran 9x9 sebagaimana pada code program

    berikut

    a=imread('cameraman.tif');

    LPF=ones(9)/81;

    J=conv2(double(a),LPF,'same');

    imshow(uint8(J))

    Citra yang diproses dari code program tersebut akan terlihat lebih blur, sehingga model mask

    LPF akan lebih tepat jika digunakan untuk menghilangkan noise citra.

    a. Operasi ruang, perbaikan dilakukan menggunakan mask matrik HPF

    Mask High Pass Filter mempunyai fungsi yang berbeda dengan Low Pass Filter LPF. Untuk mask HPF

    berfungsi menajamkan tepi objek, adapun mask matrik yang digunakan mempunyai nilai negative pada

    tepi-tepinya

    a=imread('cameraman.tif');

    HPF=ones(3)*-1;

    HPF(2,2)=9;

    J=conv2(double(a),HPF,'same');

    imshow([a uint8(J)]);

  • Mask matrik lain untuk HPF dapat dicoba menggunakan mask berikut ini

    b.Operasi ruang, perbaikan dilakukan menggunakan median filter

    Median filter adalah dengan meletakkan nilai tengah setelah nilai piksel diurutkan secara

    increasing. Metode ini biasanya digunakan untuk menghilangkan noise pada citra. Contoh program

    dapat dilihat pada code berikut ini

    a=imread('cameraman.tif');

    MED = medfilt2(a,[3 3]);

    imshow([a MED]);

    Untuk melihat efek dari median filter, coba gunakan citra yang ada noisenya atau membuat citra sendiri

    dan diberi noise. Kemudian operasikan menggunakan median filter