Weighted Least Squares filter라는게 sgbm 예제를 찾다가 나옴
[링크 : https://docs.opencv.org/3.4/d9/d51/classcv_1_1ximgproc_1_1DisparityWLSFilter.html]
필터라는 이름 답게
왼쪽의 노이즈가 심해 보이는 깊이 정보를, 면 단위로 정렬해서 보기 쉽게 변환해준다.
[링크 : https://forum.opencv.org/t/bad-disparity-map-with-sgbm-algorithm/8209]
[링크 : https://stackoverflow.com/questions/62627109/how-do-you-use-opencvs-disparitywlsfilter-in-python]
[링크 : https://amroamroamro.github.io/mexopencv/opencv_contrib/disparity_filtering_demo.html]
+
BM(block match) 알고리즘에 filter 적용 예제
[링크 : https://docs.opencv.org/4.x/d3/d14/tutorial_ximgproc_disparity_filtering.html]
+
2024.02.28
WLS 필터는 별도의 패키지를 설치해야 한다
$ pip install opencv-contrib-python |
패키지 설치 후에 처리해보면 확실히 좀 더 나은 느낌이긴 하다.
BM 에 적용해봤으니 이제 SGBM 에도 해봐야..
WLS 필터 적용 전 | WLS 필터 적용 후 |
$ cat depth.py import numpy as np import cv2 as cv from matplotlib import pyplot as plt imgL = cv.imread('tsukuba_l.png', cv.IMREAD_GRAYSCALE) imgR = cv.imread('tsukuba_r.png', cv.IMREAD_GRAYSCALE) max_disparity=16 stereo = cv.StereoBM_create(max_disparity, blockSize=15) disparity = stereo.compute(imgL,imgR) plt.imshow(disparity) plt.show() right_matcher = cv.ximgproc.createRightMatcher(stereo); left_disp = stereo.compute(imgL, imgR); right_disp = right_matcher.compute(imgR, imgL); # Now create DisparityWLSFilter wls_filter = cv.ximgproc.createDisparityWLSFilter(stereo); sigma = 1.5 lmbda = 8000.0 wls_filter.setLambda(lmbda); wls_filter.setSigmaColor(sigma); filtered_disp = wls_filter.filter(left_disp, imgL, disparity_map_right=right_disp); plt.imshow(filtered_disp) plt.show() |
'Programming > openCV' 카테고리의 다른 글
openCV + python + matplotlib (0) | 2024.05.23 |
---|---|
openCV stereo SBGM 예제, depth map을 imshow로 보기 (0) | 2024.02.26 |
opencv stereo 계산 알고리즘 (0) | 2024.02.24 |
opencv 스테레오 카메라 깊이 처리하기 (0) | 2024.02.21 |
opencv 스테레오 사진 깊이 분석 전처리 - 렌즈 왜곡 보정 (0) | 2024.02.20 |