我正在尝试使用图片中显示的符号在matlab上实现Freeman Chain Code [4 adjacency]:
我的代码为我测试过的多个小矩阵提供了正确的链代码。但是,当我在实际图像文件上运行代码时,我遇到了一些连接组件的无限循环。无限循环我的意思是,它不仅仅在两个点之间循环,而是在不到达起点的情况下继续遍历组件。
我将在这里解释一下这个方法。
我连接的组件是4邻接,所有像素在矩阵中标记为“标签” 我从组件的第一个左上角像素(x,y)开始,并使用以下规则进行遍历: 我的初始遍历(xT,yT)是从左到右。 horDir = 0,因为0代表右边。
while(true)
if (horDir == 0)
go UP, or RIGHT, or DOWN, or LEFT (adjust x,y)
if (went LEFT)
horDir = 2
else
go DOWN, or LEFT, or UP, or RIGHT (adjust x,y)
if (went LEFT)
horDir = 0
if (xT,yT == x,y)
break;
当我决定在任何位置移动时,我确保我的最后一个动作与它不相反,以避免无限循环。例如,如果我通过0运动到达(x,y),我的代码确保在检查1和3运动后我做了2运动,所以这不是导致我进入无限循环的原因。
任何见解都将受到赞赏。 如果需要,我可以发布我的完整代码,但阅读起来会非常繁琐。
答案 0 :(得分:0)
按照in this answer to a somewhat related question所示的算法进行操作,my blog here进一步说明了这一点。
它有8个连接的链码,但很容易将该码调整为4连接链。