Anda di halaman 1dari 19

LAPORAN

UJIAN TENGAH SEMESTER TENTANG


MORFOLOGI CITRA

Nama : Wawan Harianto


Nim : 17102175
Prodi : Sistem Komputer

STMIK STIKOM INDONESIA


DENPASAR, BALI 2019
MORFOLOGI CITRA

1. DILASI
Source Code :
clear all;
f=im2bw(imread('D:\KULIAH\Semester 5\Citra
Digital\assigment\foto\zoros.jpg')); %baca citra dan konversi versi menjadi
citra biner

B=[1 1 1; 1 1 1; 1 1 1]; %set matriks B dengan elemen 8 connectivity


figure(1), imshow(f); title('Asli'); %tampilkan citra biner f
[N,M] = size(f); %baca ukuran citra f
[I,J] = size(B); %baca ukuran matriks B
I = floor(I/2);
J = floor(J/2);

for n = I+1 : N-I, %loop proses baris citra


for m = J+1 : M-J, %loop proses kolom citra
dilasi = 0; %inisialisasi nilai dilasi
for i = -I:I %loop proses dilasi
for j = -J:J
bit_dilasi = bitand(B(I+1+i,J+1+j),f(n+i,m+j)); %operasi
logika AND
dilasi = bitor(dilasi,bit_dilasi); %operasi logika OR
end
end
citra_dilasi(n,m) = dilasi; %simpan hasil dilasi kedalam matriks
citra_dilasi
end
end
figure(2), imshow(citra_dilasi); title('Dilasi V1')% tampilkan citra hasil
dilasi
citra_dilasi1 = imdilate(f,B); % citra dilasi menggunakan fungsi dilasi pada
matlab
figure(3), imshow(citra_dilasi1); title ('Dilasi V2');%tampilkan citra hasil
dilasi :
Result
Result:
2. EROSI
Source Code :
clear all;
f=im2bw(imread('D:\KULIAH\Semester 5\Citra
Digital\assigment\foto\zoros.jpg')); %baca citra dan konversi versi menjadi
citra biner

B=[1 1 1; 1 1 1; 1 1 1]; %set matriks B dengan elemen 8 connectivity


figure(1), imshow(f); title('Asli'); %tampilkan citra biner f
[N,M] = size(f); %baca ukuran citra f
[I,J] = size(B); %baca ukuran matriks B
I = floor(I/2);
J = floor(J/2);

for n = I+1 : N-I, %loop proses baris citra


for m = J+1 : M-J, %loop proses kolom citra
erosi = 1; %inisialisasi nilai ersi
for i = -I:I %loop proses erosi
for j = -J:J
bit_erosi = bitand(B(I+1+i,J+1+j),f(n+i,m+j)); %operasi
logika AND
erosi = bitand(erosi,bit_erosi); %operasi logika AND
end
end
citra_erosi(n,m) = erosi; %simpan hasil erosi kedalam matriks
citra_erosi
end
end
figure(2), imshow(citra_erosi); title(' Erosi v1'); % tampilkan citra hasil
erosi
citra_erosi = imerode(f,B); % citra erosi menggunakan fungsi erosi pada
matlab
figure(3), imshow(citra_erosi); title('Erosi V2');%tampilkan citra hasil
erosi :
Result
Result:
3. OPENING
clear all;
f=im2bw(imread('D:\KULIAH\Semester 5\Citra
Digital\assigment\foto\zoros.jpg')); %baca citra dan konversi versi menjadi
citra biner

K=5; %set ukuran matriks B


B=ones(K,K); %set matriks B KxK dengan elemen K*K - 1
connectivity
figure(1), imshow(f); title('asli'); %tampilkan citra biner f
[N,M] = size(f); %baca ukuran citra f
[I,J] = size(B); %baca ukuran matriks B
I = floor(I/2);
J = floor(J/2);

for n = I+1 : N-I, %loop proses baris citra


for m = J+1 : M-J, %loop proses kolom citra
erosi = 1; %inisialisasi nilai ersi
for i = -I:I %loop proses erosi
for j = -J:J
bit_erosi = bitand(B(I+1+i,J+1+j),f(n+i,m+j)); %operasi
logika AND
erosi = bitand(erosi,bit_erosi); %operasi logika AND
end
end
citra_erosi(n,m) = erosi; %simpan hasil erosi kedalam matriks
citra_erosi
end
end

[N,M] = size(citra_erosi); %baca ukuran citra hasil erosi


for n = I+1 : N-I, %mulai proses dilasi
for m = J+1 : M-J,
dilasi=0;
for i = -I:I
for j = -J:J
bit_dilasi = bitand(B(I+1+i,J+1+j),citra_erosi(n+i,m+j));
%operasi logika AND
dilasi = bitor(dilasi,bit_dilasi);%operasi logika OR
end
end
citra_opening(n,m) = dilasi; %simpan hasil dilasi kedalam matriks
citra_opening
end
end %akhir proses dilasi
figure(2), imshow((citra_opening)); title('Opening V1'); % tampilkan citra
hasil opening
citra_opening1 = imopen(f,B); % citra opening menggunakan fungsi opening
pada matlab
figure(3), imshow(citra_opening1); title('Opening V2');%tampilkan citra
hasil opening
Result :
4. CLOSING
Source Code :
clear all;
f=im2bw(imread('D:\KULIAH\Semester 5\Citra
Digital\assigment\foto\zoros.jpg')); %baca citra dan konversi versi menjadi
citra biner

K=5; %set ukuran matriks B


B=ones(K,K); %set matriks B KxK dengan elemen K*K - 1
connectivity
figure(1), imshow(f); title('asli'); %tampilkan citra biner f
[N,M] = size(f); %baca ukuran citra f
[I,J] = size(B); %baca ukuran matriks B
I = floor(I/2);
J = floor(J/2);

for n = I+1 : N-I, %loop proses baris citra


for m = J+1 : M-J, %loop proses kolom citra
dilasi = 0; %inisialisasi nilai ersi
for i = -I:I %loop proses dilasi
for j = -J:J
bit_dilasi = bitand(B(I+1+i,J+1+j),f(n+i,m+j)); %operasi
logika AND
dilasi = bitor(dilasi,bit_dilasi); %operasi logika OR
end
end
citra_dilasi(n,m) = dilasi; %simpan hasil dilasi kedalam matriks
citra_dilasi
end
end

[N,M] = size(citra_dilasi); %baca ukuran citra hasil dilasi


for n = I+1 : N-I, %mulai proses erosi
for: m = J+1 : M-J,
Result
erosi=1;
for i = -I:I
for j = -J:J
bit_erosi = bitand(B(I+1+i,J+1+j),citra_dilasi(n+i,m+j));
%operasi logika AND
erosi = bitand(erosi,bit_erosi);%operasi logika AND
end
end
citra_closing(n,m) = erosi; %simpan hasil erosi kedalam matriks
citra_closing
end
end %akhir proses erosi
figure(2), imshow((citra_closing)); title('closing V1'); % tampilkan citra
hasil closing
citra_closing1 = imclose(f,B); % citra closing menggunakan fungsi closing
pada matlab
figure(3), imshow(citra_closing1); title('closing V2');%tampilkan citra
hasil closing
Result:
5. THINNING

#### file testthin.m ####

Source Code :
function Testthin

IterThinning = 100 ;
Image = im2bw(imread('D:\KULIAH\Semester 5\Citra
Digital\assigment\foto\zoros.jpg'));
Raw = Image ;

for Iter = 1:IterThinning


OutBW1 = Condition1( Image, 0 ) ;
OutBW2 = Condition2( OutBW1, 0 ) ;
Image = OutBW2 ;
end

%% debug and compare the result in Matlab


I = bwmorph(Raw, 'thin',IterThinning );
close all ;
figure,imshow( Raw ) ;
figure,imshow( I ) ;
figure,imshow( OutBW2 ) ;

## file Selanjutnya Next Page


#### file condition1.m ####

Source Code :
function OutBW = Condition1( BW , debug )

MaskBW = zeros(size(BW)+2) ;
MaskBW([2:end-1],[2:end-1]) = BW ;
BW = MaskBW ;
BW = double( BW ) ;
OutBW = BW ;
[row col] = find( BW == 1 ) ;

for i = 1 : length(row)
indx = row(i) ;
indy = col(i) ;
if debug == 1
if indx == 189 && indy == 28
close all ;
imshow(BW) ;
hold on ;
plot(indy,indx,'r*') ;
end
end
Mask = [ BW(indx-1,indy-1) BW(indx-1,indy) BW(indx-1,indy+1) ;...
BW(indx,indy-1 ) BW(indx,indy) BW(indx,indy+1 ) ;...
BW(indx+1,indy-1) BW(indx+1,indy) BW(indx+1,indy+1) ];
%% Condition 1
if Mask(2,3) == 0 && ( Mask(1,3) == 1 || Mask(1,2) == 1)
b1 = 1;
else
b1 = 0;
end
if Mask(1,2) == 0 && ( Mask(1,1) == 1 || Mask(2,1) == 1)
b2 = 1;
else
b2 = 0;
end
if Mask(2,1) == 0 && ( Mask(3,1) == 1 || Mask(3,2) == 1)
b3 = 1;
else
b3 = 0;
end
if Mask(3,2) == 0 && ( Mask(3,3) == 1 || Mask(2,3) == 1)
b4 = 1;
else
b4 = 0;
end
b = b1 + b2 + b3 + b4 ;

%% Condition 2
Mask = logical(Mask) ;
N1 = double( Mask(2,3) | Mask(1,3) ) + double( Mask(1,2) |
Mask(1,1) ) + double( Mask(2,1) | Mask(3,1) ) + double( Mask(3,2) |
Mask(3,3) );
N2 = double( Mask(1,3) | Mask(1,2) ) + double( Mask(1,1) |
Mask(2,1) ) + double( Mask(3,1) | Mask(3,2) ) + double( Mask(3,3) |
Mask(2,3) ) ;
NCondition2 = min(N1,N2) ;

%% Condition 3
Mask = logical(Mask) ;
Mask(3,3) = ~Mask(3,3) ;
Continue code:

%% Condition 2
Mask = logical(Mask) ;
N1 = double( Mask(2,3) | Mask(1,3) ) + double( Mask(1,2) |
Mask(1,1) ) + double( Mask(2,1) | Mask(3,1) ) + double( Mask(3,2) |
Mask(3,3) );
N2 = double( Mask(1,3) | Mask(1,2) ) + double( Mask(1,1) |
Mask(2,1) ) + double( Mask(3,1) | Mask(3,2) ) + double( Mask(3,3) |
Mask(2,3) ) ;
NCondition2 = min(N1,N2) ;

%% Condition 3
Mask = logical(Mask) ;
Mask(3,3) = ~Mask(3,3) ;

NCondition3 = ( Mask(1,3) | Mask(1,2) | Mask(3,3) ) & Mask(2,3)


;

%% Judgement
if NCondition3 == 0 && NCondition2>=2 && NCondition2<=3 && b ==
1
OutBW(indx,indy) = 0 ;
end
end
OutBW = OutBW([2:end-1],[2:end-1]) ;

#### file Condition2.m ####

Source Code :
function OutBW = Condition2( BW , debug )

MaskBW = zeros(size(BW)+2) ;
MaskBW([2:end-1],[2:end-1]) = BW ;
BW = MaskBW ;
BW = double( BW ) ;
OutBW = BW ;
[row col] = find( BW == 1 ) ;
for i = 1 : length(row)
indx = row(i) ;
indy = col(i) ;
if debug == 1
imshow(BW) ;
if indx == 27 && indy == 188
hold on ;
plot(indy,indx,'r*') ;
end
end
Mask = [ BW(indx-1,indy-1) BW(indx-1,indy) BW(indx-1,indy+1) ;...
BW(indx,indy-1 ) BW(indx,indy) BW(indx,indy+1 ) ;...
BW(indx+1,indy-1) BW(indx+1,indy) BW(indx+1,indy+1) ];
Continue Source Code :
%% Condition 1
if Mask(2,3) == 0 && ( Mask(1,3) == 1 || Mask(1,2) == 1)
b1 = 1;
else
b1 = 0;
end
if Mask(1,2) == 0 && ( Mask(1,1) == 1 || Mask(2,1) == 1)
b2 = 1;
else
b2 = 0;
end
if Mask(2,1) == 0 && ( Mask(3,1) == 1 || Mask(3,2) == 1)
b3 = 1;
else
b3 = 0;
end
if Mask(3,2) == 0 && ( Mask(3,3) == 1 || Mask(2,3) == 1)
b4 = 1;
else
b4 = 0;
end
b = b1 + b2 + b3 + b4 ;

%% Condition 2
Mask = logical(Mask) ;
N1 = double( Mask(2,3) | Mask(1,3) ) + double( Mask(1,2) |
Mask(1,1) ) + double( Mask(2,1) | Mask(3,1) ) + double( Mask(3,2) |
Mask(3,3) );
N2 = double( Mask(1,3) | Mask(1,2) ) + double( Mask(1,1) |
Mask(2,1) ) + double( Mask(3,1) | Mask(3,2) ) + double( Mask(3,3) |
Mask(2,3) ) ;
NCondition2 = min(N1,N2) ;

%% Condition New3
Mask = logical(Mask) ;
Mask(1,1) = ~Mask(1,1) ;

NCondition3 = ( Mask(3,1) | Mask(3,2) | Mask(1,1) ) & Mask(2,1);

%% Judgement
if NCondition3 == 0 && NCondition2>=2 && NCondition2<=3 && b ==
1
OutBW(indx,indy) = 0 ;
end
end
OutBW = OutBW([2:end-1],[2:end-1]) ;

## RESULT NEXT PAGE ##


Result :
6. SHRINKING
Source Code :
clc;
clear all;
close all;
A=imread('D:\KULIAH\Semester 5\Citra Digital\assigment\foto\zoros.jpg');
f=2; % skala Faktor pengecilan
s=size(A);
s1=s/f;
k=1;
l=1;
for i=1:s1
for j=1:s1
B(i,j)=A(k,l);
l=l+f;
end
l=1;
k=k+f;
end
figure,imshow(A)
title('Original Image');
figure,imshow(B)
title('Shrinked Version');

Result:
7. PRUNNING
Source Code :
clear all; clc;

% Image read in
img = im2bw(imread('D:\KULIAH\Semester 5\Citra
Digital\assigment\foto\pruning.png'));

b_img_skel = bwmorph(img, 'skel', Inf);


b_img_spur = bwmorph(b_img_skel, 'spur', 40);
B = bwmorph(b_img_skel, 'branchpoints');
E = bwmorph(b_img_skel, 'endpoints');

[y,x] = find(E);
B_loc = find(B);

Dmask = false(size(img));
for k = 1:numel(x)
D = bwdistgeodesic(b_img_skel,x(k),y(k));
distanceToBranchPt = min(D(B_loc));
Dmask(D < distanceToBranchPt) =true;
end
skelD = b_img_skel - Dmask;

figure,imshow(b_img_skel);
title('Skeletonized Image');
figure,imshow(skelD);
hold all;
[y,x] = find(B); plot(x,y,'ro');title('Branched Image');
figure,imshow(b_img_spur);
title('Skeletonized Purned Version');

Result :
8. THICKENING
%VERSION 1
img = imread('D:\KULIAH\Semester 5\Citra Digital\assigment\foto\zoros.jpg');
c = im2bw(img);
%prosses eksekusi
thin = bwmorph(c, 'thin');
thick= bwmorph(thin,'thicken', 5);
%Menampilkan data
figure, imshow(img); title('asli');
figure, imshow(thin);title('Thinning');
figure, imshow(thick); title('Thickening');

Result :
%VERSION 2
I=imread('D:\KULIAH\Semester 5\Citra Digital\assigment\foto\thick.png');
subplot(1,2,1),imshow(I),title('asli');
I=rgb2gray(I);
BW=~im2bw(I,graythresh(I));
BW2 = bwmorph(BW,'thin');
I1=double(I).*BW2;
subplot(1,2,2),imshow(uint8(I1));title('Thickening');

figure, imshow(thick); title('Thickening');


Result :
9. SKELETONIZING
%SKELETONIZING
img = imread('D:\KULIAH\Semester 5\Citra
Digital\assigment\foto\pruning.png');
%membaca image pada directori
c= im2bw(img);
%convert image ke biner
T = bwmorph(c, 'skel', inf);
%operasi ke Skeletonizing
figure, imshow(c), title('asli');
figure, imshow(T),title('Skeletonizing');
figure, imshow(thick); title('Thickening');
Result :

Anda mungkin juga menyukai