python 拉普拉斯滤波器 returns 错误值
python laplace filter returns wrong values
因为我需要在 python 中实现一种图像处理程序,所以我也想实现拉普拉斯滤波器。我用了矩阵
-1 -1 -1
-1 8 -1
-1 -1 -1
并实现了以下代码:
for row in range(1, (len(self._dataIn) - 1)):
for col in range(1, (len(self._dataIn[row])- 1)):
value = (- int(self._dataIn[row - 1][col -1][0])
- int(self._dataIn[row - 1][col][0])
- int(self._dataIn[row - 1][col + 1][0])
- int(self._dataIn[row][col -1][0]) +
(8 * int(self._dataIn[row][col][0]))
- int(self._dataIn[row][col +1][0])
- int(self._dataIn[row + 1][col -1][0])
- int(self._dataIn[row + 1][col][0])
- int(self._dataIn[row + 1][col +1][0]))
self._dataIn[row][col][0] = np.minimum(255, np.maximum(0, value))
self._dataIn[row][col][1] = np.minimum(255, np.maximum(0, value))
self._dataIn[row][col][2] = np.minimum(255, np.maximum(0, value))
self.update()
self._dataIn 是图像数组。在另一种方法中,我将图像转换为
np.array(img)
处理过滤方法后,我使用
重新转换图像
Image.fromarray(...)
但是当我启动程序时,它returns一个奇怪的结果:
我已经多次更改我的代码,但无法弄清楚我做错了什么。我的实施有问题吗?还是我误解了过滤器?
提前致谢!
您不得就地修改数组,即如果您将过滤器应用于 self._dataIn
,则不得将结果存储在 self._dataIn
中,因为在下一次过滤操作中,输入不会是正确的。
顺便说一下,使用 numpy
矩阵乘法进行过滤(并使用单分量图像)更容易:
img = img.mean(2) # get a NxM image
imgOut = np.zeros (img.shape, dtype = uint8)
M = np.array([
[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]
])
for row in range(1, img.shape[0] - 1):
for col in range(1, img.shape[1] - 1):
value = M * img[(row - 1):(row + 2), (col - 1):(col + 2)]
imgOut[row, col] = min(255, max(0, value.sum ()))
结果:
因为我需要在 python 中实现一种图像处理程序,所以我也想实现拉普拉斯滤波器。我用了矩阵
-1 -1 -1
-1 8 -1
-1 -1 -1
并实现了以下代码:
for row in range(1, (len(self._dataIn) - 1)):
for col in range(1, (len(self._dataIn[row])- 1)):
value = (- int(self._dataIn[row - 1][col -1][0])
- int(self._dataIn[row - 1][col][0])
- int(self._dataIn[row - 1][col + 1][0])
- int(self._dataIn[row][col -1][0]) +
(8 * int(self._dataIn[row][col][0]))
- int(self._dataIn[row][col +1][0])
- int(self._dataIn[row + 1][col -1][0])
- int(self._dataIn[row + 1][col][0])
- int(self._dataIn[row + 1][col +1][0]))
self._dataIn[row][col][0] = np.minimum(255, np.maximum(0, value))
self._dataIn[row][col][1] = np.minimum(255, np.maximum(0, value))
self._dataIn[row][col][2] = np.minimum(255, np.maximum(0, value))
self.update()
self._dataIn 是图像数组。在另一种方法中,我将图像转换为
np.array(img)
处理过滤方法后,我使用
重新转换图像Image.fromarray(...)
但是当我启动程序时,它returns一个奇怪的结果:
我已经多次更改我的代码,但无法弄清楚我做错了什么。我的实施有问题吗?还是我误解了过滤器?
提前致谢!
您不得就地修改数组,即如果您将过滤器应用于 self._dataIn
,则不得将结果存储在 self._dataIn
中,因为在下一次过滤操作中,输入不会是正确的。
顺便说一下,使用 numpy
矩阵乘法进行过滤(并使用单分量图像)更容易:
img = img.mean(2) # get a NxM image
imgOut = np.zeros (img.shape, dtype = uint8)
M = np.array([
[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]
])
for row in range(1, img.shape[0] - 1):
for col in range(1, img.shape[1] - 1):
value = M * img[(row - 1):(row + 2), (col - 1):(col + 2)]
imgOut[row, col] = min(255, max(0, value.sum ()))
结果: