Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image Matlab:二值图像中目标中心的搜索_Image_Matlab_Object_Image Processing_Binary - Fatal编程技术网

Image Matlab:二值图像中目标中心的搜索

Image Matlab:二值图像中目标中心的搜索,image,matlab,object,image-processing,binary,Image,Matlab,Object,Image Processing,Binary,我有一个如下的图像: 它是通过imshow(I)绘制的,I是一个逻辑矩阵,您可以从这里得到这个矩阵: 这些物体大多像是一个粗糙的圆,但它们也可能是某种大三倍的恶魔 我想找到这些物体的中心坐标,但只是估计的。我不想使用圆形hough变换,因为我只需要一个估计值,而且我需要一个快速算法 我的想法是:循环每个像素,如果它是true值,搜索所有也true的像素,然后通过计算得到对象的中心 x=x_max-xmin y=y_max-ymin 但我不喜欢这种方法,因为使用2个嵌套for循环对我来说似乎相

我有一个如下的图像:

它是通过
imshow(I)
绘制的,
I
是一个逻辑矩阵,您可以从这里得到这个矩阵:

这些物体大多像是一个粗糙的圆,但它们也可能是某种大三倍的恶魔

我想找到这些物体的中心坐标,但只是估计的。我不想使用圆形hough变换,因为我只需要一个估计值,而且我需要一个快速算法

我的想法是:循环每个像素,如果它是
true
值,搜索所有也
true
的像素,然后通过计算得到对象的中心

x=x_max-xmin

y=y_max-ymin

但我不喜欢这种方法,因为使用2个嵌套for循环对我来说似乎相当慢。 你能想到更好的吗?
谢谢

试试这个答案中使用的概念:

我试过了(通过保存您在上面提供的图像。我没有转到您提供的链接)。这似乎有效:

    Image = imread('im.jpg');
    dImage = im2double(Image);
    logicalImage = im2bw(dImage, 0.5);

    dilatedImage = bwmorph(logicalImage, 'shrink',Inf);
    [x,y] = find(dilatedImage);

这似乎相当快。但不太确定它将如何扩展:

L = bwlabel(I);
stats = regionprops(L,I,'Centroid');

如果使用
bwtraceboundary
可以跟踪二进制图像中的对象。一旦你抓住了物体,你可以做一个实验,这是另一个很好的方法,你可以哇哦,我真的很喜欢使用形态学收缩的技巧,但恐怕它相当慢。对于我的整个图像1000x1000像素,它需要2秒:(对于“实时”用途来说不是那么好哈,我有一些“奇怪的”在我想要的对象中心周围的噪声对象…当手动去除噪声时,它工作得非常快,因为算法可能不需要经常运行。非常感谢,非常可爱的方法!而且工作起来很有魅力!这是一种错误的方法,使用形态学收缩来解决这个问题是没有意义的——你必须假设e你的物体永远不会有洞。如果你碰巧有一个噪音在你的二元物体中造成任何类型的洞,即,至少一个黑点,那么你用这种方法得到的结果是没有意义的。请检查@Geodesic提供的答案。