Pengolahan Citra Digital dengan Matlab – Enhancement

By | January 15, 2021
Print Friendly, PDF & Email
4,315 Views

Sinopsis

Pengolahan citra digital tidak lepas dari operasi perbaikan kualitas citra/gambar seperti perataan histogram, kontras warna, menghilangkan noise. Topik pembahasan ini melibatkan operasi array ditingkat dasar seperti perubahan kontras, perataaan histogram, rotasi, dan translasi.

Pengubahan Kontras Gambar

Operasi Image Enhancement merupakan operasi dasar yang sering ditemui dalam pengolahan citra digital, dalam pembahasan sebelumnya setiap gambar digital akan direpresentasikan dalam sebuah array 2D (grayscale) ataupun 3D (true color – RGB). Kalian bisa mencoba operasi sederhana seperti penambahan, pengurangan, perkalian, serta pembagian terhadap sebuah gambar.
clc;clear all;close all;
I = imread('panoramic.jpg');
a = I+100;
b = I-100;
c = I*2;
d = I/2;
figure
imshow(I),title('Gambar Asli');
 
figure,
subplot(2,2,1),imshow(a),title('Tambah');
subplot(2,2,2),imshow(b),title('Kurang');
subplot(2,2,3),imshow(c),title('Kali');
subplot(2,2,4),imshow(d),title('Bagi');

Dengan type data uint8, maka batasan nilai dari 0 sampai dengan 255 saja sehingga nilai-nilai diatas atau dibawah nilai rentang tersebut akan dibuat 0 atau pun 255. Bisa kalian buktikan dengan kode dibawah ini yang telah dicasting ke uint8
>> a=uint8(200+100)
a =
  uint8
   255
>>

Mengubah Format Truecolor menjadi Grayscale

Setiap gambar terdiri dari 4 layer secara yaitu 1 Layer transparant dan 3 layer warna (RGB) atapun hanya 1 layer grayscale saja (monocrome). Tapi secara umum dalam format penyimpanan *.jpg *.bmp hanya terdiri dari format RGB ataupun grayscale. Pada sesi sebelumnya kalian sudah belajar membaca gambar dan menampilkannya dalam figure. Gambar Panoramic diatas adalah truecolor RBG, bisa kalian cek akan terdiri dari 3 layer

>> whos I
  Name        Size                Bytes  Class    Attributes

  I         296x399x3            354312  uint8

Atau dengan perintah ndims()

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    disp('truecolor RGB');
else
    disp('grayscale');
end

hasil

truecolor RGB

Rumus umum pengubahan RGB to Grayscale yaitu

    \[0.2989*R+0.5870*G+0.1140*B\]

Kalian bisa bisa terapkan dalam function seperti berikut

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    disp('truecolor RGB');
else
    disp('grayscale');
end
 
gray = ubahkegray(I);
figure
imshow(gray);

 
 
function gray = ubahkegray(RGB)
    RGB = double(RGB);
    gray = 0.2989*RGB(:,:,1)+0.5870*RGB(:,:,2)+0.1140 * RGB(:,:,3);
    gray = uint8(gray);
    
end

Atau kalian langsung menggunakan saja function built in Matlab rgb2gray()

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    disp('truecolor RGB');
else
    disp('grayscale');
end
 
gray = rgb2gray(I);
 
figure
imshow(gray);

Distribusi Nilai Pixel / Histogram

Setiap gambar (format grayscale) akan mudah terlihat distribusi pixel atau disebut dengan histogram. Perhitungan histogram seperti berikut terdiri dari range 1 sampai dengan 5

Kalian bisa menggunakan kode berikut untuk menghitung dan menampilkan dalam grafik.

clc;clear all;close all;
a = [4,6,3,1,1,2,4,5,5,5,5,5];
frekuensi = [];
for i=1:6
    frekuensi(i)= sum(sum(a==i));
end
figure
bar(frekuensi)
xlabel('Nilai')
ylabel('Frekuensi')
title('Histogram')

Atau menggunakan function Matlab histcounts()

[frekuensi] = histcounts(a,6)

hasil

frekuensi =

     2     1     1     2     5     1

Setelah kalian tahu kegunaan dari histogram, kalian dapat menampilkan sebuah histogram gambar dengan function imhist()

clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    gray = rgb2gray(I);
else
    gray = I;
end
gray = rgb2gray(I);
figure
subplot(1,2,1),imshow(gray),title('Gambar')
subplot(1,2,2),imhist(gray),title('Histogram')

Perataan Histogram / Histogram Equalization

Perataan histogram bertujuan untuk meratakan distribusi agar setiap gambar yang dihasilkan mempunyai nilai kontras yang lebih seragam. Penerapan perataan histogram menggunakan function histeq() histogram equalization.
clc;clear all;close all;
I = imread('panoramic.jpg');
if ndims(I)==3
    gray = rgb2gray(I);
else
    gray = I;
end
gray = rgb2gray(I);
perataan = histeq(gray);
figure
subplot(2,2,1),imshow(gray),title('Gambar')
subplot(2,2,2),imhist(gray),title('Histogram')
subplot(2,2,3),imshow(perataan),title('Perataan Histogram')
subplot(2,2,4),imhist(perataan),title('Perataan Histogram')

Kalian bisa melihat perbedaan penggunaan perataan histogram memberikan perbaikan kontras sehingga bagian tertentu yang berwarna gelap akan tampak cerah.

Format Color Space HSV

Selain format RGB (format layar komputer, kalau kalian menggunakan pengolah grafis ada CMYK yaitu format printer) ada lagi format penyajian HSV (ref:https://id.wikipedia.org/wiki/HSL_dan_HSV) atau HSL yang merupakan kepanjangan dari HSL (hue, saturation, lightness) dan HSV (hue, saturation, value)

Sebagian besar televisi, layar komputer, dan proyektor menghasilkan warna dengan menggabungkan cahaya merah, hijau, dan biru dalam berbagai intensitas — apa yang disebut warna primer aditif RGB. Campuran yang dihasilkan dalam ruang warna RGB dapat mereproduksi berbagai warna (disebut gamut)

Kalian bisa pelajari di ref: https://en.wikipedia.org/wiki/HSL_and_HSV. Di Matlab untuk mengubah RGB ke HSV menggunakan function rgb2hsv()

clc;clear all;close all;
I = imread('panoramic.jpg');
HSV = rgb2hsv(I);
figure
subplot(1,2,1),imshow(I),title('RBG')
subplot(1,2,2),imshow(HSV),title('HSV')

Koreksi Gamma (Gamma Correction)

Kontras dapat diperbaiki menggunakan faktor koreksi gamma y dengan rumus umum

    \[U=U^{1/y}\]

 Semakin kecil nilai y maka akan semakin terang

clc;clear all;close all;
I = imread('bike.jpg');
if ndims(I)==3
    gray = rgb2gray(I);
else
    gray = I;
end
gray = rgb2gray(I);
y = 1/0.9;
U = uint8(double(gray).^y);
 
y2 = 1/0.8;
U2 = uint8(double(gray).^y2);
 
gabung = [gray;U;U2];
 
figure
imshow(gabung)

 

Agar lebih kalian bisa hstack array saja sehingga hemat ruang [a;b;c], kalian bisa pelajari lagi ya disini Biar kalian lebih jelas, bisa koq diterapkan true color.

clc;clear all;close all;
I = imread('bike.jpg');
y = 1/0.9;
U = uint8(double(I).^y);
 
y2 = 1/0.8;
U2 = uint8(double(I).^y2);
 
gabung = [I;U;U2];
 
figure
imshow(gabung)

ternyata menggunakan faktor gamma untuk gambar diatas akan terlihat bagus dengan nilai y=0.9 ya. Pengolahan Citra Digital dengan Matlab – Enhancement dengan teknik faktor gamma bisa kalian gunakan untuk mengubah kontras secara lebih baik. Semua kegiatan diatas sering disebut operasi titik yang berarti faktor nilai tetangga tidak berpengaruh, nah pada pembahasan selanjutnya kalian akan belajar mengenai operasi spasial dengan teknik filtering/konvolusi. Konvolusi/Convolution sering disebut juga operasi penapisan.

Operasi Penapisan / Fiiltering

Operasi penapisan/filtering menggunakan teknik konvolusi dengan melibatkan sebuah filter/kernel atau sering disebut dengan istilah lain yaitu masking, template,  structure element (pada operasi morfologi) agar lebih mudah dalam buku disebut kernel saja.  Ukuran kernel paling kecil berupa array 2D yaitu : 2×2, 3×3, 5×5 square array, sedangkan jenis kernel bisa dikaitkan dengan output yang dihasilkan seperti

1.    Kernel mean

2.    Kernel gaussian

3.    Kernel low-pass

4.    Kernel high pass

Kalau kalian ingin tahu cara kerja konvolusi bisa kunjungi link berikut https://www.softscients.web.id/2018/08/bab-4-operasi-dasar-olah-citra-digital.html

Daripada ditulis ulang, kalian bisa pelajari sendiri saja, oiya kalian bisa koq langsung menggunakan function di matlab yaitu conv2 semuanya menggunakan type double, jadi kalian jangan lupa untuk melakukan casting data dulu.

tapis mean

    \[X= \begin{pmatrix} \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9} \\ \end{pmatrix} \]

tapis low-pass

    \[X= \frac{1}{9} \begin{pmatrix} 1 & 1 & 1\\ 1 & 1 & 1\\ 1 & 1 & 1\\ \end{pmatrix} \]

    \[X= \frac{1}{8} \begin{pmatrix} 1 & 3 & 1\\ 3 & 16 & 3\\ 1 & 3 & 1\\ \end{pmatrix} \]

tapis high-pass

    \[X= \frac{1}{9} \begin{pmatrix} -1 & -1 & -1\\ -1 & 8 & -1\\ -1 & -1 & -1\\ \end{pmatrix} \]

    \[X= \begin{pmatrix} 0 & -1 & 0\\ -1 & 4 & -1\\ 0 & -1 & 0\\ \end{pmatrix} \]

tapis sharpen

    \[X= \begin{pmatrix} 0 & -1 & 0\\ -1 & 5 & -1\\ 0 & -1 & 0\\ \end{pmatrix} \]

tapis blur

    \[X= \begin{pmatrix} 1 & 2 & 3 & 2 & 1\\ 2 & 4 & 5 & 4 & 2\\ 3 & 5 & 6 & 5 & 3\\ 2 & 4 & 5 & 4 & 2\\ 1 & 2 & 3 & 2 & 1\\ \end{pmatrix} \]

tapi emboss

    \[X= \begin{pmatrix} -2 & -1 & 0 \\ -1 & 1 & 1 \\ 0 & 1 & 2 \\ \end{pmatrix} \]

Kernel Sharpening

Kalian bisa sharpening untuk menajamkan warna

clc;clear all;close all;
I = imread('panoramic.jpg');
kernel_sharpen = 0.45*[  0,-1,0;
                        1,5,-1;
                        0,-1,0];
I = double(I);
for i=1:3
    output(:,:,i) = conv2(I(:,:,i),kernel_sharpen,'same');
end
 
output = uint8(output);
imshow([I,output]);

 

Kernel Blur

Kalian juga bisa menggunakan kernel blur seperti berikut

clc;clear all;close all;
I = imread('panoramic.jpg');
kernel_blur = 0.01.*[1,2,3,2,1;
                2,4,5,4,2;
                3,5,6,5,3;
                2,4,5,4,2;
                1,2,3,2,1]
I = double(I);
for i=1:3
    output(:,:,i) = conv2(I(:,:,i),kernel_blur,'same');
end
 
output = uint8(output);
imshow([I;output]);

Semua jenis kernel diatas bisa kalian coba dengan mengatur nilai array kernelnya, selain menggunakan  function conv2, kalian bisa menggunakan function yang telah disediakan khusus fspecial, ada banyak sekali variasinya yaitu

  1. h = fspecial(type)
  2. h = fspecial(‘average’,hsize)
  3. h = fspecial(‘disk’,radius)
  4. h = fspecial(‘gaussian’,hsize,sigma)
  5. h = fspecial(‘laplacian’,alpha)
  6. h = fspecial(‘log’,hsize,sigma)
  7. h = fspecial(‘motion’,len,theta)
  8. h = fspecial(‘prewitt’)
  9. h = fspecial(‘sobel’)

 

 

 

 

Leave a Reply