OpenCV에서 모멘트는 정확히 무엇입니까?


최상 답변

배경 :

모멘트는 역학 및 통계에서 널리 사용되는 정량적 측정 (설명자)입니다. , 점 집합의 공간 분포를 설명합니다. 대부분의 단순한 용어로 모멘트 는 벡터 집합의 집계 된 측정 값을 제공하는 스칼라 집합입니다. 순간의 정의는 역학, 통계 및 컴퓨터 비전 영역에서 동일합니다. 모멘트 세트는 벡터 세트에 대한 가장 거친 설명으로 시작하고 점진적으로 더 높은 순서로 벡터 세트의 로컬 구조에 더 민감 해지기 시작합니다. 유용한 순서의 선택은 데이터 분포와 구분하려는 벡터 세트에 따라 달라집니다.

점이 질량 을 나타내는 경우 0 번째 모멘트는 총 질량이고 첫 번째 모멘트를 총 질량으로 나눈 값은 질량 중심 이며 두 번째 모멘트는 회전 관성 입니다. 점이 확률 밀도 를 나타내는 경우 0 번째 모멘트는 총 확률입니다 (예 : 1 ), 첫 번째 순간은 평균 , 두 번째 순간은 변동 , 세 번째 순간은 모멘트는 왜도 이고 네 번째 모멘트 (정규화 및 시프트 포함)는 첨도 입니다. . [Wikipedia : Moments (Mathematics)]

이미지의 순간 :

통계 및 역학의 순간 개념은 이미지를 대략적으로 설명하기 위해 컴퓨터 비전에서 빌려 왔습니다. 픽셀 강도 I ( x , y ), 원시 이미지 모멘트 M\_ {ij}는 다음 식으로 계산됩니다.

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

, 여기서 i, j는 순간의 순서입니다. 일반적인 이미지 모멘트 계산 파이프 라인에서 이미지 I (x, y)는 먼저 회색조 이미지를 계산 한 다음 모서리 또는 가장자리 감지기를 사용하여 이미지를 돌출 지점 세트로 축소하여 벡터 세트로 변환됩니다. 이러한 점의 공간적 분포는 시각적 콘텐츠가 다른 이미지가 두드러진 점의 공간적 분포가 현저하게 달라진다는 점에서 이미지의 특징을 나타냅니다. 이미지의 다양한 모멘트 순서 (돌출 점 집합)는 이미지의 질량, 중심, 주축 등을 제공합니다.

OpenCV의 모멘트 :

모멘트 계산의 예 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 < contours.size(); i++ )

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

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

vector mc( contours.size() );

for ( int i = 0; i < contours.size(); 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

이 예에서 이미지의 중심 모멘트는 이미지에서 여러 개체의 위치를 ​​찾는 데 유용합니다. 이미지에 여러 사람이 있고 (배경 혼란 문제가 해결되었다고 가정) 한 사람이 각 사람의 대략적인 위치에 관심이 있다면 중심 모멘트가 적절한 솔루션입니다.

다음과 같은 유사한 시나리오를 상상할 수 있습니다. 예를 들어 자동차를 추적 할 때 더 높은 순서의 모멘트가 관련됩니다. 자동차의 방향과 위치는 모두 중심, 분산 및 방향 이미지 모멘트의 축으로 쉽게 표현 될 수 있습니다.

Answer

OpenCV에 대해 묻는 질문은 일반적으로 컴퓨터 비전에도 적용될 수 있습니다. 95 ~ 100 \% 정확도로 방 안의 사람을 감지 할 수 있나요?

답은 다음과 같은 여러 요인에 따라 달라집니다.

시나리오 1 : 방 안에 15 명이 카메라를 향한 적절한 위치에 앉아 있습니다. 그들 모두는 명확하게 보이고 아무도 막히지 않습니다. 조명은 밝고 균일합니다. 카메라는 상당히 훌륭합니다.

물론, 그런 경우 99 \% 이상의 정확도를 달성 할 수 있습니다.OpenCV 또는 다른 딥 러닝 라이브러리가 되더라도 안전한 물 속에 있습니다. 이러한 시스템을 구축하는 것은 일상적인 고등학교 프로젝트보다 더 어렵거나 어렵지 않습니다.

시나리오 2 : 방 안에 15 명이 카메라를 향한 적절한 위치에 앉아 있습니다. 그들 중 일부는 서로를가립니다. 조명의 품질에 대한 보장은 없습니다. 그들 중 일부는 비표준 안경, 모자 또는 이상한 화장을 할 수 있습니다. 카메라는 여전히 괜찮습니다.

조금 까다로워지기 시작합니다. OpenCV는 이러한 경우 99 \% 이상의 정확도를 제공하지 않을 수 있습니다. TensorFlow 또는 기타 딥 러닝 아키텍처는 여전히 작동 할 수 있습니다. Facebook은 이러한 시나리오에서 사람들을 정기적으로 식별하고 태그를 지정합니다. 100 \% 정확합니까? 때에 따라 다르지. 모든 오픈 소스 라이브러리를 사용하여 이러한 시스템을 구축하는 것은 간단하지 않을 수 있습니다. 그러나 그다지 어렵지 않습니다. 약간의 노력과 약간의 운이 있다면 95 \% 이상을 달성 할 수 있습니다.

시나리오 2 : 방 안에 15 명이 카메라를 향하지 않고 적절한 위치에 앉아 있습니다. 그들 중 일부는 서로를가립니다. 조명이 엉망입니다. 이미지의 인물을 과소 노출하거나 과다 노출하는 경향이 있습니다. 그들 중 일부는 비표준 안경, 모자 또는 이상한 화장을 할 수 있습니다. 카메라는 15 년 전의 VGA 웹캠입니다.

이제 사용하는 도구에 관계없이 정확성을 보장 할 수 없습니다. 이 문제는 이제 연구 프로젝트가되는 것과 접해 있습니다.

질문에 대한 답은 해결하려는 시나리오에 따라 다릅니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다