Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
在Matlab上找出图像中的第一个圆(wrt.y轴)_Matlab - Fatal编程技术网

在Matlab上找出图像中的第一个圆(wrt.y轴)

在Matlab上找出图像中的第一个圆(wrt.y轴),matlab,Matlab,我正在使用Matlab。我有一个二维二进制图像/数组。像这样 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 我想找出第一个白色块

我正在使用Matlab。我有一个二维二进制图像/数组。像这样

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 0 1 0 0
0 0 1 1 0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
我想找出第一个白色块/圆相对于y轴的中心 以上图片的答案将是

0 1 0
1 1 1
0 1 0

任何对此有最简单解决方案的人。

如果要查找模板的精确匹配项,可以使用移动过滤器,例如:

H=[0 0 0 0 0 0 0 0 0 0 0 0 0;
   0 0 0 0 0 0 1 0 0 0 0 0 0;
   0 0 0 0 0 1 1 1 0 0 1 0 0;
   0 0 1 1 0 0 1 0 0 0 0 0 0;
   0 0 0 1 0 0 0 0 0 0 0 0 0;
   0 0 0 0 0 0 1 0 0 0 0 0 0;
   0 0 0 0 0 0 1 1 0 0 0 0 0;
   0 0 0 0 0 0 1 0 0 0 0 0 0];

b=[0 1 0;
   1 1 1;
   0 1 0];

C=filter2(b,H, 'same');
[x,y]=find(C==max(max(C)));
x
y
是模板在数组左上角的显示顺序

编辑:如果您有图像处理工具箱,并且正在寻找一种不太严格的方法来查找大致呈圆形的对象,您可以使用
'Centroid'
'centrics'
参数以及
bwconcomp
函数

ObjectStats=regionprops(bwconncomp(H,4), 'Centroid', 'Eccentricity');
“偏心率”为0(或接近0)的对象将是圆

idx=find(cell2mat({ObjectStats.Eccentricity})==0); % Change ==0 to <0.2 or something to make it less strict.
ctrs={ObjectStats.Centroid};

>> ctrs{1,idx(1)}

ans =

     7     3
idx=find(cell2mat({ObjectStats.偏心率})==0);%Change==0到>ctrs{1,idx(1)}
ans=
7     3

请注意,在您的例子中,单个像素是偏心率为0的对象,它是您可以找到的最小“圆”。如果需要定义最小大小,请使用
regionprops

的“区域”属性。您可以通过简单的二维卷积来完成此操作。它将沿一个较大的矩阵“叠加”过滤器,并将过滤器乘以其叠加的值。如果乘积等于过滤器的和,那么您就知道找到了匹配项

下面是一些简单的代码

mat = [0 0 0 0 0 0 0 0 0 0 0 0 0
       0 0 0 0 0 0 1 0 0 0 0 0 0
       0 0 0 0 0 1 1 1 0 0 1 0 0
       0 0 1 1 0 0 1 0 0 0 0 0 0
       0 0 0 1 0 0 0 0 0 0 0 0 0
       0 0 0 0 0 0 1 0 0 0 0 0 0
       0 0 0 0 0 0 1 1 0 0 0 0 0
       0 0 0 0 0 0 1 0 0 0 0 0 0];

filt = [0 1 0
        1 1 1
        0 1 0];

[row,col] = find(conv2(mat,filt,'same') == sum(filt(:)))

这是一个具体的例子,因此那里的答案应该也能帮助你,尽管这里的答案似乎更简单。您可能还对这种模式可能会有所不同的模式感兴趣。。可能是0 0 0 0 1 0 0 1 0 0 0 0 0 0 0注意,如果要添加有关问题的信息,最好的方法是编辑它,而不是写评论。不,这不是必需的。这是一个具体的案例。。我想要一个找到第一个圆的一般解。它现在的形状像一颗钻石,可能有两颗以上的钻石。。。形状可以随时变化。请指出您是否对圆形或连接的像素点感兴趣,在后一种情况下,请检查
bwconcomp
函数。只需注意
regionprops
需要图像处理工具箱,因此,它可能不是每个人都可以使用。我有这个图像s24.postimg.org/n1r2kg0bl/image.png我想得到关于y轴的第一块1(白色)(不包括x轴)这可能是一个圆或一个圆block@muaaz这些根本不是圆。你有图像处理工具箱吗?@MZimmerman6同意,我在回答中加了一条注释。谢谢通知我。我有这个图像s24.postimg.org/n1r2kg0bl/image.png我想得到关于y轴的第一块1(白色)(不包括x轴)这可能是一个圆或一个圆block@muaaz首先,我建议不要多次发布相同的评论。其次,您只需要稍微调整过滤器,使其与您正在寻找的形状相匹配。你请客。该过程将是相同的,并且不需要任何额外的工具箱。您还需要定义什么是“第一”,从左到右扫描时是“第一”,还是从上到下扫描时是“第一”?MATLAB将按列显示索引