Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何改进此视差图?_Python_Image Processing_Disparity Mapping - Fatal编程技术网

Python 如何改进此视差图?

Python 如何改进此视差图?,python,image-processing,disparity-mapping,Python,Image Processing,Disparity Mapping,我一直在编写一段代码来创建视差图 我不想使用OpenCV来加载/保存图像,将其转换为灰度 到目前为止,我已经实现了所解释的算法。我使用的是使用绝对差之和(SAD)的算法版本。为了测试我的实现,我使用了来自的立体图像 这是我的密码: import cv2 import numpy as np # Load the stereo images img = cv2.imread('bow-view1.png') img2 = cv2.imread('bow-view5.png') # convert

我一直在编写一段代码来创建视差图

我不想使用OpenCV来加载/保存图像,将其转换为灰度

到目前为止,我已经实现了所解释的算法。我使用的是使用绝对差之和(SAD)的算法版本。为了测试我的实现,我使用了来自的立体图像

这是我的密码:

import cv2
import numpy as np

# Load the stereo images
img = cv2.imread('bow-view1.png')
img2 = cv2.imread('bow-view5.png')
# convert stereo images to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
# get the size of the images
# l -> lines
# c -> columns
# v -> channel (RGB)
l,c,v = img.shape

# initialize arrays
minSAD = np.ones((l,c)) * 1000
sad = np.ones((l,c))
winsad = np.ones((l,c))
disp = np.zeros((l,c))

max_shift = 30

# set size of the SAD window
w_l = 2
w_c = 2

for shift in range(max_shift):
    print("New Shift: %d"%(shift))
    for u in range(0,l):
        for v in range(0,c):
            # calculate SAD
            if(u+shift < l):
                sad[u,v] = np.abs((int(gray[u,v]) - int(gray2[u+shift,v])))
            sum_sad = 0
            for d in range(w_l):
                for e in range(w_c):
                    if(u+d < l and v+e < c):
                        sum_sad +=  sad[u+d,v+e]

            winsad[u,v] = sum_sad
            # Save disparity
            if(sad[u,v] < minSAD[u,v]):
                minSAD[u,v] = winsad[u,v]
                disp[u,v] = shift

print("Process Complete")
# write disparity map to image  
cv2.imwrite('outputHT/disparity/sad.png',disp)
print("Disparity Map Generated")
导入cv2
将numpy作为np导入
#加载立体图像
img=cv2.imread('bow-view1.png')
img2=cv2.imread('bow-view5.png')
#将立体图像转换为灰度
灰色=cv2.CVT颜色(img,cv2.COLOR\U BGR2GRAY)
gray2=cv2.CVT颜色(img2,cv2.COLOR\u BGR2GRAY)
#获取图像的大小
#l->行
#c->columns
#v->通道(RGB)
l、 c,v=img.形状
#初始化数组
minSAD=np.ones((l,c))*1000
sad=np.ones((l,c))
winsad=np.one((l,c))
disp=np.零((l,c))
最大位移=30
#设置悲伤窗口的大小
w_l=2
w_c=2
对于范围内的换档(最大换档):
打印(“新班次:%d”%(班次))
对于范围(0,l)内的u:
对于范围(0,c)内的v:
#算计悲伤
如果(u+shift
这是该代码生成的输出:

我应该得到类似(或非常接近)的输出:

我尝试过几种窗口大小(在悲伤的一步中),但我一直得到像这样的结果或全黑的图像


任何能帮助我解决问题或至少能为我指明正确方向的答案都将不胜感激

这里您缺少的一点是,
disp
数组中的所有值都将在0和30之间,对应于黑色像素,因此为了将这些值映射到0和255之间,您必须将移位乘以8。

在我看来,根据该网页,您所要做的就是生成视差图。