【发布时间】:2021-03-22 07:53:48
【问题描述】:
我正在尝试为“harris_corner_detector”函数实现创建一个随机测试(非常普遍且略微不正确:在图像中找到角点的函数) 在测试中,我想在二进制 numpy 矩阵中创建随机简单的形状(很容易知道它们的角的坐标)(例如矩形、三角形、菱形(菱形)等......)并检查 harris 实现是否找到正确的角落。
我已经实现了一个随机“绘制”轴平行矩形的函数,但是当涉及到不平行于轴的形状时,我找不到有效的方法。
为了创建一个随机矩形,我在两个轴上随机选择一个起点和一个终点,然后更改这些边界内所有单元格的值,如下所示:
获取随机坐标:
def _get_random_coords(self, start, end):
x_start, y_start = np.random.randint(start, end, 2)
x_end = np.random.randint(x_start + 7, end + 20)
y_end = np.random.randint(y_start + 7, end + 20)
return (x_start, x_end, y_start, y_end)
绘制随机矩形(背景值为 255,形状为 0):
mat = np.ones((1024, 1024)) * 255
mat[x_start: x_end, y_start: y_end] = np.zeros((x_end - x_start, y_end - y_start))
但是当谈到有效地绘制菱形时,我不知所措。我能想到的就是运行一个像这样创建钻石的循环:
def _get_rhombus(self, size):
rhombus = []
for i in range(size):
rhombus.append(np.zeros(i+1))
for i in range(size - 1, 0, -1):
rhombus.append(np.zeros(i))
return np.array(rhombus)
然后另一个循环将其添加到更大的矩阵中。 但是这种方法在测试时效率非常低(我会画数百个,其中一些可能很大)。
还有更好的想法吗?或者 - 有没有更好的方法来测试这个?
提前致谢。
【问题讨论】:
-
你可以创建一个随机的矩形,然后取其边的中点作为菱形的顶点。
-
这是个好主意!但我仍然面临主要问题 - 有效地绘制它。 (除非我理解错了)
标签: python numpy testing draw corner-detection