图像中的点是否位于圆的扇区内?
If a point in an image lies inside the sector of the circle or not?
我把相关图片分成了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
我也试过检查面积和的条件而不是行列式,但都一样,找不到原因。所有这些我都是在这个平台上发布的类似问题的帮助下完成的,但我无法特别解决这个问题。
如果有人能找出代码在第一张图片上不起作用的原因以及解决它的解决方案,那将非常有帮助。
我已经找到解决办法了。上面代码行
P = [contoor_w(i,1), contoor_w(i,2)];
应该是
P = [contoor_w(i,2), contoor_w(i,1)];
我把相关图片分成了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
我也试过检查面积和的条件而不是行列式,但都一样,找不到原因。所有这些我都是在这个平台上发布的类似问题的帮助下完成的,但我无法特别解决这个问题。
如果有人能找出代码在第一张图片上不起作用的原因以及解决它的解决方案,那将非常有帮助。
我已经找到解决办法了。上面代码行
P = [contoor_w(i,1), contoor_w(i,2)];
应该是
P = [contoor_w(i,2), contoor_w(i,1)];