Jumat, 16 Mei 2008

Portofolio 1



1. mengubah image jadi hitam putih
bw = myfunc('lego1.png', 0.6)





2. BWL = bwlabel(~bw)
ob1 = BWL==1
ob2 = BWL==2
ob3 = BWL==3
[area, centroid, theta, roundness] = moments(ob1)
[area, centroid, theta, roundness] = moments(ob2)
[area, centroid, theta, roundness] = moments(ob3)







Listing of myfunc.m :
function bw = myfunc(im, thresh)
image = imread(im);
g = rgb2gray(image);
bw = im2bw(image,thresh);
imshow(bw)
imwrite(bw,'image_blacknwhite.png');
Listing of moments.m :

% 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 matrix image
[rows,cols] = size(im);
x = ones(rows,1)*[1:cols]; % Matrix pada setiap pixel set pada koordinat x
y = [1:rows]'*ones(1,cols); % Matrix pada setiap pixel set pada koordinat y

area = sum(sum(im));
meanx = sum(sum(double(im).*x))/area;
meany = sum(sum(double(im).*y))/area;
centroid = [meanx, meany];

% mengubah koordinat ke pusat masa
x = x - meanx;
y = y - meany;

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

denom = b^2 + (a-c)^2;

if denom == 0
% tetha mengubah sudut
thetamin = 2*pi*rand;
thetamax = 2*pi*rand;
roundness = 1;
else
sin2thetamin = b/sqrt(denom); %solusi positif
sin2thetamax = -sin2thetamin; %solusi negatif
cos2thetamin = (a-c)/sqrt(denom); %solusi positif
cos2thetamax = -cos2thetamin; %solusi negatif

thetamin = atan2(sin2thetamin, cos2thetamin)/2;
thetamax = atan2(sin2thetamax, cos2thetamax)/2;
Imin = 0.5*(c+a) - 0.5*(a-c)*cos2thetamin - 0.5*b*sin2thetamin;
Imax = 0.5*(c+a) - 0.5*(a-c)*cos2thetamax - 0.5*b*sin2thetamax;
roundness = Imin/Imax;
end

% menggambar sumbu sesuai dengan objek
rho = sqrt(area)/(roundness + 0.5) + 5 ;
[X1,Y1] = pol2cart(thetamin, rho);
[X2,Y2] = pol2cart(thetamin + pi, rho);

imshow(im);
hold;
line([X1 + meanx, X2 + meanx],[Y1 + meany, Y2 + meany])
plot(meanx, meany,'r+')
hold;


Tidak ada komentar: