Co přesně jsou momenty v OpenCV?

Nejlepší odpověď

Pozadí:

Moment je kvantitativní měřítko (deskriptor), populárně používané v mechanice a statistice , popsat prostorové rozložení množiny bodů. Zjednodušeně řečeno, momenty jsou množinou skalárů, které poskytují agregovanou míru množiny vektorů. Definice momentů je stejná napříč doménami mechaniky, statistiky a počítačového vidění. Sada momentů začíná nejhrubším popisem sady vektorů a postupně s vyššími řády začíná být citlivější na místní struktury v sadě vektorů. Volba užitečného pořadí momentu závisí na distribuci dat a souborech vektorů, které mě zajímají rozlišovat.

Pokud body představují hmotnost , pak nultý moment je celková hmotnost, první okamžik dělený celkovou hmotností je těžiště a druhým momentem je rotační setrvačnost . Pokud body představují hustotu pravděpodobnosti , je nulovým okamžikem celková pravděpodobnost (tj. jedna ) ), první okamžik je průměr , druhý okamžik je varianta , třetí momentem je šikmost a čtvrtým momentem (s normalizací a posunem) je kurtosis . [Wikipedia: Moments (Mathematics)]

Momenty v obrazech:

Koncept okamžiku ve statistice a mechanice byl vypůjčen v počítačovém vidění, aby hrubě popsal obraz. Pro obrázek s intenzitou pixelů I ( x , y ), prvotní momenty obrazu M\_ {ij} se vypočítají pomocí

M\_ {ij} = \ sum\_ {x} \ sum\_ {y} I (x, y)

, kde i, j jsou pořadí okamžiků. V typickém potrubí pro výpočet momentu obrazu je obraz I (x, y) převeden na sadu vektorů nejprve výpočtem obrazu v šedém měřítku a poté pomocí detektoru rohů nebo hran pro zmenšení obrazu na sadu výběžků. Prostorové rozložení těchto bodů charakterizuje obraz v tom, že obraz s různým vizuálním obsahem bude mít měřitelně odlišné prostorové rozložení hlavních bodů. Různé pořadí momentů obrazu (sada hlavních bodů) poskytuje hmotu, těžiště, hlavní osu atd. Obrazu.

Okamžiky v OpenCV:

Příklad výpočetních momentů pro obrázek v opencv.

Mat src, gray; // opencv matrices for the image and its grayscale

src = imread( "../path/to/image.jpg" , 1 ); // load the image

cvtColor( src, gray, CV\_BGR2GRAY ); // convert to grayscale

vector > contours; // image contour is set of salient points of the image we are interested in

vector hierarchy;

//Detect edges using canny

Canny( gray, canny\_output, 50, 150, 3 ); // canny edges are low-level image structures that are used by contour detector

//Find contours

findContours( canny\_output, contours, hierarchy, CV\_RETR\_TREE, CV\_CHAIN\_APPROX\_SIMPLE, Point(0, 0) );

// Get the moments of image

vector mu(contours.size() );

for ( int i = 0; i

{ mu[i] = moments( contours[i], false ); }

//Get the mass centers (image has multiple contours):

vector mc( contours.size() );

for ( int i = 0; i

{ mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 ); } // compute the centers of mass of each contour in the image

V tomto příkladu je těžiště obrázku užitečné k vyhledání umístění více objektů v obrázku. Pokud má obrázek více lidí (předpokládejme, že jsou vyřešeny problémy s nepořádkem na pozadí) a jednoho zajímalo přibližné umístění každé osoby, pak je těžiště vhodným řešením.

Můžete si představit podobné scénáře, kdy vyšší pořadí momentů se stane relevantním, například při sledování automobilů, orientaci automobilů a pozici lze snadno vyjádřit těžištěm, rozptylem a momenty obrazové osy orientace.

Odpovědět

Otázku, kterou jste položili ohledně OpenCV, lze obecně aplikovat také na počítačové vidění. Můžeme detekovat lidi v místnosti s přesností 95 – 100\%?

Odpověď závisí na mnoha faktorech:

Scénář 1: V místnosti je 15 lidí, kteří sedí na odpovídající pozici obrácené k fotoaparátu. Všechny jsou jasně viditelné, nikdo není uzavřen. Osvětlení je jasné a jednotné. Fotoaparát je přiměřeně dobrý.

Jistě, v takovém případě můžeme dosáhnout> 99\% přesnosti.Ať už je to OpenCV nebo nějaká jiná knihovna pro hluboké učení, jste v bezpečné vodě. Vybudování takového systému by nemělo být o nic složitější než běžný projekt na střední škole.

Scénář 2: V místnosti je 15 lidí, kteří sedí na vhodné pozici čelem k fotoaparátu. Některé se navzájem uzavírají. Neexistuje žádná záruka kvality osvětlení. Někteří z nich mohou nosit nestandardní brýle, klobouky nebo divný make-up. Fotoaparát je stále poměrně dobrý.

Začíná to být trochu složitější. OpenCV vám v takových případech nemusí poskytnout> 99\% přesnost. TensorFlow nebo nějaká jiná architektura hlubokého učení může stále fungovat. Facebook v takových scénářích pravidelně identifikuje a označí lidi. Jsou 100\% přesné? Záleží. Budování takového systému pomocí všech knihoven open source, které máme k dispozici, nemusí být banální. Není to však ani příliš obtížné. S trochou úsilí a trochou štěstí lze dosáhnout> 95\%.

Scénář 2: V místnosti je 15 lidí, kteří sedí v příslušné poloze a nemusí nutně směřovat ke kameře. Některé z nich se navzájem uzavírají. Osvětlení je hovno. Má tendenci podexponovat nebo přeexponovat lidi v obraze. Někteří z nich mohou nosit nestandardní brýle, klobouky nebo divný make-up. Fotoaparát je VGA webová kamera z doby před 15 lety.

Nyní nemáte žádné záruky přesnosti bez ohledu na to, jaké nástroje používáte. Tento problém nyní hraničí s tím, že se stane výzkumným projektem.

Odpověď na vaši otázku závisí na tom, jaký scénář chcete řešit.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *