Skip navigation

Momentumok

Előismeret

Számszerű leírást adnak az alakzatokról, az alakzatokat alkotó objektumpontok koordinátából kerülnek számításra.

p+q-ad rendű momentum:

mpq=i=1Nxpiyqifi

Vagyis az objektumpontok x koordinátáit p-edik, az y koordinátáit q-adik hatványra emeljük és összeszorozva összegezzük. Az fi érték az intenzitásérték az adott pozíción. Abban az esetben használjuk, amennyiben az intenzitásérték nagysága azt jellemzi, mennyire erősen kapcsolódik az objektumhoz a képpont. Ha nincs ilyen jelentés társítva, akkor érdemes a bináris verziót használni, vagyis fi legyen 1 az objektumpontokban.

Nézzük meg néhány momentum jelentését!

m00 = az alakzat mérete

m10 = az alakzat x-koordinátáinak összege

m01 = az alakzat y-koordinátáinak összege

m01/m00 = az alakzat súlypontjának x koordinátája

m10/m00 =az alakzat súlypontjának y koordinátája

Az alakzatra kiszámolt momentum értékek jól láthatóan függnek attól, hogy az alakzat a kép mely részén található. Pozíciótól független (vagyis eltolás invariáns) leírást a centrális momentumokkal érhetünk el. Ekkor az x és y koordináta értékekből kivonjuk a súlypont (alakzat x és y koordináták átlaga) megfelelő koordinátáját.

mupq=i=1N(xix¯¯¯)p(yiy¯¯¯)qfi

Normalizált centrális momentumok számítása (amennyiben p+q ≥ 2):

nupq=mupqmup+q2+100

Ezen momentumokkal eltolás és skála invarianciát érhetünk el.

A Hu momentumok számítása az alábbi:

hu = cv2.HuMoments(m[, hu])

A bemeneti m a moments() függvény eredménye.

Példaprogram

import numpy as np
import cv2

img = cv2.imread("dolphin.png",cv2.IMREAD_GRAYSCALE);
ret,img_inv = cv2.threshold(img,0,255,cv2.THRESH_BINARY_INV);
img, contours,hierarchy = cv2.findContours(img_inv, 1, 2);
cnt = contours[0];
M = cv2.moments(cnt);
print( M )