Materi Kelima Pengolahan Citra Digital

Materi Pendeteksian Tepi Citra

Source Code pendeteksi tepi dengan gradien pertama :.

function J = edge_detection(I, Thres)
Gx = [-1 1];
Gy = [-1 1];
Gradien_x = convolve(I, Gx);
Gradien_y = convolve(I, Gy);
Magnitudo = sqrt((Gradien_x.^2) + (Gradien_y.^2));
%Arah_Gradien = atan(Gradien_y./Gradien_x);
J = thresholding(Magnitudo, Thres);
function B = convolve(A, k)
[r c] = size(A);
[m n] = size(k);
h = rot90(k, 2);
center = floor((size(h)+1)/2);
left = center(2) - 1;
right = n - center(2);
top = center(1) - 1;
bottom = m - center(1);
Rep = zeros(r + top + bottom, c + left + right);
for x = 1 + top : r + top
for y = 1 + left : c + left
Rep(x,y) = A(x - top, y - left);
end
end

B = zeros(r , c);
for x = 1 : r
for y = 1 : c
for i = 1 : m
for j = 1 : n
q = x - 1;
w = y -1;
B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));
end

end
end
end

function Hasil = thresholding(Array, T)
row = size(Array, 1);
col = size(Array, 2);
Hasil = zeros(row, col);
for x = 1 : row
for y = 1 : col
if Array(x, y) >= T
Hasil(x, y) = 1;
else
Hasil(x, y) = 0;

end
end
end

Save dengan nama "edge_detection.m". Kemudian buatlah source code berikut
clear; clc;
I = imread('eight.tif');
Hsl = edge_detection(im2double(I), 0.25);
figure, imshow(im2uint8(Hsl));

Berikut hasil running dari source code diatas.




Selanjutnya kita akan membuat edge detection menggunakan operator Robert, berikut source codenya.
% baca citra dan memberikan noise salt & pepper
I=imread("saturn.png");
I=imnoise(I,'salt & pepper');
imshow(I), title('Citra Asli Terkena Noise');
Ig=rgb2gray(I);
Igm=medfilt2(Ig,[5 5]);
Mx=[1 0;0 -1];
My=[0 -1;1 0];
Gy=imfilter(double(Igm),My,'symmetric');
Gx=imfilter(double(Igm),Mx,'symmetric');
M=sqrt(Gx.^2+Gy.^2);
mmax=max(max(M));
mmin=min(min(M));
T=(mmax+mmin)/2;
T=(T/mmax); % normalisasi threshold
M=M/mmax; % normalisasi citra
miu1=.1;
miu2=.2;
del_miu=abs(miu1-miu2);
[r c]=size(M);
an=1;
while an<=500
for ii=1:r
for jj=1:c
if M(ii,jj)<T
M1(ii,jj)=M(ii,jj);
else
M2(ii,jj)=M(ii,jj);
end
end
end
miu1=mean2(M1);
miu2=mean2(M2);
T=(miu1+miu2)*2;
an=an+1;
end
for ii=1:r
for jj=1:c
if M(ii,jj)<T
M(ii,jj)=0;
else
M(ii,jj)=1;
end
end
end
figure, imshow(M), title('Program Sendiri Untuk Robert Filtering');

Berikut screenshot dari source code Operator Robert





edge detection menggunakan operator Prewit, berikut source codenya.
% baca citra dan memberikan noise salt & pepper
I=imread("hestain.png");
I=imnoise(I,'salt & pepper');
imshow(I), title('Citra Asli Terkena Noise');
Ig=rgb2gray(I);
Igm=medfilt2(Ig,[5 5]);
Mx=[-1 0 1; -1 0 1; -1 0 1];
My=[1 1 1; 0 0 0; -1 -1 -1];
Gy=imfilter(double(Igm),My,'symmetric');
Gx=imfilter(double(Igm),Mx,'symmetric');
M=sqrt(Gx.^2+Gy.^2);
mmax=max(max(M));
mmin=min(min(M));
T=(mmax+mmin)/2;
T=(T/mmax); % normalisasi threshold
M=M/mmax; % normalisasi citra
miu1=.1;
miu2=.2;
del_miu=abs(miu1-miu2);
[r c]=size(M);
an=1;
while an<=500
for ii=1:r
for jj=1:c
if M(ii,jj)<T
M1(ii,jj)=M(ii,jj);
else
M2(ii,jj)=M(ii,jj);
end
end
end
miu1=mean2(M1);
miu2=mean2(M2);
T=(miu1+miu2)*2;
an=an+1;
end
for ii=1:r
for jj=1:c
if M(ii,jj)<T
M(ii,jj)=0;
else
M(ii,jj)=1;
end
end
end
figure, imshow(M), title('Program Sendiri Untuk Prewit Filtering');
Berikut screenshot dari source code Operator Prewit







edge detection menggunakan operator Sobel, berikut source codenya
% baca citra dan memberikan noise salt & pepper
I=imread("peppers.png");
I=imnoise(I,'salt & pepper');
imshow(I), title('Citra Asli Terkena Noise');
Ig=rgb2gray(I);
Igm=medfilt2(Ig,[5 5]);
Mx=[-1 0 1; -2 0 2; -1 0 1];
My= - Mx;
Gy=imfilter(double(Igm),My,'symmetric');
Gx=imfilter(double(Igm),Mx,'symmetric');
M=sqrt(Gx.^2+Gy.^2);
mmax=max(max(M));
mmin=min(min(M));
T=(mmax+mmin)/2;
T=(T/mmax); % normalisasi threshold
M=M/mmax; % normalisasi citra
miu1=.1;
miu2=.2;
del_miu=abs(miu1-miu2);
[r c]=size(M);
an=1;
while an<=500
for ii=1:r
for jj=1:c
if M(ii,jj)<T
M1(ii,jj)=M(ii,jj);
else
M2(ii,jj)=M(ii,jj);
end
end
end
miu1=mean2(M1);
miu2=mean2(M2);
T=(miu1+miu2)*2;
an=an+1;
end
for ii=1:r
for jj=1:c
if M(ii,jj)<T
M(ii,jj)=0;
else
M(ii,jj)=1;
end
end
end
figure, imshow(M), title('Program Sendiri Untuk Sobel Filtering');

Berikut screenshot dari source code Operator Sobel




Tidak ada komentar

Diberdayakan oleh Blogger.