如果图像中的某个点位于圆的扇区内?

时间:2017-11-07 08:03:21

标签: 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(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

croppedImage 对于此图像,结果不会到来。 该图像的结果如下: enter image description here “k”循环中每次迭代的更详细的结果: enter image description here

croppedImage 对于此图像,代码正常工作。 该图像的结果如下: enter image description here “k”循环中每次迭代的更详细的结果: enter image description here

我也尝试检查区域总和的条件而不是行列式,但都是相同的,并且无法找出原因。我使用此平台上发布的类似问题的帮助完成了所有这些,但我无法特别解决这个问题。

如果有人能够找到代码没有在第一张图片上工作的原因以及解决它的解决方案,那么它将非常有用。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。上面代码的行

String msg = e.getMessage();
throw new BadRequestException(Response.status(BAD_REQUEST)
                .entity(msg).build());

应该是

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