【发布时间】:2020-12-10 17:49:05
【问题描述】:
我正在关注 Andrew Ng 的 video1 video2 进行边缘检测,我正在尝试检测图像中是否存在过滤器。
因此,如果我有 2 个图像和 2 个过滤器(1 个检测水平线,1 个检测垂直线):
import numpy as np
from scipy.signal import convolve2d
img = np.array([[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0]])
img2 = np.array([[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[0,0,0,10,10,10],[0,0,0,10,10,10],[0,0,0,10,10,10]])
vertical = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
horizontal = np.array([[1,1,1], [0,0,0], [-1,-1,-1]])
我尝试使用对每个图像的过滤器进行卷积
print(convolve2d(img, vertical, 'valid'))
[[ 0 -30 -30 0]
[ 0 -30 -30 0]
[ 0 -30 -30 0]
[ 0 -30 -30 0]]
print(convolve2d(img, horizontal, 'valid'))
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
如果过滤器存在或不存在,有没有办法创建一个返回 1 / 0 的函数?
像img2这样更复杂的图像会变得更复杂:
print(convolve2d(img2, vertical, 'valid'))
[[ 0 -30 -30 0]
[ 0 -10 -10 0]
[ 0 10 10 0]
[ 0 30 30 0]]
print(convolve2d(img2, horizontal, 'valid'))
[[ 0 0 0 0]
[-30 -10 10 30]
[-30 -10 10 30]
[ 0 0 0 0]]
所以我试图想出一个函数来返回过滤器存在的百分比,但被卡住了。
【问题讨论】:
-
过滤器存在是什么意思?
-
例如,在
print(convolve2d(img, horizontal, 'valid'))中可以看到输出是一个全为0的数组——表示过滤器(水平)没有出现在图像中。那是因为图像(img)中没有横线,只有竖线 -
尝试
np.any(convolve2d(img, vertical, 'valid'))查看真/假陈述。您可以使用int命令将它们转换为整数。 -
谢谢凯特!这适用于第一张图像,但不适用于第二张图像。我也可以简单地对数组求和,看看它是否大于 0。但正如我提到的更复杂的图像(如
print(convolve2d(img2, vertical, 'valid')) -
上述方法应该适用于所有图像...你能澄清一下什么不起作用吗?
标签: python machine-learning conv-neural-network