干得好。我假设您有图像工具箱,因为如果没有,那么您可能不应该尝试做这类事情。然而,我相信所有这些功能都可以通过卷积来实现。我对上面显示的图像进行了此处理,并获得了点 (139,286),其中 138 是行,268 是列。
1.将图像转换为二值图像:
bw = bw2im(img, .25);
其中 img 是原始图像。根据图像,您可能需要调整第二个参数(范围从 0 到 1),以便只得到十字。不要担心十字架没有完全连接,因为我们将在下一步中解决这个问题。
2.放大图像以连接零件。我必须这样做两次,因为我必须将二进制图像转换的阈值设置得太低(图像的某些部分非常暗)。膨胀本质上只是在现有白色像素周围添加像素(当我将其发送到 bwmorph 时,我还将反转二进制图像,因为这些操作是针对值为 1 的白色像素起作用的)。
bw2 = bwmorph(~bw, 'dilate', 2);
最后一个参数表示执行膨胀操作的次数。
3.将图像缩小到一个点。
bw3 = bwmorph(bw2, 'shrink',Inf);
同样,最后一个参数表示执行该操作的次数。在这种情况下,我放入 Inf,它会缩小,直到只有一个像素是白色的(换句话说,就是 1)。
4.找到仍为1的像素。
[i,j] = find(bw3);
这里,i是bw3中像素的行,j是列,使得bw3(i,j)等于1。bw3中所有其他像素应该是0。
可能还有其他方法可以使用 bwmorph 来做到这一点,但我认为这种方法效果很好。您可能还需要根据图片进行调整。如果需要,我可以包含每个步骤的图像。