Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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/6/xamarin/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 图像中的点是否位于圆的扇区内?_Matlab_Image Processing_Geometry_Gesture Recognition - Fatal编程技术网

Matlab 图像中的点是否位于圆的扇区内?

Matlab 图像中的点是否位于圆的扇区内?,matlab,image-processing,geometry,gesture-recognition,Matlab,Image Processing,Geometry,Gesture Recognition,我已将相关图像分成12个相等的部分。我的任务是找出每个部分的要点,然后标记它们。我已经编写了一个代码,它可以很好地处理一些图像,但不能处理其他图像。我无法找出原因。 这是密码 cent = regionprops(croppedImage,'Centroid'); cent = cat(1,cent.Centroid); figure; imshow(croppedImage) hold on; plot(cent(1,1),cent(1,2),'r*') contoor = edge(crop

我已将相关图像分成12个相等的部分。我的任务是找出每个部分的要点,然后标记它们。我已经编写了一个代码,它可以很好地处理一些图像,但不能处理其他图像。我无法找出原因。 这是密码

cent = regionprops(croppedImage,'Centroid');
cent = cat(1,cent.Centroid);
figure;
imshow(croppedImage)
hold on;
plot(cent(1,1),cent(1,2),'r*')
contoor = edge(croppedImage,'sobel');
[ril,cil] = find(contoor == 1);
contoor_w = [ril,cil];
contoor_s = size(contoor);

a = linspace(0, 2*pi, 13);
a_s = size(a');
contoor_s = size(contoor);
r = round(((contoor_s(1,1)/2 + contoor_s(1,2)/2)/2)+6);
x = cent(1,1) + r*cos(a);
y = cent(1,2) + r*sin(a);
figure;
imshow(contoor);
hold on;
plot(x,y)
for k = 1:x_s(1,2)-1
    P1 = [cent(1,1), cent(1,2)];
    P2 = [x(1,k),y(1,k)];
    P3 = [x(1,k+1), y(1,k+1)];
    P12 = P1-P2;
    P23 = P2-P3;
    P31 = P3-P1;
    s = det([P1-P2;P3-P1]);
    contoor_w_s = size(contoor_w);
    important = zeros(contoor_w_s(1,1),2);
    for i = 1:contoor_w_s(1,1)
        P = [contoor_w(i,1), contoor_w(i,2)];
        if (s*det([P3-P;P2-P3])>=0 & s*det([P1-P;P3-P1])>=0 & s*det([P2-P;P1-P2])>=0)
            important(i,:) = P;
        end
    end
    figure;
    imshow(contoor)
    hold on;
    plot(important(:,2),important(:,1),'g*') 
end
对于这张图片,结果不会出来。 此图像的结果如下所示: “k”循环中每个迭代的更详细结果:

对于此图像,代码工作正常。 此图像的结果如下所示: “k”循环中每个迭代的更详细结果:

我也试着检查面积和的条件,而不是行列式,但都一样,找不到原因。所有这些我都是在这个平台上发布的类似问题的帮助下完成的,但我无法特别解决这个问题


如果有人能找出代码在第一张图片上不起作用的原因以及解决它的方法,那么它将非常有用

我已经找到了解决办法。上面代码的行

P = [contoor_w(i,1), contoor_w(i,2)];
应该是

P = [contoor_w(i,2), contoor_w(i,1)];

我已经找到了解决办法。上面代码的行

P = [contoor_w(i,1), contoor_w(i,2)];
应该是

P = [contoor_w(i,2), contoor_w(i,1)];

看看多边形中的内置函数。这将告诉您点是否位于内部。我已经为两个手部图像添加了结果图像。我想在代码中的变量“important”中获得特定于扇区的点,并用绿色*显示它。循环“对于k=1:x_s(1,1)”将适用于本例中为12的所有扇区。因此,循环完成后,手应该显示边界上的每一点,并用绿色标记*。西瓦·斯里尼瓦斯·科鲁库拉在波利贡也在做同样的事情。问题是,对于某些图像,我正在为圆内的每个扇区获取点(在结果图像中显示为绿色*)。但在使用上述问题所示的图像时,无法获取圆的某些扇区的点。请查看多边形中的内置函数。这将告诉您点是否位于内部。我已经为两个手部图像添加了结果图像。我想在代码中的变量“important”中获得特定于扇区的点,并用绿色*显示它。循环“对于k=1:x_s(1,1)”将适用于本例中为12的所有扇区。因此,循环完成后,手应该显示边界上的每一点,并用绿色标记*。西瓦·斯里尼瓦斯·科鲁库拉在波利贡也在做同样的事情。问题是,对于某些图像,我正在为圆内的每个扇区获取点(在结果图像中显示为绿色*)。但在使用上述问题所示的图像时,无法获取圆的某些扇区的点。