Programming/openCV2024. 2. 26. 19:00

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()
Posted by 구차니