Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/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 应用水平Sobel遮罩将图像旋转180度_Python_Image_Image Processing_Edge Detection_Sobel - Fatal编程技术网

Python 应用水平Sobel遮罩将图像旋转180度

Python 应用水平Sobel遮罩将图像旋转180度,python,image,image-processing,edge-detection,sobel,Python,Image,Image Processing,Edge Detection,Sobel,在我的一个个人项目中,我尝试在灰度图像上应用以下水平边缘遮罩。通过应用水平边缘遮罩,我试图检测图像中的水平边缘 [1 2 1 0 0 0 -1 -2 -1] 当我尝试用上面给出的蒙版卷积图像矩阵时,输出图像旋转了180度。我不确定这是预期行为还是我做错了什么 下面是卷积的代码片段 def convolution(self): result = np.zeros((self.mat_width, self.mat_height)) print(self.mat_width)

在我的一个个人项目中,我尝试在灰度图像上应用以下水平边缘遮罩。通过应用水平边缘遮罩,我试图检测图像中的水平边缘

[1 2 1
 0 0 0 
-1 -2 -1]
当我尝试用上面给出的蒙版卷积图像矩阵时,输出图像旋转了180度。我不确定这是预期行为还是我做错了什么

下面是卷积的代码片段

def convolution(self):
    result = np.zeros((self.mat_width, self.mat_height))
    print(self.mat_width)
    print(self.mat_height)

    for i in range(0, self.mat_width-self.window_width):
        for j in range(0, self.mat_height-self.window_height):
            # deflate both mat and mask 
            # if j+self.window_height >= self.mat_height:
            #   row_index = j+self.window_height + 1
            # else:

            row_index = j+self.window_height                
            col_index = i+self.window_width 

            mat_masked = self.mat[j:row_index, i:col_index]
            # pixel position 
            index_i = i + int(self.window_width / 2) 
            index_j = j + int(self.window_height / 2) 


            prod = np.sum(mat_masked*self.mask)


            if prod >= 255:
                result[index_i, index_j] = 255
            else:
                result[index_i, index_j] = 0

    return result
原始灰度输入图像在这里-

下面是生成的输出


写入输出时的索引是反向的。您正在翻转水平坐标和垂直坐标,这实际上是转置图像输出,您看到的输出是转置图像的结果

此外,您没有正确声明图像的输出大小。第一个维度跨越行或高度,而第二个维度跨越列或宽度。必须进行的第一项更改是交换输出图像的输入维度:

result = np.zeros((self.mat_height, self.mat_width))
其次,变量
index_i
水平遍历,而变量
index_j
垂直遍历。您只需翻转顺序即可正确写入结果:

        if prod >= 255:
            result[index_j, index_i] = 255
        else:
            result[index_j, index_i] = 0

如果出于某种原因您不想更改顺序,请保留代码原样,包括如何声明图像的输出维度,并简单地返回转置后的结果:

return result.T

这不是预期的输出。这可能会有帮助:谢谢rayryeng给我指的那个!我完全错过了,没问题!祝你好运