应用 Horizontal Sobel Mask 将图像旋转 180 度
Applying Horizontal Sobel Mask rotates the image by 180 degrees
在我的一个个人项目中,我尝试在灰度图像上应用以下水平边缘蒙版。通过应用水平边缘蒙版,我试图检测图像中的水平边缘。
[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 结果转置:
return result.T
在我的一个个人项目中,我尝试在灰度图像上应用以下水平边缘蒙版。通过应用水平边缘蒙版,我试图检测图像中的水平边缘。
[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 结果转置:
return result.T