Anda di halaman 1dari 14

Nama : Linanda Salsa S.

Kelas / abs : 2F JTD / 11

NIM : 1941160036

Mata Kuliah : Pengolahan Citra Digital

Tugas 10. Kompres dan Dekompresi Citra


1. Sebut dan terangkan/gambarkan tiga metode kompresi citra (cari yang koding-nya sudah
tersedia).
2. Gunakan dua dari ketiga metode yang Anda sebut di jawaban no 1 untuk digunakan pada
foto Anda dan foto nama Anda dalam bentuk sesuai dengan kriteria metode
3. Dekompresi hasil no 2
4. Bandingkan hasil no 2 dan no 3 dengan gambar aslinya dan terangkan perbedaan dan
persamaannya

Jawaban
1. - Metode Run Length Encoding (RLE)
Metode ini digunakan untuk mengompresi citra yang memiliki kelompok-kelompok
pixel yang berderajat keabuan yang sama. Kompresi citra dengan metode Run Length
Encoding dilakukan dengan membuat rangkaian pasangan nilai (P,Q) untuk setiap
baris pixel, dimana nilai P menyatakan nilai derajat keabuan, sedangkan nilai Q
menyatakan jumlah pixel berurutan yang memiliki derajat keabuan tersebut.

- Metode Huffman
Metode Huffman merupakan salah satu teknik kompresi dengan cara melakukan
pengkodean dalam bentuk bit untuk mewakili data karakter.

- Metode Kuantisasi
Metode ini bekerja dengan cara mengurangi derajat keabuan, sehingga jumlah bit
yang dibutuhkan untuk merepresentasikan citra berkurang. Akibatnya secara visual
kualitas citra menjadi jelek. Oleh karena itu metode ini termasuk dalam loossy
compression, sehingga citra yang sudah dikompresi sulit didekompresi kembali
karena adanya informasi yang hilang.

2. Script metode Huffman

function varargout = ImageCompression1(varargin)


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

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

% Last Modified by GUIDE v2.5 15-Oct-2014 22:20:56

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ImageCompression1_OpeningFcn,
...
'gui_OutputFcn', @ImageCompression1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

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

% --- Executes just before ImageCompression1 is made visible.


function ImageCompression1_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 ImageCompression1 (see
VARARGIN)

% Choose default command line output for ImageCompression1


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);
guidata(hObject, handles);
set(handles.axes1,'visible','off')
set(handles.axes2,'visible','off')
axis off
axis off
% UIWAIT makes ImageCompression1 wait for user response (see UIRESUME)
% uiwait(handles.figure1);

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

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global file_name;
%guidata(hObject,handles)
file_name=uigetfile({'*.bmp;*.jpg;*.png;*.tiff;';'*.*'},'Select an
Image File');
fileinfo = dir(file_name);
SIZE = fileinfo.bytes;
Size = SIZE/1024;
set(handles.text7,'string',Size);
imshow(file_name,'Parent', handles.axes1)

% --- Executes on button press in pushbutton2.


function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global file_name;
if(~ischar(file_name))
errordlg('Please select Images first');
else
I1 = imread(file_name);
% I1 = imread('ABC (2).jpg');
I = I1(:,:,1);
I = im2double(I);
T = dctmtx(8);
B = blkproc(I,[8 8],'P1*x*P2',T,T');
mask = [1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2 = blkproc(B,[8 8],'P1.*x',mask);
I2 = blkproc(B2,[8 8],'P1*x*P2',T',T);

I = I1(:,:,2);
I = im2double(I);
T = dctmtx(8);
B = blkproc(I,[8 8],'P1*x*P2',T,T');
mask = [1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2 = blkproc(B,[8 8],'P1.*x',mask);
I3 = blkproc(B2,[8 8],'P1*x*P2',T',T);

I = I1(:,:,3);
I = im2double(I);
T = dctmtx(8);
B = blkproc(I,[8 8],'P1*x*P2',T,T');
mask = [1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2 = blkproc(B,[8 8],'P1.*x',mask);
I4 = blkproc(B2,[8 8],'P1*x*P2',T',T);

L(:,:,:)=cat(3,I2, I3, I4);


imwrite(L,'kompresi.jpg');

fileinfo = dir('kompresi.jpg');
SIZE = fileinfo.bytes;
Size = SIZE/1024;
set(handles.text8,'string',Size);
imshow(L,'Parent', handles.axes2)
end

- hasil gambar
3. Script

%clearing all variables and screen

enter code here

clear all;

close all;

clc;

[file1]=uigetfile('*.txt');

%fprintf('Enter the ECG file name :%s',file1);

p=file1;

t=sprintf('%s',p);

b1=dlmread([file1]);

len=length(b1);

lead=input('Enter lead Number :');

%lead=str2double(lead);

col2=b1(1:end,lead);

e=fix(sqrt(len));
m=1;

for i=1:e

for j=1:e

g2(i,j)=fix(col2(m)*1000); %Amplifying by 1000

m=m+1;

end

end

g3=g2;
for i=1:e

for j=1:e

if(g3(i,j)<0)

g3(i,j)=(g3(i,j))*(-1);

end

end

end

max_term=g3(1,1);

for i=1:e

for j=1:e

if(g3(i,j)>max_term)

max_term=g3(i,j);

end

end

end

time=b1(1:end,1)*1000;

plot(time,col2);

xlabel('Time / s'); ylabel('Voltage / mV');

string=['INPUT ECG SIGNAL :: ',t];

title(string);
%title('Input ECG Signal:t');

grid on;

%%%%%%%%%%%INPUT FILE %%%%%%%%%%%%%

fid=fopen('inputfile.txt','w+');

cnt2=fwrite(fid,col2);

fclose(fid);

%%%%%%A%%%%%%%%%%%%%%%%%%%%%%%

a=g3;

I=a;

[m,n]=size(I);

Totalcount=m*n;

%variables using to find the probability

cnt=1;

sigma=0;

%computing the cumulative probability.


for i=0:max_term

k=I==i;

count(cnt)=sum(k(:))

%pro array is having the probabilities

pro(cnt)=count(cnt)/Totalcount;

sigma=sigma+pro(cnt);

cumpro(cnt)=sigma;

cnt=cnt+1;

end;

%Symbols for the signal

symbols = [0:max_term];

%Huffman code Dictionary

dict = huffmandict(symbols,pro);

%function which converts array to vector

vec_size = 1;

for p = 1:m

for q = 1:n

newvec(vec_size) = I(p,q);

vec_size = vec_size+1;

end

end

%Huffman Encodig
hcode = huffmanenco(newvec,dict);

%Huffman Decoding

dhsig1 = huffmandeco(hcode,dict);

%convertign dhsig1 double to dhsig uint8

dhsig = uint8(dhsig1);

%vector to array conversion

dec_row=sqrt(length(dhsig));

dec_col=dec_row;

%variables using to convert vector 2 array

arr_row = 1;

arr_col = 1;

vec_si = 1;

for x = 1:m

for y = 1:n

back(x,y)=dhsig(vec_si);

arr_col = arr_col+1;

vec_si = vec_si + 1;

end

arr_row = arr_row+1;

end

z=b1(1:end,1)*750;

%converting grayscale to rgb

[deco, map] = gray2ind(back,256);

RGB = ind2rgb(deco,map);
figure,subplot(1,2,1),title('original graph'),...

subplot(1,2,1),plot(b1,col2),xlabel('Time / s');

figure,subplot(1,2,1),plot(time,col2),xlabel('Time / s');

ylabel('Voltage / mV'),grid on,title('Decompressed


graph');

% subplot(2,2,3),imshow((b1)),title('compressed graph');

% K=imfinfo('original.jpg');

% size_of_file=K.FileSize

%K=imfinfo('compressed.jpg');

%size_of_file=K.FileSize

%K=imfinfo('fdr.jpg');

%size_of_file=K.FileSize

disp('Size of original ECG in bytes');

disp(bytes(p));

disp('Size of ECG after Compression');

fid=fopen('comp1.txt','w+'); % compressed file "comp.dat"

cnt=fwrite(fid,q);

fclose(fid);

disp(bytes('comp1.txt'));

disp('Size of DECOMPRESSED ECG');

fid=fopen('recons1.txt','w+');

cnt1=fwrite(fid,pro);
fclose(fid);

disp(bytes(pro));

% disp('Size of ECG after RE-construct in bytes');


% fid=fopen('recons1.dat','w+');
% cnt1=fwrite(fid,g13);
% fclose(fid);
% disp(bytes('recons1.dat'));

%%%%%%% PRD Calculation %%%%%%%%%%%%%


e=length(p);

for i=1:e

y3(i)=ecg(i)- main_t(i);

y4(i)=(y3(i).^2);

% y5=sum(y4(i));

y5(i)=(ecg(i).^2);
end
y6=sum(y4)/sum(y5);

prd=sqrt(y6);

disp('AFTER calculation PRD:');

disp(prd);

b0=bytes(p);

b1=bytes('comp1.txt');

CR1=b0/b1;

CR=100/CR1;

disp('AFTER calculation CR%:');

disp(CR);
disp('QUALITY SCORE');

c=double(CR);

d=double(prd);

qs=double(c/(d*100));

disp(qs);

%end of the huffman coding

- Gambar

Dekompres

4. Gambar asli kompres

Dekompres
Jadi perbedaannya adalah file kompres memiliki bite yang kecil dibandingkan file dekompres
dan file kompres sedikit lebih buram Glitchi.

Anda mungkin juga menyukai