在图像Canny边缘检测、形态学操作后还是存在边缘上的断点。
本文理论来自链接1,代码从链接2 、链接3修改来的。
八领域做个简单的记录。
0 | (x, y + 1) | 0 |
---|---|---|
(x - 1, y) | P(x, y) | (x +1, y) |
0 | (x, y - 1) | 0 |
(x - 1,y + 1) | 0 | (x + 1, y + 1) |
---|---|---|
0 | P(x, y) | 0 |
(x - 1,y - 1) | 0 | (x + 1,y - 1) |
八领域 = 四领域 + D领域
P9 | P2 | P3 |
---|---|---|
P8 | p1 | p4 |
P7 | p6 | P5 |
p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9 == 1表示该点为端点.
图片来自链接1。
断点修补的方法时判断两个端点的距离是否小于一个阈值,如果小于该阈值则将两个端点连接。
代码:
int main()
{
Mat src = imread("lena.bmp", 0);
imshow("src", src);
Canny(src, src, 60, 120);
imshow("canny", src);
Mat dst;
vector<Point>P;
P = breakImage(src, dst, 10);
imshow("dst", dst);
int nsize = P.size();
Mat temp = Mat::zeros(dst.size