使用Matlab检测交叉中心点

Ver*_*ica 9 matlab image-processing computer-vision

替代文字

您好,我有一张如上图所示的图片.我可以检测十字的中心点并使用Matlab输出结果吗?谢谢.

Jus*_*eel 7

干得好.我假设你有图像工具箱,因为如果你没有那么你可能不应该尝试做这种事情.但是,我相信所有这些功能都可以用卷积来实现.我在上面显示的图像上完成了这个过程并获得了点(139,286),其中138是行,268是列.

1.将图像转换为二进制图像:

bw = bw2im(img, .25);
Run Code Online (Sandbox Code Playgroud)

其中img是原始图像.根据图像,您可能需要调整第二个参数(范围从0到1),这样您才能获得十字.不要担心交叉没有完全连接,因为我们将在下一步中解决这个问题.

2.将图像边缘化以加入零件.我不得不两次这样做,因为我必须在二进制图像转换上设置如此低的阈值(图像的某些部分非常暗).膨胀基本上只是在现有白色像素周围添加像素(当我将其发送到bwmorph时,我也将反转二进制图像,因为操作是作用于白色像素,这些像素的值为1).

bw2 = bwmorph(~bw, 'dilate', 2);
Run Code Online (Sandbox Code Playgroud)

最后一个参数表示进行扩张操作的次数.

3.将图像缩小到一定程度.

bw3 = bwmorph(bw2, 'shrink',Inf);
Run Code Online (Sandbox Code Playgroud)

同样,最后一个参数表示执行操作的次数.在这种情况下,我放入Inf缩小,直到只有一个像素为白色(换句话说是1).

4.找到仍为1的像素.

[i,j] = find(bw3);
Run Code Online (Sandbox Code Playgroud)

这里,i是行,j是bw3中像素的列,使得bw3(i,j)等于1.所有其他像素在bw3中应为0.

使用bwmorph可能还有其他方法可以做到这一点,但我认为这种方式效果很好.您可能还需要根据图片进行调整.如果需要,我可以包括每个步骤的图像.