현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 개발 - Opencv 3D 재구성 깊이가 시야에 따라 변하지 않는 이유는 무엇입니까?
Opencv 3D 재구성 깊이가 시야에 따라 변하지 않는 이유는 무엇입니까?
넷째, 쌍안 매칭 및 시차 계산

스테레오 매칭은 주로 삼각 측량 원리에 따라 각 이미지 쌍 간의 대응을 찾아 시차도를 얻는 것이다. 시차 정보를 얻으면 투영 모형에 따라 원본 이미지의 깊이 및 3D 정보를 쉽게 얻을 수 있습니다. 스테레오 매칭 기술은 일반적으로 스테레오 비전에서 가장 어렵고 중요한 문제로 간주되며 주로 다음 요소의 영향을 받습니다.

(1) 광학 왜곡과 소음 (밝기, 색조, 채도 등 불균형. ) 을 참조하십시오

(2) 매끄러운 표면의 거울 반사

(3) 원근 수축

(4) 시야각이 왜곡되다

(5) 낮은 질감

(6) 반복/흐림 패턴

(7) 투명한 물체

(8) 중첩 및 불연속

현재 스테레오 일치 알고리즘은 컴퓨터 시각 분야의 난점과 핫스팟이다. 알고리즘에는 많은 것들이 있지만 일반적인 단계는 다음과 같습니다.

첫째, 지원 비용 계산

일치 비용의 계산은 전체 스테레오 일치 알고리즘의 기초이며, 실제로는 서로 다른 시차에서 그레이스케일 유사성을 측정합니다. 일반적인 방법은 그레이스케일 차이의 제곱 SD (제곱 강도 차이) 와 절대 AD (절대 강도 차이) 입니다. 또한 원래 일치 비용을 계산할 때 상한선을 설정하여 스택 중 불일치의 영향을 줄일 수 있습니다. AD 방법의 일치 비용을 예로 들면 다음 공식을 사용하여 계산할 수 있습니다. 여기서 T 는 설정된 임계값입니다.

그림 18

B, 일치하는 비용 오버레이

일반적으로 전역 알고리즘은 원래 일치 비용을 기준으로 후속 알고리즘을 계산합니다. 영역 알고리즘은 창 중첩을 통해 일치 비용의 신뢰성을 높여야 합니다. 원래 일치 비용에 따라 다음과 같이 나눌 수 있습니다.

그림 19

C, 시차 수집

영역 알고리즘의 경우 일치 비용 중첩이 완료되면 시차를 쉽게 얻을 수 있으며, 일정 범위 내에서 중첩 일치 비용이 가장 높은 점 (SAD 및 SSD 최소, NCC 최대) 만 해당 일치 지점으로 선택합니다 (예: 승자 통식 알고리즘). 글로벌 알고리즘은 최초 대응 비용을 직접 처리합니다. 일반적으로 먼저 에너지 평가 함수를 지정한 다음 다른 최적화 알고리즘을 사용하여 최소 에너지를 구하고 각 점의 시각적 차이를 계산합니다.

D, 시차 정제 (서브 픽셀 레벨)

대부분의 스테레오 일치 알고리즘에서 계산된 시차는 일반 응용 프로그램의 정밀도 요구 사항을 충족하는 불연속적인 특정 정수 값입니다. 그러나 정확한 3D 재구성과 같이 정확도가 높은 일부 상황에서는 초기 시차를 얻은 후 시차 (예: 일치 비용의 곡선 맞춤, 이미지 필터, 이미지 분할 등) 를 미세 조정하기 위한 조치가 필요합니다.

스테레오 매칭의 소개와 일반적인 매칭 알고리즘의 비교에 대해서는 Stefano Mattoccia 의 유인물' 입체 시각: 알고리즘과 응용' 페이지 190 페이지의 PPT 를 살펴보는 것이 좋습니다.

1.OpenCV 2. 1 과 opencv2.0 의 스테레오 시각적 차이점은 무엇입니까?

버전 2. 1 스테레오 비전 기능 향상:

(1) SGBM 스테레오 일치 알고리즘 (Heiko Hirschmuller 의 반전역 일치 및 상호 정보의 스테레오 처리) 이 추가되어 BM 알고리즘보다 더 명확한 시차도를 얻을 수 있습니다 (그러나 수평/대각선 경로는 GC 상태-> 에서 낮은 텍스처 영역에 쉽게 나타납니다

(2) 시차 효과: BM SGBM & gt;; Gc;

(3) 버전 2.0 에 비해 BM 알고리즘의 성능이 향상되었으며, 상태 매개변수에 왼쪽 및 오른쪽 뷰 ROI 에 대한 지원이 추가되었습니다 (ROI 1 및 roi2, 스테레오 보정 함수에 의해 생성됨).

(4)BM 알고리즘과 GC 알고리즘의 핵심 코드는 크게 변하지 않고 주로 멀티 스레드 (OpenMP 에서 TBB); 까지) 를 대상으로 합니다.

(5) cvfindstorecorresponsibility BM 함수의 시차 매개 변수에 대한 데이터 형식은 실제 시차를 제공하는 CV_32F 에 대한 지원을 추가합니다. 버전 2.0 은 CV_ 16S 만 지원하며 나누어야 합니다

2. 입체매칭에 쓰이는 이미지는 컬러일 수 있나요?

OpenCV2. 1 에서 BM 및 GC 알고리즘은 8 비트 그레이스케일 이미지에 대해서만 시차를 계산하는 반면 SGBM 알고리즘은 24 비트 (8 비트 *3) 컬러 이미지를 처리할 수 있습니다. 따라서 이미지를 읽을 때는 사용된 알고리즘에 따라 이미지를 처리해야 합니다.

Int color_mode = alg == STEREO_SGBM? 1: 0;

//////////////////////////////////

//이미지 로드

Cvgrabframe (lfcam);

Cvgrabframe (ricam);

프레임1= cvretrieveframe (lfcam);

프레임 2 = cvretrieveframe (ricam);

If (프레임1.empty ()) break;

Resize (프레임1,img 1, img_size, 0,0);

Resize (프레임 2, img2, img_size, 0,0);

//쌍안 일치 처리 이미지로 컬러 또는 그레이스케일 형식을 선택합니다.

만약 (! 색상 모델 & amp& ampcn & gt 1)

{

CvtColor(img 1, img 1gray, cv _ bgr2gray);

CvtColor(img2, img2gray, cv _ bgr2gray);

Img1p = img1gray;

Img2p = img2gray

}

기타

{

Img1p = img1;

Img2p = img2

}

3. 원본 이미지의 유효 픽셀 영역과 동일한 시차도를 어떻게 얻을 수 있습니까?

OpenCV2.0 및 이전 버전에서는 결과 시차도가 항상 왼쪽 및 오른쪽에 유효한 시차 데이터가 없는 뚜렷한 검은색 영역이 있었습니다. 시차도의 유효 픽셀 면적은 시차창 (ndisp, 일반적으로 양수, 16 으로 나눌 수 있음) 및 최소 시차 (MISP, 일반적으로 0 또는 음수) 와 관련이 있습니다. 시차 창이 클수록 시차도 왼쪽의 검은색 영역이 커지고 최소 시차가 작을수록 시차도 오른쪽의 검은색 영역이 커집니다. 그 이유는 참조 이미지 (일반적으로 왼쪽 뷰) 의 픽셀이 설정된 시차 일치 창에 따라 대상 이미지 (오른쪽 뷰) 의 해당 지점을 일치시킬 수 있도록 하기 위해 OpenCV 는 참조 이미지가 (NDISP-1+MINDSP) 열에서 오른쪽으로 시차, 열 0 에서

00177 static const int disparity _ shift = 4;

00411intndisp = state->; 결함 수량

00412 int mind ISP = state->; 정신적 차이

00413 intlofs = max (ndisp-1+mindisp, 0);

00414 introfs =-min (ndisp-1+mindisp, 0);

00415 인치 폭 = 왼쪽->; Cols, height = left-& gt;; 네;

00416 int width1= width-rofs-ndisp+1;

00420 shortfiltered = (short) ((mindisp-1) < & lt 시차 _ shift);

00466 // 차이 그래프의 왼쪽 및 오른쪽 경계 초기화

00467 for(y = 0;; Y< 높이; Y++)

00468 {

용 00469 for(x = 0;; X & ltlofsx++)

00470 dptr, 일반적으로 5x5 5x5 사이에 있어야 합니다 .. 2 1x2 1+0, 매개 변수는 홀수이고 유형은 int 여야 합니다.

Pre cap: 전처리 필터의 컷아웃 값, 전처리 출력 값만 유지됩니다. 일반적으로 5x5 에서 2 1x2 1 사이, 매개 변수는 홀수, int 유형이어야 합니다.

MinDisparity: 최소 시차, 기본값 0, 음수, int 유형.

NumberOfDisparities: 시차창, 즉 최대 및 최소 시차입니다. 창 크기는 16 의 정수 배수여야 하며 int 유형이어야 합니다.

//사후 처리 매개변수

TextureThreshold: 낮은 텍스처 영역에 대한 판단 임계값입니다. 현재 SAD 창에 있는 모든 인접 픽셀 점의 x 미분의 절대값 합계가 지정된 임계값보다 작으면 해당 창에 해당하는 픽셀 점의 시각적 차이는 0 입니다. 즉, sad windowize 픽셀 이웃을 통해 sad windowize 에서 계산된 x 미분의 절대값 합계가 매개변수 (픽셀에서 차이가 계산되지 않음) 보다 작으면 매개변수는 음수가 될 수 없으며 유형은 IIS 입니다

UniquenessRatio: 시차 고유성의 퍼센트. 시차창 내의 최소 비용이 2 차 저비용 (1+ 고유성 비율/100) 의 배수인 경우 최소 비용에 해당하는 시각적 차이는 픽셀의 시차입니다. 그렇지 않으면 픽셀의 시차는 0 (최적 (최소값) 사이의 최소 백분율 차이) 입니다. 비용 함수 값과 계산된 시차를 받아들이는 두 번째 최적 값, 즉 SAD(d) > 인 경우에만 계산된 시차 D = SAD (D) x (1+고유성 비율/1을 적용합니다. ) 모든 d 에 대해! = d *+/- 1 검색 범위 내), 이 매개변수는 음수가 될 수 없습니다. 보통 5- 15 정도의 값이 적당합니다. int 유형입니다.

SpeckleWindowSize: 시차 연결 영역의 변경 사항을 확인하는 데 사용되는 창 크기입니다. 이 값이 0 이면 반점 검사가 취소됩니다. Int 유형.

스펙클 범위: 시차 변경 임계값입니다. 창의 시차 변화가 임계값보다 크면 창의 시차를 지웁니다. Int 유형.

//OpenCV 2. 1 의 새 상태 매개 변수

Roi 1, roi2: 왼쪽 및 오른쪽 뷰의 유효 픽셀 영역으로, 일반적으로 쌍안 보정 단계의 cvStereoRectify 함수에 의해 전달되거나 직접 설정할 수 있습니다. 상태 매개변수에 ROI 1 및 roi2 가 설정되면 OpenCV 는 cvGetValidDisparityROI 함수를 통해 시차도의 유효 영역을 계산하고 유효 영역 외부의 시각적 차이는 지워집니다.

Disp 12MaxDiff: 왼쪽 시차도 (직접 계산) 와 오른쪽 시차도 (cvValidateDisparity 로 계산) 간에 허용되는 최대 차이입니다. 임계값을 초과하는 차이 값은 지워집니다. 이 매개변수의 기본값은-1 입니다. 즉, 왼쪽 및 오른쪽 시차 검사가 수행되지 않습니다. Int 유형. 프로그램 디버깅 단계에서 이 값은-1 을 유지하는 것이 가장 좋습니다. 이렇게 하면 서로 다른 시차 창에서 발생하는 시차 효과를 볼 수 있습니다. 특히 "OpenGL 동적 표시 쌍안 시각적 3D 재구성 효과 예" 에 대한 설명을 참조할 수 있습니다.

위 매개변수 중 시차 생성 효과에 큰 영향을 미치는 주요 매개변수는 SADWindowSize, numberOfDisparities 및 uniquenessRatio 입니다. 일반적으로 세 개의 매개변수만 조정하면 되고 나머지 매개변수는 기본값으로 설정할 수 있습니다.

OpenCV2. 1 에서 BM 알고리즘에는 c 와 C++ 모듈이 있습니다.

(2) 입체 상태

SGBM 알고리즘의 상태 매개변수는 대부분 BM 알고리즘의 상태 매개변수와 일치하며, 다음은 다른 부분만 설명합니다.

Sadwindowize: 허용되는 범위는 [1, 1 1] 인 sad 창의 크기이며 일반적으로 3x3 에서1까지입니다

P 1, P2: 시차 변화의 부드러움을 제어하는 매개변수입니다. P 1 및 P2 값이 클수록 시차가 부드러워집니다. P 1 은 인접 픽셀 시차 증가/감소 1 시의 페널티 계수입니다. P2 는 인접한 픽셀 점의 시차 변화 값이 1 보다 클 때의 페널티 계수입니다. P2 는 P 1 보다 커야 합니다. OpenCV2. 1 제공된 루틴 stereo_match.cpp 는 P 1 및 P2 에 적합한 값을 제공합니다.

FullDP: 부울 값. TRUE 로 설정하면 전체 2 단계 동적 프로그래밍 알고리즘을 실행할 때 O(W*H*numDisparities) 바이트를 차지하므로 고해상도 이미지에 많은 메모리 공간을 사용합니다. 보통 FALSE 로 설정됩니다.

OpenCV2. 1 의 SGBM 알고리즘은 C++ 언어로 작성되었으며 C 구현 모듈은 없습니다. H. Hirschmuller 가 제안한 원시 알고리즘에 비해 주요 변경 사항은 다음과 같습니다.

기본적으로 이 알고리즘은 5 개의 방향만 사용하는 단일 채널 DP 알고리즘을 실행하고, 전체 DP 가 활성화되면 8 개의 방향을 사용합니다 (많은 메모리를 사용할 수 있음).

일치 비용 함수를 계산할 때 알고리즘은 픽셀 일치 대신 블록 일치 방법을 사용합니다 (SADWindowSize= 1 이 픽셀 일치와 같더라도).

BT 알고리즘 (S. Birchfield 및 C. Tomasi 의 "픽셀에서 픽셀 입체로의 깊이 불연속성") 을 사용하여 일치 비용을 계산하지만 교차 엔트로피 정보를 기반으로 하는 일치 비용 계산은 이루어지지 않습니다.

BM 알고리즘의 일부 사전 및 사후 처리 프로그램이 추가되었습니다.