Megabangetz’s Weblog

Archive for the ‘Portofolio1’ Category

Tugas 1

Fungsi yang dapat mengubah citra lego berwarna menjadi citra lego biner

dengan nilai threshold tertentu.

Nama : Elvira Megasari S.

NRP : 5105100020

% memanggil gambar lego

im = imread(‘lego1.png’);

% memunculkan gambar lego

imshow(im);

% mengubah citra lego berwarna menjadi citra lego biner dengan nilai

% threshold 0.64

BW = im2bw(im,0.64);

% Citra biner yang terbentuk akan mempunyai warna hitam untuk obyek, dan

% warna putih untuk background

imshow(BW);

% diubah warna hitam untuk background, dan warna putih untuk obyek

imshow(~BW);

% untuk pemisahan dan pelebelan citra biner

BWL = bwlabel(~BW);

imagesc(BWL), colormap(gray);

% memilih salah satu objek

im = BWL==9;

imshow(im);

Hasilnya sebagai berikut:

lego1.png

clip_image002

Citra lego biner dengan nilai threshold 0.64

clip_image004

di negasi

clip_image006

clip_image008

Memilih objek 9

clip_image010

Tugas 2

% MOMENTS

%

% Fungsi menghitung momen sebuah citra biner dan mengembalikan

% area, centroid, sudut dari sumbu inertia minimum, dan sebuah

% ukuran ‘kebulatan’. Fungsi ini mengasumsikan bahwa hanya ada

% satu obyek pada citra biner.

%

% function [area, centroid, theta, roundness] = moments(im)

%

% Argument: im – citra biner berisi nilai 0 atau 1

%

% Returns: area – luasan citra biner

% centroid – vektor dengan 2 elemen

% theta – sudut sumbu kelembaman minimum (radian)

% roundness – ratio minimum inertia/maximum inertia.

%

% Fungsi ini juga menampilkan citra dan letak dari

% centroid dan sumbu inertia minimum. Area yang dihitung

% harus ditampilkan sebagai title di citra.

function [area, centroid, theta, roundness] = moments(im)

% mendapatkan ukuran matriks image

[rows,cols] = size(im);

% mendapatkan koordinat x

x = ones(rows,1)*[1:cols];

% mendapatkan koordinat y

y = [1:rows]’*ones(1,cols);

% menghitung luasan image/area

area = sum(sum(im));

area

% menghitung mean x

meanx = sum(sum(double(im).* x))/area;

% menghitung mean y

meany = sum(sum(double(im).*y))/area;

%mendapatkan vektor centroid

centroid = [meanx meany];

% mendapatkan invers x dan y

x = x – meanx;

y = y – meany;

a = sum(sum(double(im).*(x.^2)));

b = 2*(sum(sum(double(im).*x.*y)));

c = sum(sum((y.^2).*double(im)));

% mendapatkan nilai theta

denominator = sqrt(b^2 + (a-c)^2);

y1 = b/denominator;

x1 = (a-c)/denominator;

minTheta = 0.5 * atan2(y1,x1);

maxTheta = 0.5 * atan2(-y1,-x1);

theta = minTheta;

% hitung roundness

Imin = 0.5 * (c + a) – (0.5 * (a – c) * cos(2 * minTheta)) – (0.5 * b * sin(2 * minTheta));

Imax = 0.5 * (c + a) – (0.5 * (a – c) * cos(2 * maxTheta)) – (0.5 * b * sin(2 * maxTheta));

roundness = Imin/Imax;

xmin = [meanx-50 : meanx + 50];

ymin = ((xmin – meanx) * tan(minTheta)) + meany;

figure, imshow(im),

title([‘area : ‘, num2str(area),’ centroid: [‘, num2str(centroid), ‘]’, ‘theta: ‘, num2str(theta), ’roundness : ‘, num2str(roundness)]),

line(xmin, ymin, ‘Color’, ‘b’, ‘LineWidth’,1),

text(meanx-3, meany, ‘X’);

pixval on;

Hasilnya sebagai berikut:

Objek : 9

area = 5393

centroid = 339.1081 227.2199

theta = -0.8402

roundness = 0.1136

clip_image012

Objek : 6

area = 3158

centroid = 305.5741 342.6491

theta = 0.0336

roundness = 0.0319

clip_image014

Objek : 3

area = 1741

centroid = 137.0270 352.6588

theta = 0.1400

roundness = 0.8212

clip_image016



  • None
  • No comments yet

Archives