Membahas operasi morfologi/bentuk, kalian harus tahu juga cara kerja menentukan sebuah center of gravity dari sebuah objek dan Orientation nya, setelah kalian pelajari Buku Pengolahan Citra Digital dengan Matlab – Segmentasi, kalian tentu ingin tahu cara kerja/kode tersebut secara lebih simple. Pembahasan ini dalam 1 topik geometri moment invariant
- operasi blob/labelling untuk menentukan jumlah objek
- menentukan lokasi centroid untuk masing-masing objek
- menentukan orientation nya
Perhitungan Center of Gravity
Perhitungan center of gravity banyak digunakan pada computer vision salah satunya dalam membuat aplikasi scanner Membuat Scanner Document Corner Detection OpenCV Java
Untuk mempermudah kalian pelajari, disajikan 1 buah gambar kotak putih yang punya orientasi miring 18 derajat.
Moment
Moment suatu objek dapat menggambarkan luas area, posisi, orientasi dengan persamaan sebagai berikut
![]()
Dengan
dan
adalah posisi pixel dengan intensitas
. Moment tingkat 0 dan 1 didefinisikan sebagai berikut
![]()
![]()
![]()
titik pusat \ center of gravity
dan
sebagai berikut
![]()
![]()
clc;clear all;close all;
I = imread('orientasi.png');
objek = im2bw(I);
%untuk menentukan lokasi centroid dari matrix biner
area = sum(sum(objek));
if area==0
X = 0;
Y = 0;
else
[rows,cols] = size(objek);
x = ones(rows,1)*[1:cols] ; % Matrix with each pixel set to its x coordinate
y = [1:rows]'*ones(1,cols) ; % " " " " " " " y "
X= sum(sum(double(objek).*x))/area;
Y= sum(sum(double(objek).*y))/area;
end
figure
imshow(objek)
text(X,Y,'*','Color','red','FontSize',30);
title('Center of Gravity')
Orientasi
Untuk perhitungan orientasi bisa kalian pelajari melalui kode berikut
clc;clear all;close all;
I = imread('orientasi.png');
objek = im2bw(I);
[rows,cols]=size(objek);
%calculating moment calculation%
[rows,cols] = size(objek);
x = ones(rows,1)*[1:cols];
y = [1:rows]'*ones(1,cols);
area = sum(sum(objek));
meanx = sum(sum(double(objek).*x))/area;
meany = sum(sum(double(objek).*y))/area;
%calculating the ellipse orientation
m20 = sum(sum(double(objek).*x.^2));
m02 = sum(sum(double(objek).*y.^2));
m11 = sum(sum(double(objek).*x.*y));
u20 = (m20/area) - (meanx^2);
u02 = (m02/area) - (meany^2);
u11 = (m11/area) - (meanx*meany);
tetha = 0.5*atan(2*u11/(u20-u02));
tetha= tetha*57.2957795
rotasi=imrotate(objek,tetha);
figure
subplot(1,2,1),imshow(objek),title('Asli');
subplot(1,2,2),imshow(rotasi),title(['Rotasi sebesar ' num2str(tetha)]);
Kalian bisa melihat penentuan orientasi sangat bisa diandalkan menggunakan rumus diatas, hanya berbeda sebesar
saja! Penerapan algoritma diatas banyak digunakan untuk scanner digital untuk deteksi arah rotasi serta melakukan operasi rotasi secara tepat!



