Sabtu, 15 Juli 2023

GET TIME eXCEL

 [namafile,direktori]=uigetfile({'*.xls;*.xlsx','file excel(*.xls,*.xlsx)';'*.*','semua file(*.*)'},'buka file excell');

path=fullfile(direktori,namafile);

[A0,B,C]=xlsread(path);%A0=96x8

bar=size(C,1);%97x9

col=size(C,2);%9

kolomA=size(A0,2);%8

if kolomA==8    

    data=C(2:bar,3:col);%TGL JAM..... 96x7             

    gjam = datetime(A0(:,1), 'ConvertFrom','excel', 'Format','HH:mm');%96x1 datetime

    gtanggal=C(2:bar,1);%96x1             12794  cell  

    data=[gtanggal, cellstr(gjam), data];% datanew      96x9   cell  

    judul=C(1,:);

    judul2=[C(1,1:2),C(1,4),C(1,5)];%  'Waktu'    'JAM'     'Current (A)'    'Daya Aktif (Watt)'

          A=(A0);%no 1 3 5, lost 4  2976x14  

          minX1=min(A(:,4));

          maxX1=max(A(:,4));

          minX2=min(A(:,3));

          maxX2=max(A(:,3)); 

          sel1=maxX1-minX1;

          sel2=maxX2-minX2;

         normalize={}; 

        for i=1:bar-1

            v1=((A(i,2))-minX1)/(maxX1-minX1);

            v2=((A(i,3))-minX2)/(maxX2-minX2); 

            gab=[v1,v2];

            normalize(i,1)={v1};

            normalize(i,2)={v2};

        end

        data2=[gtanggal, cellstr(gjam), normalize];

        normalize=data2;

            

          nom=linspace(1,bar-1,bar-1);

            set(handles.uitable1,'data',data,'ColumnName',judul,'RowName',nom);

            set(handles.uitable1,'Userdata',data);

                    var1=['Dimensi DataSet ' num2str(bar-1) ' x '  num2str(col)  ' BK'];

                    set(handles.txt1,'String',var1);


          baris={'Min','Max','Sel'};

          judulMinMax={'Current (A)','Daya Aktif (Watt)'};

          dataminmax=[minX1,minX2;

              maxX1,maxX2;

              sel1,sel2

              ];

            

            set(handles.uitable2,'data',dataminmax,'ColumnName',judulMinMax,'RowName',baris);

            set(handles.uitable2,'Userdata',dataminmax);

            

            save data.mat data;

            save dataminmax.mat dataminmax;

            save normalize.mat normalize;

            

            

            graph=cell2mat(data(:,5));

            axes(handles.axes_grafik);

            plot(graph);

Minggu, 02 Juli 2023

Matlab Outlier Simulasi

 



 
function btnBrowse_Callback(hObject, eventdata, handles) 

[namafile,direktori]=uigetfile({'*.xls;*.xlsx','file excel(*.xls,*.xlsx)';'*.*','semua file(*.*)'},'buka file excell');
path=fullfile(direktori,namafile);
[A0,B,C]=xlsread(path); 
global judul;
set(handles.edt1,'String',path);
bar=size(C,1);%151
col=size(C,2);
    data=C(2:bar,1:col);
  A=C(2:bar,3:col);
  A=cell2mat(A);
  minX1=min(A(:,1));
  maxX1=max(A(:,1));
  minX2=min(A(:,2));
  maxX2=max(A(:,2));
  minX3=min(A(:,3));
  maxX3=max(A(:,3));
  minX4=min(A(:,4));
  maxX4=max(A(:,4));
  minX5=min(A(:,5));
  maxX5=max(A(:,5));
  minX6=min(A(:,6));
  maxX6=max(A(:,6));
  minX7=min(A(:,7));
  maxX7=max(A(:,7));
  sel1=maxX1-minX1;
  sel2=maxX2-minX2;
  sel3=maxX3-minX3;
  sel4=maxX4-minX4;
  sel5=maxX5-minX5;
  sel6=maxX6-minX6;
  se17=maxX7-minX7;
  
  
  nom=linspace(1,bar-1,bar-1);
    set(handles.uitable1,'data',data,'ColumnName',judul,'RowName',nom);
    set(handles.uitable1,'Userdata',data);
            var1=['Dimensi DataSet ' num2str(bar-1) ' x '  num2str(col)  ' BK'];
            set(handles.txt1,'String',var1);
  
  baris={'Min','Max','Sel'};
  judul2=judul(1,3:9);
  dataminmax=[minX1,minX2,minX3,minX4,minX5,minX6,minX7;
      maxX1,maxX2,maxX3,maxX4,maxX5,maxX6,maxX7;
      sel1,sel2,sel3,sel4,sel5,sel6,se17
      ];
  
    set(handles.uitable2,'data',dataminmax,'ColumnName',judul2,'RowName',baris);
    set(handles.uitable2,'Userdata',dataminmax);
    save data.mat data;
    save dataminmax.mat dataminmax;
    

function btnClear_Callback(hObject, eventdata, handles)
 set(handles.edt1,'String','');
 set(handles.txt1,'String','Dimensi Tabel AxB');
 set(handles.edt1,'String','');
 set(handles.edt1,'String','');
 
set(handles.edit14,'String','');
set(handles.edit15,'String','');
set(handles.edit16,'String','');
set(handles.edCluster,'String','');
set(handles.edOut,'String','');
set(handles.edi1,'String','');
set(handles.edi2,'String','');
set(handles.edi3,'String','');
set(handles.edi4,'String','');
set(handles.edi5,'String','');
set(handles.edi6,'String','');
set(handles.edi7,'String','');
set(handles.edn1,'String','');
set(handles.edn2,'String','');
set(handles.edn3,'String','');
set(handles.edn4,'String','');
set(handles.edn5,'String','');
set(handles.edn6,'String','');
set(handles.edn7,'String','');

 set(handles.uitable1,'data',[],'ColumnName',[],'RowName',[]);
 set(handles.uitable1,'Userdata',[]); 
 set(handles.uitable2,'data',[],'ColumnName',[],'RowName',[]);
 set(handles.uitable2,'Userdata',[]); 
 set(handles.uitable3,'data',[],'ColumnName',[],'RowName',[]);
 set(handles.uitable3,'Userdata',[]); 
set(handles.uitable5,'data',[],'ColumnName',[],'RowName',[]);
set(handles.uitable5,'Userdata',[]); 

%axes(handles.axes2);
cla(handles.axes2,'reset');
cla(handles.axes3,'reset');


function btnNorm_Callback(hObject, eventdata, handles) 
% data=   get(handles.uitable1,'Userdata');
% dminmax= get(handles.uitable2,'Userdata');
load data.mat;
load dataminmax.mat;

minX1=dataminmax(1,1);
maxX1=dataminmax(2,1);
minX2=dataminmax(1,2);
maxX2=dataminmax(2,2);
minX3=dataminmax(1,3);
maxX3=dataminmax(2,3);
minX4=dataminmax(1,4);
maxX4=dataminmax(2,4);
minX5=dataminmax(1,5);
maxX5=dataminmax(2,5);
minX6=dataminmax(1,6);
maxX6=dataminmax(2,6);
minX7=dataminmax(1,7);
maxX7=dataminmax(2,7);

%norm={}; 
normalize=[];
dataAsli=data;%1754x9cell
bar=size(data,1);
col=size(data,2);
data=dataAsli(:,3:col);
 

for i=1:bar
    v1=(cell2mat(data(i,1))-minX1)/(maxX1-minX1);
    v2=(cell2mat(data(i,2))-minX2)/(maxX2-minX2);
    v3=(cell2mat(data(i,3))-minX3)/(maxX3-minX3);
    v4=(cell2mat(data(i,4))-minX4)/(maxX4-minX4);
    v5=(cell2mat(data(i,5))-minX5)/(maxX5-minX5);
    v6=(cell2mat(data(i,6))-minX6)/(maxX6-minX6);
    v7=(cell2mat(data(i,7))-minX7)/(maxX7-minX7);
    
    %gab=[{v1},{v2},{v3},{v4},{v5},{v6},{v7}];
    gab=[v1,v2,v3,v4,v5,v6,v7];
    normalize(i,:)=gab;
end
  nom=linspace(1,bar,bar);
  global judul;
  judul2=judul(1,3:9);
    set(handles.uitable3,'data',normalize,'ColumnName',judul2,'RowName',nom);
    set(handles.uitable3,'Userdata',normalize); 
    save normalize.mat normalize;
 

======

 
function uitable1_CellSelectionCallback(hObject, eventdata, handles)
try
data    = get(handles.uitable1, 'Data');
index   = eventdata.Indices; 

R= eventdata.Indices(1);
C= eventdata.Indices(2);
mdata=data(R,:);
D1=cell2mat(mdata(1));
D2=cell2mat(mdata(2));
D3=cell2mat(mdata(3));
D4=cell2mat(mdata(4));
D5=cell2mat(mdata(5));
D6=cell2mat(mdata(6));
D7=cell2mat(mdata(7));
D8=cell2mat(mdata(8));
D9=cell2mat(mdata(9));

load dataminmax.mat;

minX1=dataminmax(1,1);
maxX1=dataminmax(2,1);
minX2=dataminmax(1,2);
maxX2=dataminmax(2,2);
minX3=dataminmax(1,3);
maxX3=dataminmax(2,3);
minX4=dataminmax(1,4);
maxX4=dataminmax(2,4);
minX5=dataminmax(1,5);
maxX5=dataminmax(2,5);
minX6=dataminmax(1,6);
maxX6=dataminmax(2,6);
minX7=dataminmax(1,7);
maxX7=dataminmax(2,7);
 
v1=(D3-minX1)/(maxX1-minX1);
v2=(D4-minX2)/(maxX2-minX2);
v3=(D5-minX3)/(maxX3-minX3);
v4=(D6-minX4)/(maxX4-minX4);
v5=(D7-minX5)/(maxX5-minX5);
v6=(D8-minX6)/(maxX6-minX6);
v7=(D9-minX7)/(maxX7-minX7);

set(handles.edi1,'String',num2str(D3));
set(handles.edi2,'String',num2str(D4));
set(handles.edi3,'String',num2str(D5));
set(handles.edi4,'String',num2str(D6));
set(handles.edi5,'String',num2str(D7));
set(handles.edi6,'String',num2str(D8));
set(handles.edi7,'String',num2str(D9));

set(handles.edn1,'String',num2str(v1));
set(handles.edn2,'String',num2str(v2));
set(handles.edn3,'String',num2str(v3));
set(handles.edn4,'String',num2str(v4));
set(handles.edn5,'String',num2str(v5));
set(handles.edn6,'String',num2str(v6));
set(handles.edn7,'String',num2str(v7));

load data.mat;
 data_awal=data(:,3:9);
 data_awal = cell2mat(data_awal);
 max_data = max(data_awal);
 min_data = min(data_awal);
 
cntr_baru=get(handles.uitable5,'Userdata');
myori=[D3,D4,D5,D6,D7,D8,D9];
mydata=[v1,v2,v3,v4,v5,v6,v7];

Bclus=str2num(get(handles.edCluster,'String'));

r=0.5;
sigmascluster = (r .* (max_data - min_data)) / sqrt(8);
sb_temp = sigmascluster.^2;
sb = 2.*sb_temp;

%derajat keanggotaan tiap data pada tiap klaster
[n,m]=size(mydata);
hasil=[]; 
    for j = 1:m
        for k = 1:Bclus
            %hasil(j,k)=(((mydata(1,j)-cntr_baru(k,j)).^2)./sb(j)); 
            hasil(j,k)=(((myori(1,j)-cntr_baru(k,j)).^2)./sb(j)); 
        end
    end 
%whos hasil % 7x8
su = sum(hasil) ;%1x8
msu=min(su);
index=0;
for i =1: Bclus 
    if msu==su(1,i)
        index=i;
        break;
    end
end

set(handles.edOut,'String',num2str(index));

catch 
 disp('menunggu proses....');
end

 
function uitable5_CellSelectionCallback(hObject, eventdata, handles)
CA=handles.CA;
CN=handles.CN;

try
data    = get(handles.uitable5, 'Data');
index   = eventdata.Indices; 

R= eventdata.Indices(1);
C= eventdata.Indices(2);
mdata=data(R,:);
index=R;%cell2mat(mdata(8));
TA=CA{index};
psn=['List Data Asli Cluster ' num2str(index) ' (' num2str(size(TA,1)) ')'];
disp(psn);
disp(TA);

TN=CN{index};
psn=['List Data Normalisasi Cluster ' num2str(index) ' (' num2str(size(TN,1)) ')'];
disp(psn);
disp(TN);

catch
   disp('Menunggu Proses Data....'); 
end
guidata(hObject,handles);


###############


dataPie=[];
explode=[];
Labels=[];
for i = 1:G
    ind{i} = idx == i;
    C_norm{i}=N(idx==i,:); %menampilkan data normalisasi sesuai cluster
    C{i} = datareal(idx==i,:);  %menampilkan nama kelurahan sesuai clusternya
    CA{i} = data_awal(idx==i,:) ;
    C_stat{i} = stat(CA{i}); %menampilkan stat setiap cluster
    cSSE{i} = hitung_sse(C_norm,cntr,i);
    cMAE{i} = hitung_mae(C_norm,cntr,i);
    
    [b,c]=size(C{i});
    dataPie(1,i)=b;
    Ex=1;
    if i>3
        Ex=0;
    end
    explode(1,i)=Ex;
    Labels{i}=['C' num2str(i)];
    psn1=['Cluster ke ' num2str(i)];
    disp(psn1);
    psn2=['Banyak Data ' num2str(b) ' Item'];
    disp(psn2);
    disp('Data Statistik:');
    disp(C_stat{i});
    disp('Nilai SSE:');
    disp(cSSE{i});
    disp('Nilai MAE:');
    disp(cMAE{i});
    disp('--------------------------------');
end
axes(handles.axes2);
pie(dataPie,Labels); 

handles.CA= C;
handles.CN= C_norm;
handles.idx=idx;
guidata(hObject,handles);

=========

 hold on

    scatter3(cntr1,cntr2,cntr3);

    xlabel(label1); ylabel(label2); zlabel(label3);

    title('Visualisasi Custer Terhadap 3 Variabel')

    

    hold off

    

    rotate3d(handles.axes3,'on');

Jumat, 24 Maret 2023

Image Processing From Zero to One :1

March 2023

IP-Series

Introduction
Pengantar Pengolahan Citra

___

Oleh Riadi Marta Dinata, S.Kom., M.Kom.

PENDAHULUAN

Perkembangan teknologi yang pesat membuat segala sesuatu menjadi jauh lebih mudah serta praktis. Banyaknya temuan baru di dunia teknologi mempermudah berbagai macam aktivitas yang dilakukan dalam keseharian manusia. 

Misalnya, mudahnya mengakses informasi di berbagai media, berkaitan erat dengan istilah multimedia. Multimedia adalah instrumen yang secara praktik dapat membuat presentasi yang dinamis dengan unsur-unsur teks, grafik, audio, hingga animasi/video.

Tujuan dari multimedia adalah untuk menggambarkan suatu informasi dengan jelas dan komprehensif kepada audiens. Unsur-unsur grafik, audio, visual, hingga animasi akan menambah kejelasan dari informasi yang akan disampaikan.

Praktek Matlab, cari dan letakkan suatu gambar yang mau di uji (misal doraemon.jpg) pada folder kerja (Misalkan D:\Matlab\Buku), lalu ketik pada CLI Matlab:
>> image='doraemon.jpg';
>> imshow(image)

Elemen Multimedia

Dalam buku Information Technology in Business: Principles, Practice, Opportunities dijelaskan bahwa ada enam elemen penting dalam multimedia. Keenam elemen tersebut di antaranya:

  • Teks

  • Foto

  • Audio (suara)

  • Video

  • Animasi

  • Virtual Reality

Sedang berdasarkan jenis-jenisnya adalah sebagai berikut berikut contohnya:

  • Multimedia Interaktif artinya pengguna dapat melakukan kontrol dan mengakses berbagai elemen dalam multimedia untuk nantinya akan ditampilkan. Seperti, game, website, hingga multimedia pembelajaran

  • Multimedia Hiperaktif maksudnya adalah jenis ini memiliki struktur dari elemen-elemen terkait dengan pengguna yang dapat mengarahkannya. Seperti, world wide web, website, game online.

  • Multimedia Linier artinya pengguna hanya dapat menjadi penikmat dan penonton pada produk multimedia. Seperti, televisi, film, koran, dan sejenisnya

Definisi Citra

Citra (Image) adalah gambar pada bidang dua dimensi. Ditinjau dari sudut pandang matematis, citra merupakan fungsi menerus (continue) dari intensitas cahaya pada bidang dwimatra/2D. Sumber cahaya menerangi objek, objek memantulkan kembali sebagian dari berkas cahaya tersebut. 

Citra yang dimaksudkan di dalam keseluruhan isi panduan ini adalah “citra diam” (still images). Citra diam adalah citra tunggal yang tidak bergerak (default definisi citra). Sedang Citra bergerak (moving images) adalah rangkaian citra diam yang ditampilkan secara beruntun (sekuensial) sehingga memberi kesan pada mata kita sebagai gambar yang bergerak. Setiap citra di dalam rangkaian itu disebut frame. Gambar-gambar yang tampak pada film layar lebar atau televisi pada hakikatnya terdiri atas ratusan sampai ribuan frame.


Citra atau yang lebih tepatnya Citra Digital tersebut merupakan sebuah Array angka (piksel) dalam bidang 2D yang secara khusus diatur dalam baris dan kolom.Sehingga dapat juga  didefinisikan oleh fungsi matematika f(x,y) yang mana x dan y adalah titik koordinat horizontal dan vertikal serta f disebut sebagai intensitas bayangan di titik tersebut.

Citra terdiri dari sejumlah elemen yang terbatas, yang masing-masing elemen memiliki nilai tertentu. Elemen-elemen ini disebut sebagai elemen gambar atau piksel. 

Piksel adalah sebuah titik pada citra yang mengambil bayangan, opasitas, atau warna tertentu.
Sebagai contoh, sebuah citra digital memiliki resolusi 1024 × 768, artinya citra tersebut tersusun atas 786.432 piksel. Perhatikan gambar (a) untuk penjelasan terkait penulisan ukuran panjang dan lebar citra.

Berdasarkan jenis warnanya citra digital dikelompokkan menjadi:

Citra RGB: intensitas piksel yang tersusun oleh tiga kanal warna yakni merah, hijau, dan biru serta memiliki rentang nilai antara 0 hingga 255. Citra RGBA: perpanjangan RGB dengan tambahan bidang alfa, yang mewakili opacity atau kegelapan gambar.
Setiap piksel memiliki warna dan warna tersebut disusun dari tiga warna primer, yaitu merah, hijau dan biru. Masing-masing warna primer memiliki nilai intensitas minimum-maximum, 0-255. Penggabungan dari warna-warna tersebut mengikuti aturan pencampuran warna, seperti pada gambar (b). 

Sebagai contoh, suatu piksel memiliki nilai merah 255, nilai hijau 0 dan nilai biru 255, maka piksel tersebut akan berwarna ungu. Jadi, sebenarnya citra yang kita lihat pada monitor ataupun kamera digital merupakan kumpulan dari nilai intensitas warna primer.


Citra Grayscale : piksel yang terdiri dari bilangan bulat dengan nilai antara 0 hingga 255 (0 sepenuhnya hitam dan 255 sepenuhnya putih).Grayscale merupakan citra digital yang piksel penyusunnya hanya berupa satu nilai saja, yaitu nilai abu-abu. Citra grayscale dapat diperoleh dengan banyak cara, namun metode yang paling umum adalah metode luminosity. Dalam metode ini, nilai citra grayscale diperoleh dari G = nilai merah*0.21 + nilai hijau*0.72 + nilai biru*0.07). 

Citra Biner: piksel yang terdiri dari angka 0 (hitam) dan 1 (putih). 

Praktek:

Pada Matlab, default gambar/citra ada di path
C:\Program Files\MATLAB\R2022b\toolbox\images\imdata
Ketik pada suatu file matlab, misal lat1.m

subplot(2,4,1);imshow(imread('baby.jpg'));title ('A.baby');

subplot(2,4,2);imshow(imread('car1.jpg'));title ('B.car1');

subplot(2,4,3);imshow(imread('flamingos.jpg'));title ('C.flamingos');

subplot(2,4,4);imshow(imread('foosball.jpg'));title ('D.foosball');

subplot(2,4,5);imshow(imread('greens.jpg'));title ('E.greens');

subplot(2,4,6);imshow(imread('indiancorn.jpg'));title ('F.indiancorn');

subplot(2,4,7);imshow(imread('llama.jpg'));title ('G.llama');

subplot(2,4,8);imshow(imread('micromarket.jpg'));title ('H.micromarket');



Nama file default adalah nama file yang sudah ada pada library matlab, sehingga kita tidak perlu mempersiapkannya terlebih dahulu antara lain :


autumn.tif 

forest.tif

kids.tif

circuit.tif

tumor_091R.tif

shadow.tif

moon.tif

mri.tif

cameraman.tif


baby.jpg

car1.jpg

car2.jpg

colorCheckerTestImage.jpg

flamingos.jpg

foosball.jpg

greens.jpg

indiancorn.jpg

llama.jpg

micromarket.jpg

peacock.jpg

parkavenue.jpg

trailer.jpg

wagon.jpg

yellowlily.jpg

office_3.jpg


traffic.avi

%atau bisa melihat list detailnya dengan script sebagai berikut
wd = pwd;

cd('C:\Program Files\MATLAB\R2022b\toolbox\images\imdata')

D = dir;

cd(wd)

C = {'.tif';'.jp';'.png';'.bmp'};

idx = false(size(D));

for ii = 1:length(C)

   idx = idx | (arrayfun(@(x) any(strfind(x.name,C{ii})),D));

end

D = D(idx);

L = length(D);

for ii = 1:2:numel(D)

   fprintf('%25s %25s\n',D(ii:min(ii+1,L)).name)

end


Script Matlab untuk menampilkan default file .tif dan atau .avi


imshow(imread('cameraman.tif'));

implay('traffic.avi');


Pengolahan Citra

Image processing adalah suatu bentuk pengolahan atau pemrosesan sinyal dengan input berupa gambar (image) dan ditransformasikan menjadi gambar lain sebagai keluarannya dengan teknik tertentu.

Image processing dilakukan untuk memperbaiki kesalahan data sinyal gambar yang terjadi akibat transmisi dan selama akuisisi sinyal, serta untuk meningkatkan kualitas penampakan gambar agar lebih mudah diinterpretasi oleh sistem penglihatan manusia baik dengan melakukan manipulasi dan juga penganalisisan terhadap gambar.

Operasi-operasi yang dilakukan di dalam pengolahan citra banyak ragamnya. Dan, secara umum, operasi pengolahan citra dapat diklasifikasikan dalam beberapa jenis berdasarkan dari tujuan transformasinya,  sebagai berikut:

1. Perbaikan kualitas citra (image enhancement).

Jenis operasi ini bertujuan untuk memperbaiki kualitas citra dengan cara memanipulasi parameter-parameter citra. Dengan operasi ini, ciri-ciri khusus yang terdapat di dalam citra lebih ditonjolkan. Contoh-contoh operasi perbaikan citra:

a. perbaikan kontras gelap/terang

b. perbaikan tepian objek (edge enhancement)

c. penajaman (sharpening)

d. pemberian warna semu (pseudocoloring)

e. penapisan derau (noise filtering)


Perbaikan kontras gelap/terang, ketik:
I=imread('cameraman.tif');
J=imadjust(I,[40/255 204/255],[0/255 255/255]);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);


Contoh operasi penajaman, dimana Operasi ini menerima masukan sebuah citra yang gambarnya hendak dibuat tampak lebih tajam. Bagian citra yang ditajamkan adalah tepi-tepi objek.


2. Pemugaran citra (image restoration)

Operasi ini bertujuan menghilangkan/meminimumkan cacat pada citra. Tujuan pemugaran citra hampir sama dengan operasi perbaikan citra. Bedanya, pada pemugaran citra penyebab degradasi gambar diketahui.

Contoh-contoh operasi pemugaran citra:

a. penghilangan kesamaran (deblurring).

b. penghilangan derau (noise)

Contoh operasi penghilangan kesamaran. Citra masukan adalah citra yang tampak kabur (blur). Kekaburan gambar mungkin disebabkan pengaturan fokus lensa yang tidak tepat atau kamera bergoyang pada pengambilan gambar. Melalui operasi deblurring, kualitas citra masukan dapat diperbaiki sehingga tampak lebih baik.

Script LPF:
%LPF
I=imread('cameraman.tif');
IN=imnoise(I,'salt & pepper',0.02);
lpf1=[1/16 1/8 1/16;1/8 1/4 1/8;1/16 1/8 1/16];
R=uint8(conv2(double(I),lpf1,'same'));
subplot(1,2,1);imshow(IN);title('Image Dengan Noise');
subplot(1,2,2);imshow(R);title('Image Remove Noise');

Low-pass filtering /neighborhood averaging adalah proses filter yang melewatkan komponen citra dengan nilai intensitas yang rendah dan meredam komponen citra dengan nilai intensitas yang tinggi. Low pass filter akan menyebabkan citra menjadi lebih halus dan lebih blur.


%MPF

I=imread('cameraman.tif');
IN=imnoise(I,'salt & pepper',0.02);
R=medfilt2(IN,[3 3]);
subplot(1,2,1);imshow(IN);title('Image Dengan Noise');
subplot(1,2,2);imshow(R);title('Image Remove Noise');

Median Pass Filter merupakan salah satu jenis low-pass filter, yang bekerja dengan mengganti nilai suatu piksel pada citra asal dengan nilai median dari piksel tersebut dan lingkungan tetangganya.Dibandingkan dengan neighborhood averaging, filter ini lebih tidak sensitif terhadap perbedaan intensitas yang ekstrim.


3. Pemampatan citra (image compression).

Jenis operasi ini dilakukan agar citra dapat direpresentasikan dalam bentuk yang lebih kompak sehingga memerlukan memori yang lebih sedikit. Hal penting yang harus diperhatikan dalam pemampatan adalah citra yang telah dimampatkan harus tetap mempunyai kualitas gambar yang bagus. 

Contoh metode pemampatan citra adalah metode JPEG. Hasil pemampatan citra dengan metode JPEG dapat mereduksi ukuran citra semula 258KB (.bmp) sehingga menjadi 49 KB saja (.jpg).

NF1='sample_1280×853.bmp';

BMP1 = imread(NF1);

NF2='bmp2jpg.jpg';

imwrite(BMP1,NF2,'jpg');  

JPG1 = imread(NF2);

NF3='jpg2bmp.bmp';

imwrite(JPG1,NF3) ;

BMP2=imread(NF3);

whos BMP1

whos JPG1

whos BMP2

s=dir(NF1);

disp(['Ukuran NF1=' NF1 ' :' num2str(s.bytes) ' bytes']);

s=dir(NF2);

disp(['Ukuran NF2=' NF2 ' :' num2str(s.bytes) ' bytes']);

s=dir(NF3);

disp(['Ukuran NF3=' NF3 ' :' num2str(s.bytes) ' bytes']);


terbaca pada hasil konversi (BMP to JPG) diatas, bahwa pixel citra .bmp menjadi .jpg adalah sama jumlahnya (853x1280x3 ), sedang secara ukuran, size berubah jauh dari 3275658 menjadi 297160.
Dan saat proses (JPG to BMP) data size berubah menjadi sedia kala/ Extract


subplot(1,3,1);imshow(BMP1);title('Image BMP1');
subplot(1,3,2);imshow(JPG1);title('Image JPG');
subplot(1,3,3);imshow(BMP2);title('Image BMP2');

4. Segmentasi citra (image segmentation)

Jenis operasi ini bertujuan untuk memecah suatu citra ke dalam beberapa segmen dengan suatu kriteria tertentu. Jenis operasi ini berkaitan erat dengan pengenalan pola.

Contoh proses ini biasanya pada proses MaxPooling (mengambil nilai maksimum di setiap window/blok), sehingga ukuran citra berubah menjadi 1/n nya.

5. Pengorakan citra (image analysis)

Jenis operasi ini bertujuan menghitung besaran kuantatif dari citra untuk menghasilkan deskripsinya. Teknik pengorakan citra mengekstraksi ciri-ciri tertentu yang membantu dalam identifikasi objek. Proses segmentasi kadangkala diperlukan untuk melokalisasi objek yang diinginkan dari sekelilingnya.

Contoh-contoh operasi pengorakan citra:

a. Pendeteksian tepi objek (edge detection)
b. Ekstraksi batas (boundary)
c. Representasi daerah (region)

I=imread('doraemon.jpg');
G=rgb2gray(I);
E=edge(G,'Canny');
subplot(1,3,1);imshow(I);title ('Citra Asli');
subplot(1,3,2);imshow(G);title ('Citra Gray/Keabuan');
subplot(1,3,3);imshow(E);title ('Citra Edge/Deteksi Tepi');



Operasi ini menghasilkan semua tepi (edge) di dalam citra.


6. Rekonstruksi citra (image reconstruction)

Jenis operasi ini bertujuan untuk membentuk ulang objek dari beberapa citra hasil proyeksi.  

I = imread('cameraman.tif');
se = offsetstrel('ball',5,5);
%ball shaped, radius 5, height 5
Er= imerode(I,se);
subplot(1,2,1);imshow(I);title('Image Asli');
subplot(1,2,2);imshow(Er);title('Image Rodes');

Pemanfaatan Image Processing

Pengolahan citra mempunyai aplikasi yang sangat luas dalam berbagai bidang kehidupan. Di bawah ini disebutkan beberapa aplikasi dalam beberapa bidang:

1. Bidang perdagangan
(a) Pembacaan kode batang (bar code) yang tertera pada barang (umum digunakan di pasar swalayan/supermarket).
(b) Mengenali huruf/angka pada suatu formulir secara otomatis.

2. Bidang militer
(a) Mengenali sasaran peluru kendali melalui sensor visual.
(b) Mengidentifikasi jenis pesawat musuh.

3. Bidang kedokteran
(a) Pengolahan citra sinar X untuk mammografi (deteksi kanker payudara)
(b) NMR (Nuclear Magnetic Resonance)
(c) Mendeteksi kelainan tubuh dari foto sinar X.
(d) Rekonstruksi foto janin hasil USG

4. Bidang biologi
Pengenalan jenis kromosom melalui gambar mikroskopik

5. Komunikasi data
Pemampatan citra yang ditransmisi.

6. Hiburan
Pemampatan video (MPEG)

7. Robotika
Visualy-guided autonomous navigation

8. Pemetaan
Klasifikasi penggunaan tanah melalui foto udara/LANDSAT

9. Geologi
Mengenali jenis batu-batuan melalui foto udara/LANDSAT

10. Hukum
(a) Pengenalan sidik jari
(b) Pengenalan foto narapidana.



REFERENSI:

Rinaldi Munir, Pengantar Pengolahan Citra,ITB 2019
https://www.trivusi.web.id/2022/04/algoritma-cnn.html
https://4nsi.com/how-do-i-calculate-the-file-size-for-a-digital-image/
https://sites.google.com/site/riksongultom/materi-mkom/matematika-dan-statistika-untuk-komputasi/konvolusi-dan-transformasi-fourier
https://www.researchgate.net/profile/Suhendro-Irianto/publication/311708107_PENGOLAHAN_CITRA_DIGITAL/links/58565f7408aeff086bfbb3b4/PENGOLAHAN-CITRA-DIGITAL.pdf