- 问题是,当标记为弱边缘(在两个阈值之间)的像素变为强边缘(已接受,如此处所述)时,需要递归地将相同的逻辑应用于连接的邻居(跟踪边缘)。
- 在命令式语言中,当从弱边缘变为强边缘时,可以使用堆栈来存储位置 (x,y)。然后,最后,在堆栈不为空时处理邻居,根据需要更新堆栈。但是,如何在没有 define_extern 函数的纯卤化物中实现类似的东西?
我已将此代码用于滞后,但缺少动态递归和/或堆栈在需要时对邻居进行滞后,这是我找不到如何实现的:
magnitude = input(x, y);
// mask receives only 0, 1, or 2.
mask(x, y) = select(magnitude > high_threshold, 2/*strong-edge*/, magnitude < low_threshold, 0/*no-edge*/, 1/*weak-edge*/);
// when mask(x,y) == 1 checks the neighbors to decide.
hysteresis(x, y) = select(mask(x, y) == 0, 0, mask(x, y) == 2, 255,
mask(x-1, y-1) == 2 || mask(x, y-1) == 2 || mask(x+1, y-1) == 2 ||
mask(x-1, y) == 2 || mask(x+1, y) == 2 ||
mask(x-1, y+1) == 2 || mask(x, y+1) == 2 || mask(x+1, y+1) == 2, 255/*weak-to-strong edge*/, 0);
怀疑,有没有办法通过递归、堆栈或其他任何东西,做这样的事情:
if (hysteresis(x, y) above changes from weak to strong edge, do) {
hysteresis(x-1, y-1); hysteresis(x, y-1); hysteresis(x+1, y-1);
hysteresis(x-1, y); hysteresis(x+1, y);
hysteresis(x-1, y+1); hysteresis(x, y+1); hysteresis(x+1, y+1);
}