Archive for the ‘Portofolio1’ Category
Portofolio 1
Posted May 18, 2008
on: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
Citra lego biner dengan nilai threshold 0.64
di negasi
Memilih objek 9
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
Objek : 6
area = 3158
centroid = 305.5741 342.6491
theta = 0.0336
roundness = 0.0319
Objek : 3
area = 1741
centroid = 137.0270 352.6588
theta = 0.1400
roundness = 0.8212