我正在跟随Andrew Ng的视频1和视频2学习边缘检测,并且尝试检测图像中是否存在滤波器。
因此,如果我有两张图像和两个滤波器(一个检测水平线,另一个检测垂直线):
我尝试使用以下方法在每张图像上应用卷积滤波器:
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]]
所以我试图创建一个函数来返回滤波器存在的百分比,但遇到了困难。
回答:
根据评论中的讨论,我们决定计算矩阵中零(或非常小的值)的百分比。假设矩阵是arr
。那么,
mask = np.where(abs(arr) < 0.00001, 0, 1)percent_zeros = np.mean(mask)
其中0.00001
是阈值(低于这个值,我们认为所有条目都是零),percent_zeros
输出数组中非零的比例(值在0到1之间),其中1表示矩阵中没有零。