Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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_Opencv_Image Processing - Fatal编程技术网

Python 计算条纹图图像每个像素处的梯度角

Python 计算条纹图图像每个像素处的梯度角,python,opencv,image-processing,Python,Opencv,Image Processing,我试图计算条纹图中每个像素位置的梯度角度。问题是,有些像素位置的梯度为零,而在这些点上计算的角度是错误的。我尝试过插值,但它也会更改正确像素处的角度值。我需要准确的梯度角度值在计算其他量时,是否有任何方法可以在不面对上述问题的情况下获得准确的梯度角?如果不可能,是否有方法仅在错误区域进行插值?或者有任何其他方法可以克服此问题? 这是我使用OpenCV和Python的实现: k1 = np.array([[-1,0,1],[-1,0,1],[-1,0,1]]) dx1 = cv2.filter2

我试图计算条纹图中每个像素位置的梯度角度。问题是,有些像素位置的梯度为零,而在这些点上计算的角度是错误的。我尝试过插值,但它也会更改正确像素处的角度值。我需要准确的梯度角度值在计算其他量时,是否有任何方法可以在不面对上述问题的情况下获得准确的梯度角?如果不可能,是否有方法仅在错误区域进行插值?或者有任何其他方法可以克服此问题? 这是我使用OpenCV和Python的实现:

k1  = np.array([[-1,0,1],[-1,0,1],[-1,0,1]])
dx1 = cv2.filter2D(image,cv2.CV_64F,cv2.flip(k1,-1),(-1,-1))
dy1 = cv2.filter2D(image,cv2.CV_64F,cv2.flip(np.transpose(k1),-1),(-1,-1))
alpha1 =np.arctan2(np.abs(dy1),np.abs(dx1))
我在一个模拟的圆形条纹图上测试它,加上了高斯随机噪声。我在没有加噪声的情况下为图像附加了链接。

编辑1
实际上,我试图找到的是图像中条纹的方向,即每个像素的切线方向。因此,我首先找到梯度,并利用切线垂直于梯度的事实。因此,如果你能建议另一种方法来找到切线,那是受欢迎的。

。如果梯度真的变为零,并且这些点的角度真的没有得到正确的计算,这难道不表明数值python中的arctan2函数实际上不起作用吗?这怎么可能是真的?你确定梯度是零吗?你怎么知道每个点的确切梯度以及对应的角度是什么?它对没有附加噪声的图像有效吗?@PaulCornelius我在用Prewitt核计算x&y导数来计算梯度。在边缘极值附近,导数值非常低(不总是零),所以梯度不总是零,但这里计算的角度与邻域中的角度大不相同,对于每一个这样的极值都不同。梯度角度的图像会给出更好的图像。即使两个偏导数都为零,arctan2只给出角度=0。因此arctan2似乎不是问题的根源。@jblasco问题不是因为随机噪声,而是因为梯度的本质。它在没有噪声的图像中持续存在。Prewitt、Sobel和其他人只是梯度的近似值。我知道很少有方法可以计算更精确的梯度,但我不知道它们是否适用于这里。你能发布(或链接)一张带有渐变效果的图片,这样你的方法失败的地方就更清楚了吗?神秘。如果梯度真的变为零,并且这些点的角度真的没有得到正确的计算,这难道不表明数值python中的arctan2函数实际上不起作用吗?这怎么可能是真的?你确定梯度是零吗?你怎么知道每个点的确切梯度以及对应的角度是什么?它对没有附加噪声的图像有效吗?@PaulCornelius我在用Prewitt核计算x&y导数来计算梯度。在边缘极值附近,导数值非常低(不总是零),所以梯度不总是零,但这里计算的角度与邻域中的角度大不相同,对于每一个这样的极值都不同。梯度角度的图像会给出更好的图像。即使两个偏导数都为零,arctan2只给出角度=0。因此arctan2似乎不是问题的根源。@jblasco问题不是因为随机噪声,而是因为梯度的本质。它在没有噪声的图像中持续存在。Prewitt、Sobel和其他人只是梯度的近似值。我知道很少有方法可以计算更精确的梯度,但我不知道它们是否适用于这里。你能发布(或链接)一张带有渐变效果的图片,以便更清楚你的方法失败的地方吗?